OD 實驗(二十) - 對反除錯程式的逆向分析(一)
阿新 • • 發佈:2018-11-10
程式:
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 跳轉到此處的話肯定會出錯