开启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就能过。