windbg练习,连带发现win7的对象管理ObjectHeader有改变

来源:互联网 发布:适合程序员的显示器 编辑:程序博客网 时间:2024/05/29 15:02

        近日无聊,打开在vmware下搞了个win7 sp1捣鼓一番。按照习惯先查看pspcidtable,发现NextHandleNeedingPool是0x1000,也就是说已经有1级表了。由于这个win7是纯净版的,新装状态下就已经有这么多的cid了,在干净xp和2003上,几乎都是只有0级表的,故顿时感觉win7真是耗不少的资源。


       随便找个进程看看,用!process确定了explorer.exe的EPROCESS地址,从pspcidtable依次查找过去,老的查表方法依然成功,没有发现多大的变化。继续探索,想找到OBJECT_TYPE_INITIALIZER看看一些OpenProcedure,CloseProcedure之类的过程有没有什么不同。把得到的EPROCESS地址8718b4c8减去0x18,即8718b4b0,直接以dt _object_header 8718b4b0观察之,居然发现,ObjectType的指针居然没有了!!尴尬只发现了一个TypeIndex的域,值为7。大概猜测到应该是查找对象类型的方法变了。


       为了偷懒,直接搜索了一下关于TypeIndex的资料,从大牛炉子的文章中得知win7有了一个ObTypeIndexTable的东西,保存了一个ObjectType指针数组。并且该数组从索引2开始有效(索引0是全0,索引1是bad0b0b0,用bad开头真是有意思),索引2就是Type对象本身了。那就直接在里面找索引7吧,熟悉的ObjectType终于看到了,顺利找到了OBJECT_TYPE_INITIALIZER,发现了:


+0x034 OpenProcedure    : 0x83e57d47     long  nt!PspProcessOpen+0
+0x038 CloseProcedure   : 0x83eb7dee     void  nt!PspProcessClose+0
+0x03c DeleteProcedure  : 0x83eba6b5     void  nt!PspProcessDelete+0


跟wrk不一样的是,多了PspProcessOpen和PspProcessClose,其它的Procedure保持一致,改天再跟跟 nt!PspProcessOpen和nt!PspProcessClose看是怎么回事。

原创粉丝点击