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