Нужно подобрать корректный пароль к файлу.

Бинари:

Solution

Гляну информацию о файле:

Info:
    File name: /spbctf_rev/Nostr 1/s2.out
    Size: 7356
    File type: ELF32
    String: ELF(386)
    Extension: elf
    Operation system: Linux(ABI: 2.6.32)
    Architecture: 386
    Mode: 32-bit
    Type: EXEC
    Endianness: LE

Закину его в Binary Ninja.

А вот и функция main:

int32_t main(int32_t argc, char** argv, char** envp) {
    void* const __return_addr_1 = __return_addr
    int32_t* var_c = &argc
    printf(format: "This is secure app, you need pas…")
    char var_113
    scanf(format: "%s", &var_113)
    char var_112
    char var_111
    char var_110
    char var_10f
    char var_10e
    
    if (strlen(&var_113) != 6 || var_113 != 0x71 || var_112 != 0x77 || var_111 != 0x65 || var_110 != 0x72 || var_10f != 0x74 || var_10e != 0x79)
        puts(str: "Go out of here!")
        return 0
    
    puts(str: "You are welcome! Now you can use…")
    return 1
}

По формату из scanf можно понять, что var_113 — это строка. А в условии strlen(&var_113) != 6 проверяется длина строки. Преобразую функцию:

int32_t main(int32_t argc, char** argv, char** envp) {
    void* const __return_addr_1 = __return_addr
    int32_t* var_c = &argc
    printf(format: "This is secure app, you need pas…")
    char flag[0x7]
    scanf(format: "%s", &flag)
    
    if (strlen(&flag) != 6 || flag[0] != 'q' || flag[1] != 'w' || flag[2] != 'e' || flag[3] != 'r' || flag[4] != 't' || flag[5] != 'y')
        puts(str: "Go out of here!")
        return 0
    
    puts(str: "You are welcome! Now you can use…")
    return 1
}

Стало гораздо лучше) Пароль очевиден — qwerty. Проверю это:

IMG