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 跳轉到此處的話肯定會出錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM