Like Share Discussion Bookmark Smile

J.J. Huang   2019-09-07   x64dbg   瀏覽次數:

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
    23
    004010DB | 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 使用笔记 (十九)
看雪安全論壇[原创]反调试技术总结