Статья - это мой личный опыт взлома 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 = &param_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

Но вводить его надо так, чтобы символы ! и ? не воспринимались как командные