no-strings-attached
- 2020 年 6 月 1 日
- 筆記
- CTF-reverse
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



