Guess the random number, and app will give you the flag.
Solution
Статический анализ
int32_t main(int32_t argc, char** argv, char** envp)
{
puts("GUESS THE RANDOM game!");
int32_t var_c;
read(open("/dev/urandom", 0), &var_c, 4);
srand(var_c);
var_c = rand();
printf("I'm thinking of a number... What is it? > ");
int32_t var_10;
__isoc99_scanf("%i", &var_10);
if (var_10 != var_c)
puts("No!");
else
{
puts("Correct! Have the flag");
obfuscated_print_the_flag();
}
return 0;
}
Число случайное — угадать нельзя. Можно либо пропатчить бинарь, либо вызвать obfuscated_print_the_flag() напрямую из GDB.
Патчинг
Убираю условие: пусть флаг выводится всегда:
$ ./mc2.elf_patched
GUESS THE RANDOM game!
I'm thinking of a number... What is it? > 123
Correct! Have the flag
flag: Y3p_Numbah_Gu3ss3d
Динамическая отладка
Можно не патчить — просто вызвать нужную функцию прямо из GDB:
pwndbg> b *main
pwndbg> r
pwndbg> p (void *) obfuscated_print_the_flag()
flag: Y3p_Numbah_Gu3ss3d
$1 = (void *) 0x55555560258d
Y3p_Numbah_Gu3ss3d