IsDebuggerPresent
示在被調試器調試情況下,調用該函數會返回正在被調試。
并且該函數是被Kernel32.dll導出的,該函數沒有參數,如果當前程序正在被調試的話,返回值為1,沒有被調試的話,返回值為0
跟其他API函數一樣,IsDebuggerPersent的返回值也保存在EAX中。
下面是一個帶反調試函數`IsDebuggerPresent`的程序
用原版OD會自動停下(因為檢測到有調試器)
鏈接:https://pan.baidu.com/s/1MFTdRcRarONy3OIbSKdLGA
下函數斷點:`bp IsDebuggerPresent`
Ctrl+F9執行到返回,可以看到EAX為1,說明檢測到調試器
接著運行,程序回自動停下來
我們把EAX的值改為0,程序成功運行
可以給程序打個補丁:
跟到函數返回接著F8,跳過結束進程的函數,把程序從存一份