Необходимо подобрать правильный серийный номер для решения.
Solution
Начну со статического анализа. Перейду к функции main, благо файл не зачищен)
main:
int32_t main(int32_t argc, char** argv, char** envp)
{
void* const __return_addr_1 = __return_addr;
int32_t* var_c = &argc;
int32_t var_14 = 0xb;
printf("Enter serial number: ");
void buf;
fgets(&buf, 0xb, stdin);
Check(&buf);
return 0;
}
Понятно, мы вводим серийный номер длиной 0xb, далее он проверяется функцией Check:
int32_t Check(char* arg1)
{
size_t ebx = 0;
if (strlen(arg1) > 6)
{
if (arg1[3] == 'w')
ebx = 1;
if (arg1[6] == 'D')
ebx += 1;
if (arg1[5] == '3')
ebx += 1;
if (arg1[2] == 'F')
ebx += 1;
if (arg1[1] == '2')
ebx += 1;
if (arg1[4] == '1')
ebx += 1;
}
size_t eax;
eax = ebx == 6;
char var_d = eax;
PrintOK(((uint32_t)var_d));
return PrintError(((uint32_t)(var_d ^ 1)));
}
Функция не выглядит сложной. Отсортирую проверки, чтобы легко подобрать серийный номер:
if (strlen(arg1) > 6) {
if (arg1[1] == '2')
ebx += 1;
if (arg1[2] == 'F')
ebx += 1;
if (arg1[3] == 'w')
ebx = 1;
if (arg1[4] == '1')
ebx += 1;
if (arg1[5] == '3')
ebx += 1;
if (arg1[6] == 'D')
ebx += 1;
}
Итак, ключ должен выглядеть следующим образом (* - любой символ, регулярки все таки):
*2Fw13D****
Бинарь у меня не запускается, поэтому проверю флаг на сайте:
