本帖最后由 1185384801 于 2018-7-26 21:39 编辑
预告帖子在这里:无聊,写了个检测APIHook,还原APIHook的http://bbs.125.la/forum.php?mod=viewthread&tid=14202637
(出处: 精易论坛)
APIHook,大家都不陌生吧?
介绍在此~~:API HOOK技术是一种用于改变API执行结果的技术,最初有些人对某些api函数的功能不太满意,就产生了如何修改这些api,使之更好的服务于程序的想法,这样api hook就自然而然的出现了。我们可以通过api hook,改变一个系统api的原有功能。基本的方法就是通过hook“接触”到需要修改的api函数入口点,改变它的地址指向新的自定义的函数。
Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。
既然这是钩子,问题就来了
Hook数据的呢?(以前经常有)
想想,自己辛辛苦苦写的数据,人家OD上钩子就给修改了,你会怎么想?
所以,我便写了一个检测和解除APIHook的程序
效果图:
这是挂钩OpenProcess(OD外部)在没有任何情况之下,一运行就下断
继续运行,按下解除钩子,显示成功
然后随便怎么调用OpenProcess,OD都不会下断了
来说说原理:
其实就是读取进程中API的Thunk偏移,然后装载DLL,模拟进行内存处理得到真实的,判断函数头长度是否不相同就OK
然后解除就简单了,把内存保护属性重写就OK了
|
还原_Hook_普通 | 逻辑型 | | |
目标进程句柄 | 整数型 | | | | 动态链接库名 | 文本型 | | | | API函数 | 文本型 | | | | 检测结果 | 字节集 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 内存属性 | MEMORY_BASIC_INFORMATION | | | 修改内存保护属性 (目标进程句柄, 地址_取API地址 (动态链接库名, API函数 ), 内存属性 ) 如果真 (WriteProcessMemory (目标进程句柄, 地址_取API地址 (动态链接库名, API函数 ), 检测结果, 取字节集长度 (检测结果 ), 0 ) = 0 )返回 (假)还原内存保护属性 (目标进程句柄, 内存属性)返回 (真)
就像这样一样
这个方法不仅仅可以检测自身APIHook,还可以检测远程Hook,还可以检测外部进程的Hook(需要提供外部进程句柄,可以用精易模块的“进程_打开1”)
所以这简直就是居家写程序,防OD必备!!!!注意:内核(R0)级别的Hook是不能防的啊(话说能写R0还Hook数据干嘛)
最后还是那句老话:源码回复下载!!
最后说一句:如果你觉得可以的话,请:
一下(点2下又不会扣分,而且还会加精币哦!!!加精币哦!!!),源码回复下载!!万水千山总是情,给个好评行不行?人间自有真情在,不给好评不是爱!
检测APIHook.zip
(884.84 KB, 下载次数: 1166)
|