看了下
sudami那篇文章
,记录+膜拜一下~~
很简单,就是太麻烦,思路还是可以学习下的。之前没想过重定位可以用来找引用=。=|||
一般ObjectTypeHook 关注device driver file process thread job 还有 CmpKey,由于检测这个都是靠特征值匹配的,工作量会很大,其他的先无视了。
device driver process 这类导出的类型比较省心,直接从重定位表里找引用,对应到IopCreateObjectTypes 引用对象的部分进行特征匹配就可以得到OBJECT_TYPE_INITIALIZER里面的有关函数原始地址了。
当然是从自己加载的文件里找,在实际内核映像里的IopCreateObjectTypes在系统初始化之后就没用了....
自己写了检测IoDeviceObjectType的部分,很容易。
对于CmpKeyObjectType 比如可以在ntdeletekey开头处搜到,然后再用找重定位就行了,不至于爆搜吧...(未实践)
update:有点错误,ntdeletekey找不到 offset CmpKeyObjectType,其实枚举重定位信息取值对比是不是CmpKeyObjectType就行了。
很简单,就是太麻烦,思路还是可以学习下的。之前没想过重定位可以用来找引用=。=|||
一般ObjectTypeHook 关注device driver file process thread job 还有 CmpKey,由于检测这个都是靠特征值匹配的,工作量会很大,其他的先无视了。
device driver process 这类导出的类型比较省心,直接从重定位表里找引用,对应到IopCreateObjectTypes 引用对象的部分进行特征匹配就可以得到OBJECT_TYPE_INITIALIZER里面的有关函数原始地址了。
当然是从自己加载的文件里找,在实际内核映像里的IopCreateObjectTypes在系统初始化之后就没用了....
自己写了检测IoDeviceObjectType的部分,很容易。
对于CmpKeyObjectType 比如可以在ntdeletekey开头处搜到,然后再用找重定位就行了,不至于爆搜吧...(未实践)
update:有点错误,ntdeletekey找不到 offset CmpKeyObjectType,其实枚举重定位信息取值对比是不是CmpKeyObjectType就行了。