如果你写过用户态代码,大概会有一种错觉:进程就是个结构体,线程就是一段执行流,CreateProcess 一调,任务管理器里就多一行。真到了内核里,这套认知很快会撞墙——为什么线程能被打断又被恢复?为什么有的进程你拿任务管理器杀不掉?为什么驱动能把执行流"挪"到另一个进程的地址空间里去?这门课处理的就是这类问题。
先确认你缺的是哪一块
这门课难度不低,但它卡人的地方通常不在概念,而在前置知识的断层。对照下面几条自查,比看课程简介有用:
- 能看懂 EPROCESS、ETHREAD、KTHREAD 这几个结构之间的大致层级关系,但说不清 KTHREAD 里的内核栈和切换上下文是怎么对应的。
- 用过 WinDbg 的
!process、!thread,但看到一串链表地址和状态位就不知道从哪往下查。 - 写过滤驱动或者做安全对抗时,知道有"进程挂靠"这个词,但没亲手调过
KeStackAttachProcess,也不清楚挂靠期间哪些操作是安全的、哪些会踩坑。 - 对线程切换只有"操作系统负责调度"这种笼统印象,具体到上下文保存、KPCR、IRQL 这些层面就断了。
上面中了两条以上,说明你缺的不是"再看一遍原理图",而是从结构体到实际行为之间的那段推理链条。
三个技术点在练什么能力
线程切换是这门课的地基。它考的是你对"执行流被动暂停"这件事的理解深度:切走的时候哪些寄存器进栈、内核栈怎么和当前线程绑定、调度发生在什么时机。这块理不顺,后面两个技术点只能靠背 API。
强杀进程练的是对进程生命周期的掌控。用户态杀不掉的情况,往往是因为句柄、保护机制、或者进程本身处于某种特殊状态。要绕过这些,你得先知道正常退出的路径经过哪些环节,才能找到从内核层直接终止的切入点。
进程挂靠则是典型的"换地址空间"操作。它把当前线程临时挂到目标进程的地址空间上,让后续的内存访问落在对方上下文里。这个动作在游戏安全场景里出现频率很高,但它同时伴随 IRQL、附加计数、异常处理等一串约束,写错就是蓝屏。课程用游戏做演示只是为了让现象可见,真正要练的是这套上下文切换的安全性判断。
看完应该能回答的问题
判断自己有没有真的学进去,不看笔记全不全,看能不能把下面几个问题讲清楚:
- 一个线程被切换出去再切回来,凭什么能接着上次的指令继续跑?恢复的现场具体存在哪。
- 同样是结束一个进程,用户态调用和内核态直接动手,差别在哪一步,为什么后者能处理前者处理不了的情况。
- 进程挂靠期间如果发生了缺页或者异常,会走谁的异常处理流程?为什么这里要特别小心。
- 拿到一个 EPROCESS 地址,除了用
!process,还能顺着哪些字段摸到它的线程链表和地址空间。
这几个问题在调试器里都有对应的验证手段,不要只停在"读懂了"的层面。建议对着虚拟机里的目标反复断点、单步、改内存,看状态位怎么变。内核代码没有沙箱保护,一次误操作就重启,这反而是最好的反馈机制——每次蓝屏都在告诉你哪一步的假设错了。
几点提醒
课程不提供资料下载,也不涉及游戏数据分析,演示用的程序只是为了让效果可见。也就是说,你没法靠跟着敲一遍就完事,得自己在环境里搭出对应的调试场景。对游戏安全和逆向感兴趣的人,这门课补的是底层那一段,它不会直接教你过检测或者写外挂,但缺了这段,后面很多操作你只能照抄别人的代码,出了问题完全没法排查。
如果当前连内核调试环境都还没配起来,建议先把双机调试和符号配置跑通再来,否则每一节都会卡在"看不到现象"上。
Windows内核-进程线程
课程详情
课程标题
Windows内核-进程线程
适合人群
- 对游戏安全感兴趣的人群
- 对游戏逆向感兴趣的人群
学习收获
- 对Windows内核进程和线程的深入理解
- 掌握线程切换、强杀进程、进程挂靠等技术
课程简介
本课程将讲解Windows内核进程和线程,帮助您了解其运行原理。课程内容包括线程切换、强杀进程、进程挂靠等技术,适合对游戏安全和逆向感兴趣的学习者。
【注意】本课程不提供任何资料下载,且不涉及游戏数据分析。课程中使用的程序或游戏仅用于演示效果,如构成侵权,请及时联系删除对应视频。
课程目录
01 01.进程结构体.mp4 02 02.线程结构体.mp4 03 03.KPCR与等待链表 调度链表.mp4 04 04.线程切换(主动切换).mp4 05 05.线程切换(被动切换).mp4 06 06.SwapContext函数分析.mp4 07 07.线程切换的优先级.mp4 08 08.进程挂靠.mp4 09 09.小练习 进程隐藏.mp4 10 10.小练习 保护进程(CE OD无法访问,任务栏关不掉).mp4 11 11.小练习 强杀进程.mp4 12 12.小练习 进程挂靠读游戏内存(DXF).mp4





