首页
社区
课程
招聘
[求助]重载内核后对Object Hook的处理
发表于: 2013-8-23 00:50 6417

[求助]重载内核后对Object Hook的处理

2013-8-23 00:50
6417
重载内核对于SSDT hook和一般的inline hook很有效,但似乎无法解决Object hook(或者说Object Type hook).
WRK中几个调用Object Type中的Procedure的函数都是通过宏OBJECT_TO_OBJECT_HEADER去取得POBJECT_TYPE,那么最终取到的POBJECT_TYPE = POBJECT_BODY - 0x18,也就是在老内核里,那么从中取得的Procedure的指针也是原来到,最后还是会被HOOK。

翻了下各种源码,似乎没有找到特别的处理,莫非只能硬编码后hook新内核中的ObpCreateHandle等函数处理了?处理似乎比较复杂,那么多的Procedure中很多都可能为NULL也可能不为NULL(对象类型不同就不同),非NULL的话还的检查一下合法性,而且不太清楚是不是有的合法的驱动程序会新建一个TYPE,这样处理策略会比较灵活。

求教一下各位的解决方法,莫非只对process和Thread进行处理?还是干脆hook那些导出的对象头函数

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
旧内核不用管它,只要在新内核里面修改一下关键判断,就无视object  hook了
2013-8-23 08:33
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
3
额,似乎比较麻烦的样子。。或许只需要处理几个关键的类型么
2013-8-23 11:18
0
雪    币: 46
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
消化不了 没有基础
2013-8-23 18:02
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
关于object hook:
http://bbs.pediy.com/showthread.php?t=176443
关键就是改变几个OBJECT_METHOD的地址,使得系统在进行相关操作的时候调用它们。
这些OBJECT_METHOD在OBJECT_TYPE_INITIALIZER 结构体里面,而OBJECT_TYPE中有一个成员就是OBJECT_TYPE_INITIALIZER结构体,目前常见的办法是修改OBJECT_HEADER里面的POBJECT_TYPE指针,指向一个自己准备好的OBJECT_TYPE中结构体
2013-8-23 19:58
0
雪    币: 46
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢楼主盛情款待
2013-8-23 20:49
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你也可以想办法让他不调用hook的函数, wrk里指明了调用的路线
ObOpenObjectByPointer(name)-> ObpCreateHandle->ObpIncrementHandleCount-> ObCheckObjectAccess -> ObGetObjectSecurity ()
{
  ObjectType->TypeInfo.SecurityProcedure(xxx) //能否在新内核里修改这个地方,调用原始的method。
}
2013-8-24 14:42
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
8
这个方法俺想过,但是对于ParsePrudure似乎不能这样处理,如果考虑到存在第三方对象的话。
目前在尝试hook调用的地方,判断一下调对象类型,如果是Process或者Thread之类的就去调用重载的,不过似乎很累很麻烦。。。。
2013-8-24 20:43
0
游客
登录 | 注册 方可回帖
返回
//