Статья - это мой личный опыт взлома crackme, актуальность на лето 2022
При вводе неправильного пароля мы видим вот такую картину

Ghydra показывает, что основная функция и проводит проверку
undefined4 main(int param_1,int param_2)
{
undefined4 local_33;
undefined4 local_2f;
int local_24;
undefined4 *local_14;
local_14 = ¶m_1;
if (param_1 < 2) {
puts("missing argument\n");
/* WARNING: Subroutine does not return */
exit(-1);
}
local_33 = 0x67217567;
local_2f = 0x733f75;
puts("...Good morning...");
local_24 = strcmp((char *)&local_33,*(char **)(param_2 + 4));
if (local_24 == 0) {
puts("Access granted");
puts("Congratulation");
}
else {
puts("Sorry....");
puts("Try again");
}
return 0;
}Тип undefined4 - это unsigned int
Не задумываясь смотрим, что выдаёт это
(char *)&local_33
Однако, local_33 перезаписывается local_2f, и на момент работы strcmp() принимает

После долгих поисков ошибки я понял, что её нет, а пароль и есть: gu!gu?s
Но вводить его надо так, чтобы символы ! и ? не воспринимались как командные
