|
- 我一直想模仿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游戏规则很复杂啊!
- 我不想就此放弃,请大家支招,应该如何“继续”?提点建议思路也行
复制代码
这是一个朋友的原话,不知各位高手有什么好的思路,还望各位不吝赐教
|
|