no-strings-attached

怪味巧克力發表於2020-06-01

0x01

拿到程式,直接IDA放進去看一下,結果如圖:

我們發現main中有四個函式,我們一個一個進去,經過分析之後,發現authenticate();是關鍵函式,所以,接下來我們進去看看。

void authenticate()
{
  wchar_t ws[8192]; // [esp+1Ch] [ebp-800Ch]
  wchar_t *s2; // [esp+801Ch] [ebp-Ch]

  s2 = (wchar_t *)decrypt(&s, &dword_8048A90);
  if ( fgetws(ws, 0x2000, stdin) )
  {
    ws[wcslen(ws) - 1] = 0;
    if ( !wcscmp(ws, s2) )
      wprintf(&unk_8048B44);
    else
      wprintf(&unk_8048BA4);
  }
  free(s2);
}

這裡可以看出,關鍵的地方在

decrypt(&s, &dword_8048A90);

所以我們在decrypt結束處下斷電,然後觀察暫存器的值,這裡我們使用gdb,因為這個程式是linux下執行的,所以我們使用gdb

0x02

1.開啟gdb

2.向gdb中載入檔案

3.在decrypt()結束處下斷(通過IDA我們可以知道結束處的地址為0x08048707)

4.r 執行

5.檢視暫存器

6.將暫存器eax中的值直接以字串形式輸出,拿到flag