首页
论坛
课程
招聘
[原创][原创]逆向IoRegisterPlugPlayNotification获取即插即用回调地址,配图加注释超级详细
2022-9-18 14:32 3833

[原创][原创]逆向IoRegisterPlugPlayNotification获取即插即用回调地址,配图加注释超级详细

2022-9-18 14:32
3833

今天跟各位分享一下如何获取遍历获取即插即用函数链表。

在写anti rootkit时,想要遍历一下即插即用回调函数。经过搜索发现,我们找到目标函数然后逆向分析一下,找到我们需要的链表。跟之前的回调不同 这个函数在注册时,分注册类型注册。
话不多说。我们进入正题。
首先我们打开IDA,找到IoRegisterPlugPlayNotification函数。F5反汇编

 

图片描述

 

首先将注册回调的驱动引用计数+1,防止对象被删除。
此时v12将不会成立。我们直接跳到下面查看逻辑

 

图片描述

 

首先我们进入到PnpInitializeNotifyEntry函数中查看,此函数初始化了我们的回调对象结构。将回调属性填入我们申请的内存中。

 

图片描述

 

图中对结构进行填充,初始化
然后进入PnpDeferNotification函数中我们查看。发现在此函数 又申请一个结构,将之前的结构填充。并挂到链表。但是使用windbg实际查看这个链表时,发现这个链表为空。说明此处挂上之后,运行完就会删除。具体原因还需分析。在函数挂入时。回调的执行流程。

 

图片描述

 

所以这里对我们而言是没有用的。
但是我们看到外面PnpDeferNotification函数执行后,又再次挂到一处链表。
我们使用windbg查看。发现正确 very good。
使用windbg dq PnpDeviceClassNotifyList
即可看到一大堆 LIST_ENTRY链表结构

 

图片描述

 

此处为链表数组,此数组共13个成员遍历每个成员即可获取到所有的回调函数。
索引下标0 指向自己说明没有存储东西。
下标2我们发现 他并没有指向自己。所以有存回调。遍历时注意判断即可!
我们dq fffff8a0`000816f0查看一下此结构
图片描述

 

首先是我们的链表。然后+0x20是我们的回调地址

 

图片描述

 

可以使用PC hunter看一下。确实正确。这时我们也可以放心遍历。加入到自己的工具中啦。又是美好的一天,祝各位每天都是开心的一天。代码使你快乐


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 10509
活跃值: 活跃值 (6174)
能力值: ( LV13,RANK:375 )
在线值:
发帖
回帖
粉丝
TkBinary 活跃值 5 2022-9-22 09:43
2
0
感谢分享逆向知识. 写出的Ark能白嫖一波不
雪    币: 1523
活跃值: 活跃值 (1422)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengyunabc 活跃值 1 2022-9-22 17:52
3
0
感谢分享!
游客
登录 | 注册 方可回帖
返回