大家好,我是胡一米。這期視頻是關(guān)于2016年看雪CTF第22題解題資料。
視頻是基于其他大佬文字Writeup錄制的,所以在視頻操作之前就已知了該題中的各種坑,如反調(diào)試等,所以不再演示踩坑過(guò)程。
第22題主要參看了tgjarwl、風(fēng)間仁以及HighHand的Writeup,鏈接如下:
風(fēng)間仁:
https://bbs.pediy.com/thread-214606.htm
在本期中,主要討論4個(gè)問(wèn)題。這4個(gè)問(wèn)題可能與最終的Key沒(méi)有太大的聯(lián)系,但題目中既然出現(xiàn)了,還是說(shuō)一說(shuō)。此4個(gè)問(wèn)題分別是:
a. c++ EH
b. 調(diào)試與異常
c. context結(jié)構(gòu)
d. 雙進(jìn)程調(diào)試方法
結(jié)合其他大佬的分析過(guò)程,可以直接定位到關(guān)鍵點(diǎn)。.
a. c++ EH
b. 調(diào)試與異常
CREATE_PROCESS_DEBUG_EVENT 3
CREATE_THREAD_DEBUG_EVENT 2
EXCEPTION_DEBUG_EVENT 1
EXIT_PROCESS_DEBUG_EVENT 5
#define EXCEPTION_BREAKPOINT ((DWORD)0x80000003)
#define EXCEPTION_SINGLE_STEP ((DWORD)0x80000004)
#define EXCEPTION_ACCESS_VIOLATION ((DWORD)0xC0000005)
#define EXCEPTION_INT_DIVIDE_BY_ZERO ((DWORD)0xC0000094)
通過(guò)動(dòng)態(tài)調(diào)試,理解程序內(nèi)存加載過(guò)程。
a. 雙進(jìn)程調(diào)試方法
b. context結(jié)構(gòu)
ACCESS_VIOLATION
BREAKPOINT A * 7 + 1
BREAKPOINT 1 change order
BREAKPOINT 2 compare first
BREAKPOINT A
BREAKPOINT 3 compare second
BREAKPOINT 2
BREAKPOINT 3 compare third
BREAKPOINT A * 4
BREAKPOINT C
BREAKPOINT D
SingleStep 0x12
ACCESSVIOLATION 0x8
….
….
….
….
+0x08c SegGs
+0x090 SegFs
+0x094 SegEs
+0x098 SegDs
+0x09c Edi
+0x0a0 Esi
+0x0a4 Ebx
+0x0a8 Edx
+0x0ac Ecx
+0x0b0 Eax
+0x0b4 Ebp
+0x0b8 Eip
+0x0bc SegCs
+0x0c0 EFlags
+0x0c4 Esp
+0x0c8 SegSs
這里直接使用風(fēng)間仁大佬貼出的代碼。
題目很好。
錄制順序:29 – 28 – 7 – 19 – 22 - ?