能力值:
( LV2,RANK:10 )
|
-
-
2 楼
惯例 我的沙发~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
Object只是个结构体,里面存着各种成员变量、例程函数 修改了就叫OBJECT HOOK
PS 楼主你幸运了,几年前我问着没一个人肯回答,现在为你解答了
|
能力值:
( LV9,RANK:610 )
|
-
-
4 楼
楼上还是原来的哇咔咔吗? 其实所有的HOOK都一个鸟样。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
是的 一直用这ID
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
首先感谢兄弟的回答!然后我知道Object Hook这个东西是对内核对象的修改,只是我不明白这个结构对象具体作用是什么?兄弟能为介绍我下哪本书里面有详细介绍这个对象的作用吗?是不是说所有的内核对象构造生成都是靠这个系统初始的结构对象来构造的呢?总是有点是懂非懂感觉啊,求大神来解救
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
Object 简单说就是内核中描述句柄的结构体
只是我不明白这个结构对象具体作用是什么?
hProcess,hThread,hFile,等这些R3用的句柄,到了R0就是Object.
这个对象的作用吗?
这些句柄是干什么用的,Object 就是干什么用的。
是不是说所有的内核对象构造生成都是靠这个系统初始的结构对象来构造的呢?
对,Object 有不少,都有自己的名字。不同的Object 结构内容有差异.
Object Hook,就是 结构体函数指针修改。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
非常感谢兄弟热情的回答
然后兄弟说“Object 简单说就是内核中描述句柄的结构体”,这个有待商榷,内核结构体不只是描述句柄吧!
我知道R3用的句柄是对内核对象的引用,关闭R3用的句柄是内核对象引用计数减一。兄弟的回答是具体到内核中某一个结构体了!Object Hook中的所说Object不是具体某一个内核对象吧,比如不是具体到在进程结构对象中修改吧!
总结一下,Object Hook中的所说Object是所有内核对象构造生成的模版吧,而不是单纯的某一个具体内核对象吧!?希望真正使用过Object Hook,深刻理解的大神给小弟点拨下!或者推荐哪本书看看
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
WRK源码可以解答这些问题
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
WRK源码太多了,寻找解决这个问题费劲,只要知道理论就可以了。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
没有搞过的大神愿意说说?还是不屑这个过时东西了~~
|
能力值:
( LV9,RANK:375 )
|
-
-
12 楼
http://hi.baidu.com/mj0011/item/ee835ee05edf9ab42f140bda
看看这篇能不能帮到你
|
能力值:
( LV5,RANK:70 )
|
-
-
13 楼
简单的打个比喻...
Object 好比是你未来媳妇...Object_TYPE 好比是你家媳妇的丈母娘..
当你想访问你家媳妇的时候,就会先给他们家打电话,而打电话第一个接听的人是就是丈母娘,丈母娘知道哦,你电话来了要越对象谁,,,然后丈母娘允许了,你家媳妇就可以跟你约会去了,
可是 Object hijack 就是你的情敌知道了,他不想你跟你媳妇好,把你丈母娘洗脑了,然后你每次打电话通知约会的时候,丈母娘就以各种理由回绝了,比如你权限不够啊,工资太低啊,没房子啊..当然不管你是提权还是怎么滴,她就是拒绝....
恩....大概就是这么个流程
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
mark,学习之
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
哥们的话通俗易懂,不错!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
和你有同感,不知道OBJECT这个结构对象具体作用是什么?难道每个进程打开或关闭都要调用到?
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
大概就是你这个意思,很多地方都会调用到的。
object hook就是修改这个object结构里的一个函数指针,而这个函数指针在某些API里会被调用,所以hook后就会运行到你指定的函数。
struct OBJECT_HEADER
{
struct OBJECT_TYPE
{
struct OBJECT_TYPE_INITIALIZER
{
// 下面这些函数指针,在某些API里会调用的
OB_DUMP_METHOD DumpProcedure;
OB_OPEN_METHOD OpenProcedure;
OB_CLOSE_METHOD CloseProcedure;
OB_DELETE_METHOD DeleteProcedure;
OB_PARSE_METHOD ParseProcedure;
OB_SECURITY_METHOD SecurityProcedure;
OB_QUERYNAME_METHOD QueryNameProcedure;
OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
}
}
}
常见的hook是直接修改的代码,而object hook就是替换object对象里的函数指针,这个函数指针在某处会被调用运行,达到hook的效果。
看下面这个函数流程
ObOpenObjectByPointer(OpenProcess里就调用了这个函数)-> ObpCreateHandle->ObpIncrementHandleCount-> ObCheckObjectAccess -> ObGetObjectSecurity ()
{
ObjectType->TypeInfo.SecurityProcedure(xxx) //SecurityProcedure就是那个函数指针
}
简化就是ObOpenObjectByPointer函数最后会调用ObGetObjectSecurity函数,而ObGetObjectSecurity函数里会调用object结构里的那个函数指针。
什么精髓,就是程序要运行到一个地方,而这个地方被你修改了。上面流程描述的是object结构里的SecurityProcedure会执行,SecurityProcedure被你修改了,那就是所谓的object hook了。
其他还有那么多xxxProcedure具体在哪里调用,你去wrk里搜索,都可以找到的。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
谢谢你的回答!更进一步了解了。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
差不多半年后来看我这问题,我笑了~有点幼稚,因为之后重读了windows内核原理与实现,这本书有讲解,大家可以去翻翻看!
|
能力值:
( LV3,RANK:20 )
|
-
-
20 楼
hook并非一种技术,而是一种思想,举个榴莲,你们公司的工作流是领导每天把工作安排文件放在办公桌上,由秘书拿来去发给各部门执行工作安排,一天,秘书照常从领导办公桌上拿了工作安排文件坐电梯去送往各部门,而你跟秘书在电梯相遇,你早就对公司的内部流程了如指掌,你手中造就准备了伪造好的工作流程文件,你用乾坤挪移大法把两个文件调了包,结果秘书把你的指令传给了各部门,而你的指令是,放假一天。简单点就是通过拦截和篡改指令,让程序不能按照程序开发者的原本意图执行。
|
|
|