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