论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
驱动开发:内核枚举驱动内线程(答疑篇) ...
驱动开发:内核枚举驱动内线程(答疑篇)
泉缘泉
金牌会员
|
2022-10-16 20:58:41
|
显示全部楼层
|
阅读模式
楼主
主题
873
|
帖子
873
|
积分
2629
这篇文章比较特殊,是一篇穿插答疑文章,由于刚好在前一篇教程《驱动开发:内核枚举PspCidTable句柄表》整理了枚举句柄表的知识点,正好这个知识点能解决一个问题,事情是这样的有一个粉丝求助了一个问题,想要枚举出驱动中活动的线程信息,此功能我并没有尝试过当时也只是说了一个大致思路,今天想具体聊一聊这个话题,也想聊一聊自己对粉丝们的想法。
首先因为我的人生经历比较特殊,我经历过无法求知的困境,深知一个人在没有任何人指点的情况下去研究技术是多么的折磨人,所以在某些情况下只要你关注了我,我也会尽自己最大可能去帮助大家,即便是当时没有解决这个问题我也会记下来,只要能被解决我一定会第一时间告诉粉丝,但也希望大家不要遇到困难关注我,解决困难取消关注,这样我觉得很不地道。
好了步入正题,这个枚举驱动内的线程我们无法用传统的API去枚举,原因很简单你拿不到进程的EPROCESS结构,或者说他这个驱动程序本身就是系统的一部分根本就没有进程ID的概念,由于我一直没有尝试这个需求,所以当时对粉丝说的是通过PEB来拿到,但这个方法其实关键就在于,以我目前的知识储备无法拿到驱动的EPROCESS结构。
然后干脆就直接枚举出整个系统所有的进程与线程信息,例如上一篇文章中提到的枚举句柄表,打开ARK工具找到所需查询的线程,会发现他有一个ETHREAD结构。
我们直接在枚举列表中查询以下看看,你会发现所有句柄表线程中是存在这个ETHREAD结构。
但是这个是全局的,无法得到它属于哪个驱动模块,这就很尴尬了。
你或许灵机一动,我直接得到ETHREAD信息,从里面找EPROCESS,再从里面找进程名,但跟到最后你会发现它显示的是SYSTEM进程,小丑竟是你自己。
这里只能用笨办法,首先线程ETHREAD地址是0xFFFF9C02B2DCC540抹掉最后三位0xFFFF9C02B2DCC000。
然后看看驱动列表中的0xFFFF9C02B2DCC060同样抹掉最后三位是0xFFFF9C02B2DCC000,这两个地址相差不大甚至说就是一摸一样。
我不知道别人的ARK工具是怎么实现的,但是我目前能想到的办法只能是这一种笨办法,两者作比较相差在一个误差以内就说明是进程内的子线程。
这样我们首先枚举的是驱动完整信息,然后在和线程作比较,从而判断或者说归档,将某一些子线程归类到某个驱动程序上面,代码我就不写了,再写也是重复的东西,前面的文章中都有代码,自己拼凑一下就可以实现的功能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
泉缘泉
金牌会员
这个人很懒什么都没写!
楼主热帖
华为一镜到底主题__荣耀30系列安装教程 ...
日志模块
「Docker入门指北」容器很难理解?带你 ...
数据资产为王,如何解析企业数字化转型 ...
信创环境下分布式文件存储MinIO集群部 ...
28基于java的简单酒店数据管理 ...
Vulnhub之M87靶机详细测试过程(不同提 ...
MYSQL(进阶篇)——一篇文章带你深入 ...
面试题百日百刷-HBase中HTable API有没 ...
Java 8 排序的 10 个姿势,太秀了吧! ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表