我们可以通过遍历EProcess结构体中的双向链表ActiveProcessLinks,找到目标进程结点后将该节点从双向链表中移除,便实现了进程隐藏的目的,此时打开win7的任务管理器会发现运行的calc进程并没有显示。
使用windbg查看EProcess结构:
2: kd> !process 0 0
//crtl+F查找explorer
PROCESS 892b9d40 SessionId: 1 Cid: 09e8 Peb: 7ffdd000 ParentCid: 09b8
DirBase: 7e2f4480 ObjectTable: 983c85a0 HandleCount: 622.
Image: explorer.exe
2: kd> dt _eprocess 892b9d40
nt!_EPROCESS
+0x000 Pcb : _KPROCESS
+0x098 ProcessLock : _EX_PUSH_LOCK
+0x0a0 CreateTime : _LARGE_INTEGER 0x01d3b06d`2b360a55
+0x0a8 ExitTime : _LARGE_INTEGER 0x0
+0x0b0 RundownProtect : _EX_RUNDOWN_REF
+0x0b4 UniqueProcessId : 0x000009e8 Void
+0x0b8 ActiveProcessLinks : _LIST_ENTRY [ 0x893060e8 - 0x892b62a8 ]
2: kd> dt _LIST_ENTRY
nt!_LIST_ENTRY