PEB,全称Process Environment Block(进程环境块)
TEB,全称Thread Environment Block(线程环境块)
这里必须说明:在研究PEB,TEB结构时,MSDN的参考价值就没有多大了(官网的定义中,基本都是Reserved保留属性,没有什么参考价值),绝大部分资料只能从网络上找来。
下面开始代码编写过程。
x86:ReadProcessMemory(读进程数据),WriteProcessMemory(写进程数据),ZwQueryInformationProcess(查询进程信息),ZwQueryInformationThread(查询线程信息)
x64:ZwWow64ReadVirtualMemory64(读x64进程数据),ZwWow64WriteVirtualMemory64(写x64进程数据),NtWow64QueryInformationProcess64(读x64进程基本信息)
好了,代码基本准备齐了,开始下一步吧!
这部分均以x86的结构作为研究对象,x64的结构只是偏移和长度的不同而已。
首先我们需要看下面的两张图被勾出的部分:
先谈谈TEB:
再谈谈PEB:
现在根据我的了解,利用PEB结构可以读出进程的命令行、进程路径、进程运行目录、进程的DllPath、进程加载的模块。
如果你真的想了解这些进程数据是怎么读出来的,而不是拿着一个自己完全看不懂的代码去使用的话,我建议你应该看下文:
后面部分,我将以读取InLoadOrderModuleList(模块加载的先后顺序)这个双向链表为例子,来解释。