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

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

程式:

Keyfile.dat 裡的內容

該檔案中要至少有 9 個

ReverseMe.A:

執行程式

用 OD 開啟該程式,執行

彈出的是錯誤的對話方塊

該程式發現 OD 對它的除錯,所以該程式對 OD 進行反除錯

重新載入程式,按 F8 往下走

這個迴圈是對 Keyfile.dat 的內容進行判斷的

迴圈過來,來到一個 call 語句

執行該 call 語句就會彈出那個彈窗

這個 call 指令呼叫的函式就在下面

這個地方呼叫了一個 IsDebuggerPresent 函式

該函式判斷程式程序是否由使用者模式的偵錯程式除錯,如果當前程序在偵錯程式中,返回值為非零值,如果當前程序不在偵錯程式中,返回值為零

按 F8 往下走

返回值 eax 的值為 1,是非零

然後執行跳轉,跳到彈出是錯誤的對話方塊

Reverse.B:

執行程式

用 OD 載入程式,執行

程式執行到該處會暫停,再執行

程式就終止了

重新載入程式,按 F8 一步一步往下走

這裡還是執行了 call 指令

呼叫 IsDebuggerPresent 函式

接著往下走

 把 esp 給 401121

繼續執行程式,程式就終止了

Reverse.C:

執行程式

用 OD 載入程式,執行

程式直接終止了

重新載入程式,按 F8 往下走

執行 call 指令之後會先用 IsDebuggerPresent 函式進行判斷是否被反除錯

eax 的值為 1,執行跳轉,然後執行 ExitProcess 函式退出程式

Reverse.D:

執行程式

用 OD 載入程式,執行

重新載入程式,按 F8 往下走

這裡 eax 為 1 的話,跳轉到 jmp eax 這

此時 eax 的值為 1,jmp eax 跳轉到此處的話肯定會出錯