開啟OD,打開任務管理器,可以看到Ollydbug的進程名
下面這個程序可以通過檢測進程名停止程序。
鏈接:
https://pan.baidu.com/s/1CkA6uGMe9CIEhI6Wtc0ewA
把他載入OD,停在了入口點處
**查看API列表**
> 我們可以看到有很多API函數
> 但都不是用于檢測進程名的
> 可能這些重要的API函數被隱藏起來了,沒有出現該列表中
> 很顯然如果程序不直接導入某些API的話
> 會使用GetProcAddress這個API 函數
> 來獲取這些API函數的地址進行間接調用
>
使用GetProcAddress函數加載的一些API函數
并不會出現該API函數列表中
我們給GetProcAddress設置一個斷點
`bp GetProcAddress`
運行起來,斷在了GetProcAddress入口點處
當前待獲取的函數是__CPPdebugHook
該函數檢測進程名沒有關系,繼續運行
我們繼續按F9鍵運行直到待獲取的API是與檢測進程名相關的為止
這里待獲取的API函數是EnumProcesses
> 該函數返回正在運行的每個進程的標識即PID
> PID是系統分配給每個正在運行的進程的標識符
> 每次啟動的時候都會發生變化
Ctrl+F9執行到返回
這個時候EAX寄存器中保存的就是EnumProcesses這個API函數的地址了
給該地址設置斷點
`Bp 函數地址`
繼續我們剛才的步驟,看看還有什么API函數被加載
這里是獲取枚舉進程模塊函數的地址GetprocAddress
我們還是執行到返回,接著給EAX中保存的地址設置斷點
`bp EAX`
同理,我們給所有與檢測進程名相關的API函數設置斷點
另外一個可疑的API函數GetModuleBaseNameA
然后我們運行起來,斷在了EnumProcesses函數的入口處。
注釋上該函數的名稱EnumProcesses
好復雜,不弄了
用吾愛的OD就能過。