当前位置: 技术问答>linux和unix
内核模块DUMP问题
来源: 互联网 发布时间:2016-04-06
本文导语: 引用一个朋友的原话: 我一直想模仿IceSword编个查内核模块钩子的程序,今天终于把最重要且最基础的一步实现了 ——DUMP内核模块的内存到Ring3级,我保存成了个文件,然后和原始的内核文件 用Ultra比较了...
引用一个朋友的原话:
不知各位有什么好的方法??还望各位不吝赐教
我一直想模仿IceSword编个查内核模块钩子的程序,今天终于把最重要且最基础的一步实现了
——DUMP内核模块的内存到Ring3级,我保存成了个文件,然后和原始的内核文件
用Ultra比较了一下,结果很令我意外,有很多不一样,除了钩子以外
我原以为是没DUMP对,用IceSword内存读取抽了几处发现都是和我DUMP的一样,说明方法没错!想了下
发现是早该想到却没意识到的问题——静态加载和动态加载的不同,也就是说,除了第三方钩子
还有很多内核程序运行时就填入的动态参数,这个就让我寻找钩子很困难,我想了几种思路,但都很悬:
1、我从网上找了个反汇编开源代码,可以运行,现在正在尝试整合,但是有个问题:这样可以查JMP的钩子,
从它是否跳出内核模块范围外(这个用R3编还是R0编就是问题),然后我知道SSDT属于重定位段,可以特殊
处理查找。但是我曾经见过瑞星2007有个很特别的钩子(就HOOK两个字节你就杀不死它),不属于
SSDT和360的KiFastCall钩子,虽然冰刀可以找出,我如果只盯JMP是不可能的发现的
2、IceSword并不属于内核模块逐字节比对,我甚至发现他自己有个NtTerminateThread内联钩子,明明
有7处与原始内核文件不一样,他却报告说此处只有5个不一样(JMP XXXXXXXX),而且RkU也这么说,
这说明ARK软件查钩子决不是仅仅内置个反汇编和一些特征函数入口这么简单。
能成功DUMP只是开始,就象有把钥匙可以开所有门但你却不一定找得到东西,Windows游戏规则很复杂啊!
我不想就此放弃,请大家支招,应该如何“继续”?提点建议思路也行
不知各位有什么好的方法??还望各位不吝赐教
|
LZ所引用的好像是在Windows上实现的吧?