这门课的名字听起来很底层,实际要解决的问题也很具体:在64位Windows上,把一段内存改成"可读可执行、但看起来不可执行"的状态,让基于页表属性做扫描的反作弊模块查不出异常。它面向的是对游戏安全、驱动对抗感兴趣的开发者,不是给零基础准备的操作系统原理课。如果你只是想搞懂虚拟内存是怎么回事,市面上有更平缓的材料;如果你已经写过驱动、调过内核,并且卡在"怎么绕过PG和扫描"这一步,这门的针对性就出来了。
它解决的是哪个环节的问题
页表拆分这个概念在日常开发里几乎用不到,它出现的场景非常窄:反作弊会遍历页表,检查哪些页同时具备可写和可执行属性,或者检查本该是数据的页有没有被挂上执行位。课程要处理的就是这个检查点——通过分别控制PTE和PDE里的no_execute位,让同一块物理内存在不同层级的描述下呈现出不一致的属性,扫描工具按常规走一套判断逻辑时会得出"这块内存没问题"的结论。
换句话说,它不教你怎么写外挂,教的是页表这一层的属性控制手法。学完之后你能独立完成的动作包括:定位到目标线性地址对应的各级页表项,判断当前用的是大页、中页还是小页,再按需修改执行位并处理由此带来的缓存和TLB一致性问题。这些动作在驱动环境中执行,需要你对IRQL和内存管理有基本概念。
讲清了哪些结构,没讲哪些
课程把PML4T、PDPT、PDT、PT这四级结构逐层拆开讲,重点放在每级表项的位域含义,尤其是和权限、执行、大小页相关的位。大页和中页的设置方式单独拿出来讲,因为不同页粒度下,你能改的位、改完之后影响的地址范围都不一样,混淆了就会改错地方。
需要提前说清楚的是:这门课不教Windows内核编程基础,不教怎么编译和加载驱动,也不覆盖内核调试环境的搭建。它默认你已经能写出一个能跑起来的驱动,能看懂WDK里内存相关的API。如果这些还不熟,直接看页表部分会有点吃力,建议先把驱动开发的最小闭环走通再来。
资料适合什么基础的人用
- 写过至少一个可加载的内核驱动,理解驱动入口和基本的内存分配。
- 知道CR3、线性地址到物理地址的转换大致流程,哪怕只是概念层面。
- 用过WinDbg看内核结构,能手动下断点和查看内存。
- 对游戏反作弊的扫描方式有实际接触或明确好奇,而不是泛泛地想"学安全"。
如果你符合前三条,这门课能帮你把页表这块补齐;如果只符合最后一条,建议先补驱动基础,否则跟着做实验时会卡在环境上,而不是卡在原理上。
怎么用这份资料更划算
建议按"先看结构、再动手改、最后对照检测逻辑"的顺序走。结构部分不要跳,四级页表的索引关系必须自己能在纸上画出来,否则后面改PTE时不知道自己在改哪一段地址。动手环节尽量在虚拟机里做,页表操作一旦出错就是蓝屏,实机调试成本太高。改完之后别急着庆祝,回头想一想:如果反作弊换一种检查顺序,你这个改法还成不成立。课程给的是一种思路,不是一个永远有效的补丁,Windows版本更新和检测逻辑演进都可能让它失效,这个前提要自己心里有数。
参考资料方面,课程关联了《x86x64体系探索及编程》,这本书在页表部分讲得比大多数中文材料细,适合当工具书翻,不适合从头读到尾。遇到课里某级表项位域没讲透的地方,去书里对应章节查一下,比反复看视频效率高。
整体判断:这是一门窄而深的课,不适合当体系课的第一门,但如果你正好卡在页表属性这个具体问题上,它能省下你翻手册和试错的时间。买之前先确认自己的驱动基础到位,否则它解决不了你的问题。
课程目录
课程目录8 集
- 01 01.X64分页.mp4
- 02 02.X64页表拆分.mp4
- 03 03.MmIsAddressValid函数算法一.mp4
- 04 04.MmIsAddressValid函数法二.mp4
- 05 05.代码实现拆分.mp4
- 06 06.PTE,PDE设置执行属性.mp4
- 07 07.申请内存.mp4
- 08 08.释放内存.mp4






