关于Inline hook check的一些想法与问题
来源:互联网 发布:50知天命是什么意思 编辑:程序博客网 时间:2024/05/29 04:22
这东西弄了近一周才有点眉目,网络上的资料不是很多。爆搜百度google好久还是发现有一点点资料的:
1.rootkits那本书讲了一点,不过那个太挫了,检测了跟没检测一样。就是搜e9 e8判断跳转模块。
2.sysnap的blog里有一点~~最初给我了不少feel,感谢之~~
在我完成了大部分之后发现了 3.sudami的毕设~~~ 里面那个流程图实在很清楚,弥补了不少我没想到的问题~~感谢之~~
后来逆了几个ark,各种ark处理方式不太一样,最悲剧的是很多ark都是把code传到 r3去处理,实在懒得逆向exe(od各种下断至今没玩爽...anti dbg也很烂)
本来想看看国外的网页有没有讨论的或者src,惊艳的很少,于是发现我E文也很挫,构造的关键词不怎么样。
总的来说我就是个“挫”字.....
不过经过一周的愣神和坚持不懈还是弄出点东西来,废话结束 开始记录
1.现代ark的方法想找到模块地址是不现实的~随便加点花指令就看不出来了,检测功能的主要精力应该放在对比磁盘和内存中代码不同。至于模块的检查,检查简单的 jmp call push ret之类的就好,当然有时间可以加点n段跳的检查。。当然遇见个变态来个十段跳。。太xx了
2.内核文件的对照,可以自己NtReadFile写入NonePagedPool,还见过网上某大牛写的Ring 0 PELoader,把大牛名字忘记了,真是抱歉。或者直接MmLoadSystemImage,极其方便....当然要记得重定位,PAGE段重定位的时候记得MmLockPagableCodeSection,不然会蓝死....
3.函数什么时候结束?这个很难弄 有ret未必是函数尾,0xcc大多是情况下可以表示函数结束,但也不是绝对,只好扫面函数头起一段足够的长度,遇到反汇编引擎失败的情况返回
4.检测出Inline也未必是恶意代码,不能随便恢复,微软自己有时也给自己打补丁,比如KeFindConfigurationEntry,系统跑起来之后会把开头变成call。INIT section部分会面目全非,所以我只检测.text和PAGE....
5.从EAT和SDDT的函数出发进行递归可以检测未导出函数,但是要避免重复,sudami的论文里写是用HashTable来存放....想半天也没想出怎么构造合理的哈希函数,处理冲突有很复杂。没在内核用过AVL,现在只是简单的用线性表存储,感觉效率不是很差,这块的算法有待改进
就这么多。。刚刚测试了一下我的code,感觉效果还可以。。xuetr的Inline check似乎会有重复检测到SSDT hook的问题...这跟他的检测方法有关...我逆向太挫...没看出个所以然来...
1.rootkits那本书讲了一点,不过那个太挫了,检测了跟没检测一样。就是搜e9 e8判断跳转模块。
2.sysnap的blog里有一点~~最初给我了不少feel,感谢之~~
在我完成了大部分之后发现了 3.sudami的毕设~~~ 里面那个流程图实在很清楚,弥补了不少我没想到的问题~~感谢之~~
后来逆了几个ark,各种ark处理方式不太一样,最悲剧的是很多ark都是把code传到 r3去处理,实在懒得逆向exe(od各种下断至今没玩爽...anti dbg也很烂)
本来想看看国外的网页有没有讨论的或者src,惊艳的很少,于是发现我E文也很挫,构造的关键词不怎么样。
总的来说我就是个“挫”字.....
不过经过一周的愣神和坚持不懈还是弄出点东西来,废话结束 开始记录
1.现代ark的方法想找到模块地址是不现实的~随便加点花指令就看不出来了,检测功能的主要精力应该放在对比磁盘和内存中代码不同。至于模块的检查,检查简单的 jmp call push ret之类的就好,当然有时间可以加点n段跳的检查。。当然遇见个变态来个十段跳。。太xx了
2.内核文件的对照,可以自己NtReadFile写入NonePagedPool,还见过网上某大牛写的Ring 0 PELoader,把大牛名字忘记了,真是抱歉。或者直接MmLoadSystemImage,极其方便....当然要记得重定位,PAGE段重定位的时候记得MmLockPagableCodeSection,不然会蓝死....
3.函数什么时候结束?这个很难弄 有ret未必是函数尾,0xcc大多是情况下可以表示函数结束,但也不是绝对,只好扫面函数头起一段足够的长度,遇到反汇编引擎失败的情况返回
4.检测出Inline也未必是恶意代码,不能随便恢复,微软自己有时也给自己打补丁,比如KeFindConfigurationEntry,系统跑起来之后会把开头变成call。INIT section部分会面目全非,所以我只检测.text和PAGE....
5.从EAT和SDDT的函数出发进行递归可以检测未导出函数,但是要避免重复,sudami的论文里写是用HashTable来存放....想半天也没想出怎么构造合理的哈希函数,处理冲突有很复杂。没在内核用过AVL,现在只是简单的用线性表存储,感觉效率不是很差,这块的算法有待改进
就这么多。。刚刚测试了一下我的code,感觉效果还可以。。xuetr的Inline check似乎会有重复检测到SSDT hook的问题...这跟他的检测方法有关...我逆向太挫...没看出个所以然来...
- 关于Inline hook check的一些想法与问题
- 关于与客户交流的一些想法
- 关于看雪上那份inline hook代码的小问题
- 关于OOM问题的一些想法和实施效果
- 关于一些编程的想法
- 关于会议的一些想法
- 关于算法的一些想法
- 关于算法的一些想法
- 关于算法的一些想法
- 关于对象的一些想法~~~
- 关于算法的一些想法
- 关于算法的一些想法
- 关于算法的一些想法
- 关于算法的一些想法
- 关于网站的一些想法
- 关于Eclipse的一些想法
- 关于阅读的一些想法
- 关于Ajax的一些想法
- 工作积累之malloc与new的区别
- SQL Server中,分析SQL语句执行效率
- 终端设备驱动之tty_read函数
- 常见的视频接口介绍,VGA,YPbPr,DVI,HDMI,DisplayPort
- hibernate annotation 复合主键写法
- 关于Inline hook check的一些想法与问题
- oracle中的Schema
- aes padding method
- android 源码——packages/apps/Music学习一
- iOS 视图控制器(UIViewController)剖析
- All Git Object Types: Blob, Tree, Commit And Tag
- 让你的C程序更有效率的10种方法
- CPen类
- Android手机: 软件静默安装