Нужно подобрать корректный пароль к файлу.
Бинари:
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. Проверю это:
