记一次WIN7 64位的内核对象类型分析之获取(二)

一 . 前言
对象类型是以数组的形式存放在内存中,所以获取对象类型首先得定位到存放对象类型数组的表的位置。
二 . WINDBG下查找对象类型数组表
通过在windbg反汇编ObGetObjectType函数得到
在这里插入图片描述
图中ObTypeIndexTable就是存放对象类型的数组表起始地址 fffff80005638100
在这里插入图片描述
对象类型从数组第三个元素开始。

三 . (一)VC获取对象类型的地址(驱动部分)
①先获取ObGetObjectType函数的地址
RtlInitUnicodeString(&funcName, L"ObGetObjectType");
funcAddress = MmGetSystemRoutineAddress(&funcName)
②定位ObTypeIndexTable
注意:在win7 64位中ObTypeIndexTable的地址获取跟32位不一样
在这里插入图片描述
ObTypeIndexTable的地址=fffff80005763f40+ffed41b9+7
(fffff80005763f40:函数这行的起始地址
7:这行指令的字节数48 8d 0d b9 41 ed ff
ffed41b9:为字节指令的最后四个字节(倒序原因是计算机内部大小端排序)

)
得到上述的ObTypeIndexTable的地址在与(&)上0xfffffff0ffffffff才是真正的ObTypeIndexTable(因为做加法运算存在进位的问题)
在这里插入图片描述
在这里插入图片描述
上诉代码获取ObTypeIndexTable的地址并把每个元素都复制给Result数组
接下来分析下驱动中的READ派遣函数因为用户将从此派遣函数中得到Result数组中的值。
在这里插入图片描述
详情请了解驱动与用户层通信的方式(这里才用的是缓存方式的读写)
③创建设备并绑定符号链接(供用户层通信)
在这里插入图片描述
三(二)VC获取对象类型的地址(用户层部分)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值