[求助]求大神指教怎么理解object Hook精髓!
大概就是你这个意思,很多地方都会调用到的。
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里搜索,都可以找到的。