-
-
应用层和内核钩子函数的同步
-
发表于:
2010-11-19 17:33
13954
-
最近研究内核钩子,发现恢复钩子等算是比较简单的,大部分钩子可以对比内存和真实文件的差异找到,不过有的钩子可能被线程之类的东西监视着,也有通用的办法,在钩子地址处下内存访问断点,
WINDBG很快就断在读写这个内存的地方,基本上就是监视线程了,这个时候内存补丁就相当无敌了,改变原程序的逻辑,一切监控就无从说起了....
好像说偏题了 呵呵 标题是应用层和内核钩子函数同步 这个是要实现具体的功能了,上面可以说是破坏钩子的功能,实现大部分时候是比破坏困难些...
当时写这个程序的时候,第一个遇到的问题就是同步,
当时脑袋里面想DeviceIoControl是R3主动去通知R0的函数,那如果为R0的代理函数截获到数据后怎么主动告诉R3呢?
后来知道事件可以解决这个问题,R3去等待一个R0激活的事件,等待完后去调用DeviceIoControl获取信息。
随后的问题就是函数截获的数据放到那里去呢?
首先想到的是全局结构变量,但是函数是随机调用的,多线程先后调用HOOK函数的时候,全局变量很快就会被改变?这里想到2个方案可以解决,一个是全局双向链表,一个是快速互斥体FastMutex,后来经过考虑和讨论后发现后者是比较容易实现的。
下面有个上面思路的图示和应用层和驱动的代码
里面有头文件路径是写死的 如果要用的话需要调整下 还有个加白名单黑名单的功能没实现
想用二分法去做这个库 最近在研究
这个驱动代码是摘自ROOTKITS-Windows内核的安全防护中的HideProcessHookMDL
为在此基础上修改 我感觉利用现成的稳定代码 然后扩充或者修改成自己的需求是快速高效的好办法,其实C++的继承和多态也有这样的思想在里面 呵呵
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!