驱动-进程隐藏
进程概念
在接触x86汇编以及Win32时,书中会提到进程拥有独⽴的4GB的虚拟内存空间(x86下每个 进程线性地址00000000h · 0FFFFFFFFh),由此可以看出进程是空间上的概念(如果没有线 程执⾏进程内的数据,犹如⼀潭死⽔,同时如果⼀个进程内所有线程都结束,那么操作系统 会释放进程)。
进程的本质只是决定了需要使⽤哪些相关的物理⻚。以及通过CR3来访问这些数据。
当我们在使⽤API OpenProcess 来打开⼀个进程时,得到的返回值是⼀个HANDLE(句 柄),在内核中通过此句柄值可以在当前进程私有句柄表中找到打开进程对应的内核结构体 (EPROCESS)。
内核结构体
测试环境为:Win7 x86 (2-9-9-12)
KPROCESS


EPROCESS



ActiveProcessLinks
ActiveProcessLinks该成员为双向循环链表,指向了当前正在运⾏的进程。
1. Windbg 输⼊dt _EPROCESS 进程结构地址

2. 此结构挂在EPROCESS + 0xB8位置,如果要获得进程结构体需要减去对应偏移.

3. 此双向链表结构图如下

此处进⾏断链,部分API会失效同时任务管理器也不会显⽰。
断链后程序可以正常运⾏,因为CPU的执⾏和调度是基于线程的。
代码⽰例
驱动代码



遍历代码


驱动加载前:

驱动加载后:

目标进程不能被进程快照查看!
---------------------Ferry学院