1. 程式人生 > >OD 實驗(二十一) - 對反除錯程式的逆向分析(二)

OD 實驗(二十一) - 對反除錯程式的逆向分析(二)

程式:

執行程式

點選“Verify”

關閉該程式,啟動 OD

再執行程式

逆向:

用 OD 載入程式

按 F8 往下走

執行完這個 call 指令就彈出了對話方塊

這個 call 指令呼叫了 DialogBoxParam 函式建立模態對話方塊

如果步入該函式的話,會跳到動態連結庫中

如果按 Alt+F9 讓程式回到執行區域的時候停下也不行

DialogBoxParam 函式具體實現什麼樣的操作由引數 IpDialogFunc 決定,IpDialogFunc 為指向模態對話方塊過程的指標

IpDialogFunc 引數指向的地址為 40108C

在該處下一個斷點,執行程式

停在斷點處

按 F8 往下走

執行跳轉,一路預設往下走

到了動態連結庫中,按 Alt+F9

程式又回到了起始處,繼續往下走

這次的跳轉沒有實現

接著往下走

走到這個地方會響一聲彈出對話方塊的聲音,然後又回到原處

這個 call 處下一個斷點,重新跑一下程式

停在這個地方後,按 F8

彈出了對話方塊

看來是這個 call 語句

步入這個 call 語句

這裡先是呼叫了一個 API 函式 CreateToolhelp32Snapshot 來建立程序快照

這兩個是它的引數

這個函式的第一個引數 dwFlags 用來指定“快照”中需要返回的物件,第二個引數 th32ProcessID 用來指定要獲取哪一個程序的快照,當獲取系統程序列表或獲取 當前程序快照時可以設為 0

該函式如果呼叫成功,返回快照的控制代碼;呼叫失敗,返回 INVALID_HANDLE_VALUE

eax 的值為 BC,函式呼叫成功

執行完這句,EDI 的值為 OLLYDBG.EXE

 

然後呼叫 Process32First 函式,前面兩個是它的函式

當利用函式 CreateToolhelp32Snapshot 函式獲得當前執行程序的快照後,可以用 Process32First 函式來獲得第一個程序的控制代碼

接著往下走

[System Process] 為 Process32First 函式的結果

然後呼叫 lstrcmpi 函式對它的兩個引數進行對比,前面兩個是它的引數

如果兩個的值相同返回 0,不同返回 1

值為 1,兩個引數的值不同

這個跳轉就沒有實現,如果是 0 的話,跳轉實現

接著往下走

接下來呼叫了 Process32Next 函式,前面兩個為它的引數

Process32Next 函式用來獲得下一個程序的控制代碼

接著往下走

Process32Next 獲取的是 System

然後呼叫 lstrcmpi 函式進行字串對比,兩個值不一樣,返回 1

跳轉沒有實現

往下走

這個跳轉往上跳,是一個迴圈

通過 Process32Next 函式逐個地獲取程序的控制代碼,並判斷程序中是否有“OLLYDBG.EXE”
如果程序中存在 OLLYDBG.EXE 就會彈出錯誤的對話方塊

如果程序中沒有 OLLYDBG.EXE,則呼叫 CloseHandle,然後返回,ollybug.exe 不區分大小寫