探索 PEB 与 TEB:用 MemorySharp 读取进程环境块与线程环境块的进阶指南 探索 PEB 与 TEB用 MemorySharp 读取进程环境块与线程环境块的进阶指南【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharp在 Windows 内存编辑与逆向工程领域PEBProcess Environment Block进程环境块和TEBThread Environment Block线程环境块是两颗绕不开的核心明珠。无论你是想检测目标程序是否被调试、读取进程启动参数还是想深入线程栈与 TLS线程本地存储都离不开对这两个结构体的读写。而MemorySharp这款基于 C# 的 Windows 内存编辑库恰好把最底层的 Win32 API 封装成了几行优雅的代码让新手也能快速上手进程环境块读取。本文将带你一步步理解 PEB 与 TEB 是什么、为什么重要以及如何用 MemorySharp 轻松读取它们。什么是 PEB 进程环境块为什么要学它简单来说PEB 是操作系统为每个进程维护的一块用户态数据结构它记录了进程运行所需的全部户口信息模块加载列表、堆地址、系统版本号、处理器数量、命令行参数甚至是否正在被调试这个敏感标志。这正是反调试、游戏外挂检测、进程信息侦察等技术的源头。在 MemorySharp 中PEB 被封装成ManagedPeb类继承自RemotePointer这意味着你可以像操作普通内存地址一样直接读写它的每一个字段。MemorySharp 如何定位 PEB 地址库内部通过NtQueryInformationProcess系统调用获取进程的PebBaseAddress核心逻辑在 ManagedPeb.cs 的FindPeb静态方法中。更贴心的是当你创建MemorySharp实例时PEB 会自动初始化完毕var sharp new MemorySharp(Process.GetCurrentProcess()); // 此刻 sharp.Peb 已经指向目标进程的 PEBPeb属性定义在 MemorySharp.cs构造函数中一行 Peb new ManagedPeb(...) 就完成了全部底层工作。用 MemorySharp 读取 PEB 的 5 个高频实战字段PEB 结构体在 Enumerations.cs 的PebStructure枚举中定义了所有偏移量ManagedPeb则把它们封装成了强类型属性。下面挑选 5 个最实用的属性含义典型用途BeingDebugged是否被调试反调试检测、调试器识别ProcessParameters进程参数块指针读取命令行与启动路径Ldr加载器数据指针遍历已加载模块ProcessHeap默认堆地址堆操作与内存分析OsBuildNumber系统构建号系统版本识别一条命令检测进程是否被调试 ️BeingDebugged是 PEB 中最著名的字段之一。很多程序会用它做反调试保护而 MemorySharp 甚至直接把它提升到了MemorySharp类的顶层属性var sharp new MemorySharp(processId); Console.WriteLine(该进程是否被调试 sharp.IsDebugged); // 等价写法sharp.Peb.BeingDebugged这段代码的等价实现见 MemorySharp.cs一行属性就把 PEB 读取和反调试检测全搞定了。快速获取进程的系统版本信息想知道目标进程跑在哪个 Windows 版本上PEB 里现成的字段直接读var peb sharp.Peb; Console.WriteLine($主版本: {peb.OsMajorVersion}); Console.WriteLine($次版本: {peb.OsMinorVersion}); Console.WriteLine($构建号: {peb.OsBuildNumber});这些信息由 ManagedPeb.cs 中的属性包装背后就是一次ReadProcessMemory。TEB 线程环境块每个线程的专属档案 如果说 PEB 是进程的户口本那TEB 就是每个线程的身份证。Windows 中每个线程都拥有独立的 TEB记录了线程栈顶/栈底地址、当前 SEH 异常处理链、线程 ID、进程 ID以及 TLS线程本地存储槽位。在 MemorySharp 中每个RemoteThread对象都自带Teb属性见 RemoteThread.cs构造时自动通过NtQueryInformationThread定位 TEB 地址var mainThread sharp.Threads.MainThread; var teb mainThread.Teb; Console.WriteLine($线程ID: {teb.ThreadId}); Console.WriteLine($进程ID: {teb.ProcessId}); Console.WriteLine($栈顶地址: 0x{teb.TopOfStack.ToInt64():X}); Console.WriteLine($栈底地址: 0x{teb.BottomOfStack.ToInt64():X});线程栈与 SEHTEB 里的安全情报TopOfStack和BottomOfStack标定了线程栈的边界在栈回溯、栈溢出分析中非常关键CurrentSehFrame指向当前异常处理链是分析异常处理流程的入口。这些字段全部定义在 ManagedTeb.cs底层偏移见 Enumerations.cs 的TebStructure枚举。实战跨线程复制 TLS 数据 TLS 是线程私有的全局变量区域游戏修改器常用它跨线程搬运数据。官方测试里就有一个经典范例RemoteThreadTests.csvar values new IntPtr[] { new IntPtr(123), new IntPtr(456) }; t2.Teb.TlsSlots values; // 先写入线程2的TLS槽 t1.Teb.TlsSlots t2.Teb.TlsSlots; // 再复制到线程1 Console.WriteLine(t1.Teb.TlsSlots[0]); // 输出 123TlsSlots属性在 ManagedTeb.cs 中一次读取 64 个槽位读写都相当高效。进阶PEB 与 TEB 的寻址关系图理解二者的关系是进阶的关键TEB 内部保存了指向 PEB 的指针Teb.Peb偏移 0x30也就是说从任意线程的 TEB 都能找到进程的 PEB而 PEB 反向通过ProcessParameters又能定位到启动命令行等更多细节。// 从 TEB 一路追到 PEB再读系统版本 var pebFromTeb sharp.Threads.MainThread.Teb.Peb; var sharpAgain new MemorySharp(processId); Console.WriteLine(pebFromTeb sharpAgain.Peb ? 同一份PEB : 地址不同);在 32 位系统上TEB 固定由FS段寄存器指向x64 为GSMemorySharp 的 RemoteThread.cs 提供了GetRealSegmentAddress方法可以直接算出 FS/GS 段的线性基址是手动解析 TEB 的高级玩法。新手避坑指南3 个常见误区 ⚠️不要混淆 PEB 与 TEBPEB 是进程级每进程一个TEB 是线程级每线程一个。多线程进程里每个线程都有独立的 TEB但共享同一个 PEB。注意位数匹配MemorySharp 目前主要支持 32 位开发PEB/TEB 的字段偏移在 x86 与 x64 下并不相同直接套用会读错数据。读写权限问题读取前请确保进程句柄拥有ProcessAccessFlags.AllAccess权限MemorySharp 构造函数默认已处理否则Read会失败。总结一条捷径通往 Windows 底层世界 PEB 与 TEB 是 Windows 内存编辑的万能钥匙而 MemorySharp 把这把钥匙打磨得相当顺手。从 MemorySharp.cs 的顶层封装到 ManagedPeb.cs 与 ManagedTeb.cs 的字段映射再到 Enumerations.cs 的偏移定义你几乎不需要手写任何 Win32 API。想深入源码通过git clone https://gitcode.com/gh_mirrors/me/MemorySharp拉取仓库后对照测试目录 RemoteThreadTests.cs 边读边练很快就能把进程环境块与线程环境块玩得明明白白。【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考