首页
社区
课程
招聘
内核编程如何使用未导出的数据结构
发表于: 2013-5-9 23:30 4432

内核编程如何使用未导出的数据结构

2013-5-9 23:30
4432
最近练习内核编程,想做一个线程相关的驱动。发现 PKTHREAD 这个结构体未导出,在网上查到的定义都是嵌套定义的,难道都要复制下来吗? 有没有什么别的方法呀

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 70
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
wrk不是有吗,拿来直接用呗
2013-5-9 23:38
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
3
1.解析微软公共调试符号服务上的.pdb,得到。
2.很多未导出的结构随Windows NT内核版本变化而变化,甚至Vista和Win7上都会有差异,
想要直接使用完整的结构体比较麻烦,通常的情况下是事先记录下不同版本的系统中要使用的几个成员的偏移,然后用指针+偏移访问要用到的几个成员。
3.很多结构体未导出,但它么的指针在wdm.h之类的头文件中有定义。
4.WRK中的结构体可以作为参考,但只适用于Windows NT 5.2,XP的都有差异。
5.或许哪天微软推出WRK2了能得到NT 6下的情况
2013-5-10 00:02
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
噢 就是说我要引用某个成员变量的话要用硬编码来实现?
再麻烦问下您,2楼帖子用说的,wrk中的头文件怎么引用呀,我直接引用后build出错了。
是不是要用wrk下的工具编译呀
谢谢您
2013-5-10 00:12
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
是的这种方法比较常用,但是得密切注意不同版本系统之间的差异,最好加上一些校验措施。

WRK是Windows Reaserch Kernel的源码啦,直接引用头文件当然步行很多地方会和WDK/DDK的头文件重复。如果您要自己用WRK写个内核例外~
2L应该是建议参考WRK中的代码……
2013-5-10 00:46
0
雪    币: 220
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我要学习,来看看的
2013-5-10 00:49
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
7
再给出个例子,获取KPROCESS.ThreadListHead
PKPROCESS PTragetProcess;//PKPROCESS 指针
ULONG KPDelta_ThreadListHead;//ThreadListHead成员的偏移
LIST_ENTRY ThreadList = *(PLIST_ENTRY)((PUCHAR)PTragetProcess + KPDelta_ThreadListHead);

注意其中指针得当心使用……最好对关键部分进行汇编代码检查,编译器经常编译出一些诡异的结果导致BSOD
2013-5-10 00:54
0
游客
登录 | 注册 方可回帖
返回
//