Какая строчка в памяти по адресу 0x61ebce?

Solution

Нужно найти строку по адресу. Изи:

IMG

Окак. Значит нужно будет чутка пореверсить.

  int32_t main(int32_t argc, char** argv, char** envp)

      int32_t var_c = 0
      int64_t rax
      rax.b = 0
      obfuscated_prepare_memory()
      void* rax_1
      rax_1.b = 0
      int32_t var_10 = printf(format: "Hope you got what you wanted!\n")
      int32_t rax_2
      rax_2.b = 0
      int32_t var_14 = printf(format: "Checking... ")
      int32_t rax_4
      
      if (strcmp("dont_give_flag", "I_WANT_THE_FLAG!") == 0)
          rax_4.b = 0
          int32_t var_18_1 = printf(format: "okok, giving you the flag..\n")
          int32_t rax_5
          rax_5.b = 0
          obfuscated_give_flag()
      else
          rax_4.b = 0
          printf(format: "looks like you don't want flag\n")
      return 0

Кажется, что стоит запустить бинарь и дойти хотя бы до строки void* rax_1. Так как только из этой функции есть обращения к этой памяти:

IMG

Это не означает, что больше нигде таких обращений не будет, ибо дизассемблер мог не все разобрать. Тем не менее, искать перекресные ссылки - дело полезное. Запущу бинарь в отладчике и поставлю брейк поинт на 0x4005c4.

IMG

IMG

Проверю память с помощью команд:

  • x/i, x/x, x/s, x/a - отображение по адресу инструкции/hex/строка/адрес;
  • x/b, x/h, x/w, x/g - размер вывода 8/16/32/64;

IMG

А вот и флаг:

westgate1697