返回

驱动开发:内核枚举驱动内线程(答疑篇)

发布时间:2023-02-15 17:13:33 294
# 研究# 技术# 信息# 工具

这篇文章比较特殊,是一篇穿插答疑文章,由于刚好在前一篇教程`《驱动开发:内核枚举PspCidTable句柄表》`整理了枚举句柄表的知识点,正好这个知识点能解决一个问题,事情是这样的有一个粉丝求助了一个问题,想要枚举处驱动中活动的线程信息,此功能我并没有尝试过当时也只是说了一个大致思路,今天想具体聊一聊这个话题,也想聊一聊自己对粉丝们的想法。

这篇文章比较特殊,是一篇穿插答疑文章,由于刚好在前一篇教程​​《驱动开发:内核枚举PspCidTable句柄表》​​整理了枚举句柄表的知识点,正好这个知识点能解决一个问题,事情是这样的有一个粉丝求助了一个问题,想要枚举出驱动中活动的线程信息,此功能我并没有尝试过当时也只是说了一个大致思路,今天想具体聊一聊这个话题,也想聊一聊自己对粉丝们的想法。

驱动开发:内核枚举驱动内线程(答疑篇)_句柄

首先因为我的人生经历比较特殊,我经历过无法求知的困境,深知一个人在没有任何人指点的情况下去研究技术是多么的折磨人,所以在某些情况下只要你关注了我,我也会尽自己最大可能去帮助大家,即便是当时没有解决这个问题我也会记下来,只要能被解决我一定会第一时间告诉粉丝,但也希望大家不要遇到困难关注我,解决困难取消关注,这样我觉得很不地道。

好了步入正题,这个枚举驱动内的线程我们无法用传统的API去枚举,原因很简单你拿不到进程的​​EPROCESS​​​结构,或者说他这个驱动程序本身就是系统的一部分根本就没有进程ID的概念,由于我一直没有尝试这个需求,所以当时对粉丝说的是通过PEB来拿到,但这个方法其实关键就在于,以我目前的知识储备无法拿到驱动的​​EPROCESS​​结构。

驱动开发:内核枚举驱动内线程(答疑篇)_句柄_02

然后干脆就直接枚举出整个系统所有的进程与线程信息,例如上一篇文章中提到的枚举句柄表,打开ARK工具找到所需查询的线程,会发现他有一个​​ETHREAD​​结构。

驱动开发:内核枚举驱动内线程(答疑篇)_2d_03

我们直接在枚举列表中查询以下看看,你会发现所有句柄表线程中是存在这个​​ETHREAD​​结构。

驱动开发:内核枚举驱动内线程(答疑篇)_驱动程序_04

但是这个是全局的,无法得到它属于哪个驱动模块,这就很尴尬了。

你或许灵机一动,我直接得到​​ETHREAD​​​信息,从里面找​​EPROCESS​​​,再从里面找进程名,但跟到最后你会发现它显示的是​​SYSTEM​​进程,如果继续往下就是内核了,小丑竟是你自己。

这里只能用笨办法,首先线程​​ETHREAD​​​地址是​​0xFFFF9C02B2DCC540​​​抹掉最后三位​​0xFFFF9C02B2DCC000​​。

驱动开发:内核枚举驱动内线程(答疑篇)_2d_03

然后看看驱动列表中的​​0xFFFF9C02B2DCC060​​​同样抹掉最后三位是​​0xFFFF9C02B2DCC000​​,这两个地址相差不大甚至说就是一摸一样。

驱动开发:内核枚举驱动内线程(答疑篇)_Windows 内核驱动开发_06

我不知道别人的ARK工具是怎么实现的,但是我目前能想到的办法只能是这一种笨办法,两者作比较相差在一个误差以内就说明是进程内的子线程。

这样我们首先枚举的是驱动完整信息,然后在和线程作比较,从而判断或者说归档,将某一些子线程归类到某个驱动程序上面,代码我就不写了,再写也是重复的东西,前面的文章中都有代码,自己拼凑一下就可以实现的功能。

文章作者:lyshark​ (王瑞) ​​
版权声明:本博客文章与代码均为学习时整理的笔记,文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

转载文章请遵守​​​《中华人民共和国著作权法》​​​相关法律规定或遵守​​《署名CC BY-ND 4.0国际》​​规范,合理合规携带原创出处转载,如果不携带文章出处,并恶意转载多篇原创文章被本人发现,本人保留起诉权!



特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线