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.exe
F9
執行程式彈出
Keyfile is not valid. Sorry.
一般開啟時,彈出
You really did it! Congratz !!!
,但是用x64dbg
開啟啟用,卻彈出Keyfile is not valid. Sorry.
開啟
ReverseMe.B.exe
F9
執行程式F9
執行程式在此發現沒有什麼反應,但是過程中有在跑
左下角顯示
暫停
,內容為``Last chance exception on 00401106 (C0000005, EXCEPTION_ACCESS_VIOLATION)`
開啟
ReverseMe.C.exe
F9
執行程式F9
執行程式直接終止,除錯停止!
開啟
ReverseMe.D.exe
F9
執行程式F9
執行程式在此發現沒有什麼反應,但是過程中有在跑
左下角顯示
暫停
,內容為Last chance exception on 00000001 (C0000005, EXCEPTION_ACCESS_VIOLATION)
進一步分析
開啟純淨版的
x64dbg
開啟
ReverseMe.A.exe
F8
一步一步過,並持續觀察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 使用笔记 (十九)
看雪安全論壇 的 [原创]反调试技术总结