x64dbg - 第三十三章 | 反匯編練習(二十二)
目標程式
檔案下載:ReverseMe.A~D.exe
解壓密碼:morosedog
程式簡介
- 程式都有反調試
任務目標
- 跳過或是移除反調試
分析程式
- 執行
ReverseMe.A.exe - 彈出
You really did it! Congratz !!! - 點擊
確定 - 結束
註:ReverseMe.A.exe ~ ReverseMe.D.exe 分析結果一致。
檢驗顯示是使用MASM32 / TASM32編寫。

前置作業
- 因為我有使用ScyllaHide開源用戶模式的Anti-Anti-Debug插件。
- 所以請下載純淨版的x64dbg
註:主要是用於使用原本的
x64dbg調試反調試的程式的一個狀態;如無安裝ScyllaHide則可忽略前置作業。
額外補充
- 一般常見的反調試的技術,可以參考下面的
PDF來了解
檔案下載:反調試技術總結.pdf
解壓密碼:morosedog
- IsDebuggerPresent函數
- 如果當前進程在調試器的上下文中運行,則返回值為非零。
- 如果當前進程未在調試器的上下文中運行,則返回值為零。
搜尋思路
- 一步一步觀察,找尋反調試的代碼
修改思路
- 跳過或是移除調試代碼
實際分析
開啟純淨版的
x64dbg開啟
ReverseMe.A.exeF9執行程式彈出
Keyfile is not valid. Sorry.一般開啟時,彈出
You really did it! Congratz !!!,但是用x64dbg開啟啟用,卻彈出Keyfile is not valid. Sorry.
開啟
ReverseMe.B.exeF9執行程式F9執行程式在此發現沒有什麼反應,但是過程中有在跑
左下角顯示
暫停,內容為``Last chance exception on 00401106 (C0000005, EXCEPTION_ACCESS_VIOLATION)`
開啟
ReverseMe.C.exeF9執行程式F9執行程式直接終止,除錯停止!
開啟
ReverseMe.D.exeF9執行程式F9執行程式在此發現沒有什麼反應,但是過程中有在跑
左下角顯示
暫停,內容為Last chance exception on 00000001 (C0000005, EXCEPTION_ACCESS_VIOLATION)
進一步分析
開啟純淨版的
x64dbg開啟
ReverseMe.A.exeF8一步一步過,並持續觀察004010D3 | E8 23000000 | call reverseme.a.4010FB |彈出未註冊的視窗004010FB設定中斷點Ctrl + F2重新啟動(S)F9執行程式斷點在
004010FB | E8 D7010000 | call <JMP.&IsDebuggerPresent> |觀察程式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23004010DB | 7C 05 | jl reverseme.a.4010E2 |
004010DD | E8 2C000000 | call reverseme.a.40110E |
004010E2 | 6A 00 | push 0 |
004010E4 | 68 00204000 | push reverseme.a.402000 | 402000:" Key File ReverseMe"
004010E9 | 68 86204000 | push reverseme.a.402086 | 402086:"Keyfile is not valid. Sorry."
004010EE | 6A 00 | push 0 |
004010F0 | E8 72020000 | call <JMP.&MessageBoxA> |
004010F5 | E8 BF010000 | call <JMP.&ExitProcess> |
004010FA | C3 | ret |
004010FB | E8 D7010000 | call <JMP.&IsDebuggerPresent> |
00401100 | 83F8 01 | cmp eax,1 |
00401103 | 74 DD | je reverseme.a.4010E2 |
00401105 | C3 | ret |
00401106 | 6A 00 | push 0 |
00401108 | E8 AC010000 | call <JMP.&ExitProcess> |
0040110D | C3 | ret |
0040110E | 6A 00 | push 0 |
00401110 | 68 00204000 | push reverseme.a.402000 | 402000:" Key File ReverseMe"
00401115 | 68 51204000 | push reverseme.a.402051 | 402051:" You really did it! Congratz !!!"
0040111A | 6A 00 | push 0 |
0040111C | E8 46020000 | call <JMP.&MessageBoxA> |
00401121 | E8 93010000 | call <JMP.&ExitProcess> |
00401126 | C3 | ret |可以發現
00401103 | 74 DD | je reverseme.a.4010E2 |為關鍵跳轉cmp eax,1成立則會彈出Keyfile is not valid. Sorry.
分析總結
- 正常執行時會彈出
You really did it! Congratz it,但是x64dbg執行會出現Keyfile is not valid.Sorry. - 通過以上的分析,四個程式都有做到反調試的作用
修改思路
- 將
00401103該段用NOP做填充。
總結
ReverseMe.A~D.exe四個程式,建議都去分析修改看看,這邊主要是體驗反調試程式,並沒有深入研究;建議還是看看反調試技術總結.pdf多做了解。
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (十九)
看雪安全論壇 的 [原创]反调试技术总结
