360的hook架构源码
本帖最后由 364589886 于 2011-2-25 13:04 编辑这个基本和360的hook架构是一样的(有一点区别,360是用了个二级跳,即jmp到一个地址,然后这个地址同样是个jmp,最后由这个jmp跳转到真正要执行的代码处,达到的效果就是一些ARK工具检测时只能显示为unknow module,不过这个貌似是流氓软件的惯用手段,作为安全软件来说,用不着这样吧。。。。。此处正好说明了360的流氓本质,哈哈)。。。。。要正式使用的话,自己添加ioctl,往ServiceFilterInfoTable里注册自己的过滤函数 不过不得不赞一句。。。。360的这个hook架构确实很不错,易于扩展和控制
比如:需要增加对某函数的hook,则只需要往ServiceFilterInfoTable的相应数组元素里添加一个自己的过滤函数(数组下标和SSDT里相应函数的index一致),要暂停过滤这个函数,只需要把相应数组元素的控制字段设为0,要删除过滤这个函数,则只需要把相应数组元素全部清零就可以了
有个问题:代码里对只读内存的写,采用了改写CR0寄存器的方式,这里需要同步,我采取的是关中断的方式,但cli这个汇编指令只对当前处理器有效(自旋锁也是一样的情况),对于多核情况,如何做到同步,很头痛。。。。若有人有好的办法,烦请留言告知 可以暂时关闭另一个核心么(好像不能)或者多线程并发占用cpu?
好像一本书上讲过不用cr0的方法,不过忘了:lol 你说的是重新弄个可写的内存描述符(MDL)吧。。。。这个与用同步没关系
同样得找办法解决同步问题 乔丹二世以前贴过代码:
http://www.m5home.com/bbs/thread-5071-1-1.html 仔细看了下,觉得这个Hook KiFastCallEntry的构架比我以前写的那个好多了。 这是从360里反出来的么? Tesla.Angela 发表于 2011-2-25 20:17 static/image/common/back.gif
乔丹二世以前贴过代码:
http://www.m5home.com/bbs/thread-5071-1-1.html
这个还是有问题。。。。比如。。。这个代码里,替换的是两条指令,一个sub,一个shr,假设其它代码执行到了sub,然后此时被我们的驱动线程中断,然后后面的内容被替换成我们自己的了。。。等我们替换完,刚才被中断的那个线程继续运行时,必定要蓝了。。 马大哈 发表于 2011-2-26 13:26 static/image/common/back.gif
这是从360里反出来的么?
嗯。。。。多数是逆向出来的
有些是我自己的理解 364589886 发表于 2011-2-26 15:55 static/image/common/back.gif
嗯。。。。多数是逆向出来的
有些是我自己的理解
看起来这个架构很不错啊.
说明360里面还是有牛人的,只是这老板的名声.......{:1_111:} 回复 364589886 的帖子
没这么多意外,我在Intel和AMD的四核机上试过,没事。。。 Tesla.Angela 发表于 2011-2-26 17:19 static/image/common/back.gif
回复 364589886 的帖子
没这么多意外,我在Intel和AMD的四核机上试过,没事。。。
理论上存在这种可能性 回复 364589886 的帖子
我知道,只是机率小,反正我没有遇到过。 回复 Tesla.Angela 的帖子
你有时间的话,完善哈这个驱动,搞个SSDThook的通用组件嘛 嗯,这个确实不错 有用。。回个帖子。。。 mark,收藏,下下来一起学习! 都是牛人,无法学习 谢谢分享了啊 {:soso_e179:} 360其实就是流氓 下载看看 364589886 发表于 2011-2-25 12:57 static/image/common/back.gif
不过不得不赞一句。。。。360的这个hook架构确实很不错,易于扩展和控制
比如:需要增加对某函数的hook,则 ...
不断的发线程,直到其他cpu都自旋 学习。 360的技术还是不错的,这个架构很好 学习之!!! 好好学习下!不流氓的话很难在中国的软件市场上混得一席之地!
页:
[1]