一个进程创建了5个线程。。。
DWORD threadID;
for (int i=0;i<5;i++)
{
CreateThread(0,0,(LPTHREAD_START_ROUTINE)thread,0,0,&threadID);
char strBuffer[100];
sprintf(strBuffer,"%d",threadID);
OutputDebugString(strBuffer);
// OutputDebugString("%d",threadID);
printf("%d\n",threadID);
}
return 0;
PROCESS 89c70da0 SessionId: 0 Cid: 0648 Peb: 7ffdb000 ParentCid: 05cc
DirBase: 0c800300 ObjectTable: e10905c8 HandleCount: 48.
Image: multhread.exe
kd> dt !_KPROCESS 89c70da0
ntdll!_KPROCESS
+0x000 Header : _DISPATCHER_HEADER
+0x010 ProfileListHead : _LIST_ENTRY [ 0x89c70db0 - 0x89c70db0 ]
+0x018 DirectoryTableBase : [2] 0xc800300
+0x020 LdtDescriptor : _KGDTENTRY
+0x028 Int21Descriptor : _KIDTENTRY
+0x030 IopmOffset : 0x20ac
+0x032 Iopl : 0 ''
+0x033 Unused : 0 ''
+0x034 ActiveProcessors : 0
+0x038 KernelTime : 0xd
+0x03c UserTime : 5
+0x040 ReadyListHead : _LIST_ENTRY [ 0x89c70de0 - 0x89c70de0 ]
+0x048 SwapListEntry : _SINGLE_LIST_ENTRY
+0x04c VdmTrapcHandler : (null)
+0x050 ThreadListHead : _LIST_ENTRY [ 0x89e6c798 - 0x89de7700 ]
ThreadListHead进程中线程链表头
每一个结构都是_LIST_ENTRY
kd> dd 0x89e6c798
89e6c798 89de0550 89c70df0 00000000 00000000
kd> dd 89de0550
89de0550 89c71a60 89e6c798 00000000 00000000
kd> dd 89c71a60
89c71a60 89e5fe00 89de0550 00000000 00000000
kd> dd 89e5fe00
89e5fe00 89e6c4c0 89c71a60 00000000 00000000
kd> dd 89e6c4c0
89e6c4c0 89de7700 89e5fe00 00000000 00000000
kd> dd 89de7700
89de7700 89c70df0 89e6c4c0 00000000 00000000
kd> dd 89c70df0
89c70df0 89e6c798 89de7700 00000000 00000001
主线程加5个线程正好6个线程对应6个线程循环
这里是KTHREAD里面的ThreadListHead
ETHREAD里面也有一个,同样的方式就能看到其实都是一一对应的
EPROCESS的0x190对应了ETHREAD链
+0x190 ThreadListHead : _LIST_ENTRY [ 0x89e6c814 - 0x89de777c ]
kd> dd 0x89e6c814
89e6c814 89de05cc 89c70f30 00000000 00000000
89e6c824 00000000 00000007 001f03ff 00000000
89e6c834 00000000 00000000 00000000 0a08004f
89e6c844 7266744e 89e8a060 89dea0b8 00000000
89e6c854 00000000 00000000 00000000 00000000
89e6c864 00000000 00000000 00000000 00000000
89e6c874 00000000 00000000 00000000 0a080008
89e6c884 7266744e 89e6edf8 89e89100 00000000
kd> dd 89de05cc
89de05cc 89c71adc 89e6c814 00000000 00000000
89de05dc 00000000 00000007 001f03ff 00000000
89de05ec 00000000 00000000 00000000 0a07004f
89de05fc 64536d4d 89e65968 00000060 00000100
89de060c 00000100 e25a6000 00000100 00000100
89de061c 00000000 00000000 8a1d0df8 00000002
89de062c 00000003 00010007 63426343 0a0d0001
89de063c 61436d4d e259eb88 00000000 00000000
kd> dd 89c71adc
89c71adc 89e5fe7c 89de05cc 00000000 00000000
89c71aec 00000000 00000007 001f03ff 00000000
89c71afc 00000000 00000000 00000000 0a27004f
89c71b0c 63536343 013002ff 00000001 00006c00
89c71b1c 00000000 89c71b20 89c71b20 00100000
89c71b2c 00000000 00006c00 00000000 00006c00
89c71b3c 00000000 8a270948 00000000 00000000
89c71b4c 00000000 89c71b40 89e60630 00000000
kd> dd 89e5fe7c
89e5fe7c 89e6c53c 89c71adc 00000000 00000000
89e5fe8c 00000000 00000007 001f03ff 00000000
89e5fe9c 00000000 00000000 00000000 0001004f
89e5feac 74696157 0a050001 6e66744e 001c0707
89e5febc 00000000 00000000 89de6500 89de1ed0
89e5fecc 00000000 89d86420 89e2a330 00250005
89e5fedc 70627375 89dc7e48 89e65ee0 0000011c
89e5feec 00000100 00000001 00000000 02210004
kd> dd 89e6c53c
89e6c53c 89de777c 89e5fe7c 00000000 00000000
89e6c54c 00000000 00000007 001f03ff 00000000
89e6c55c 00000000 00000000 00000000 0a05004f
89e6c56c 7346744e 00000001 b12435b8 00000000
89e6c57c ba047001 00000000 89e6c584 89e6c584
89e6c58c 81f03400 0a060005 20646156 00003b20
89e6c59c 00003b9f 89e88c48 00000000 00000000
89e6c5ac 04000000 89e83a20 e2580c00 e2580ff8
kd> dd 89de777c
89de777c 89c70f30 89e6c53c 00000000 00000000
89de778c 00000000 00000007 001f03ff 00000000
89de779c 00000000 00000000 00000000 0a05004f
89de77ac 6d665346 00000001 b124325c 00000000
89de77bc 00040001 00000000 89de77c4 89de77c4
89de77cc 0000003d 0a040005 70566343 8a2703a8
89de77dc 8a270420 8a270438 8a2703f0 8a2703d8
89de77ec 8a2703c0 0a270004 63536343 013002ff
kd> dd 89c70f30
89c70f30 89e6c814 89de777c 00000000 bac8b300
89c70f40 00000006 001f0fff 00008000 00000000
89c70f50 7ffdb000 00000000 00000006 00000000
89c70f60 00000006 00000000 00000088 00000000
89c70f70 00000198 00000000 000001b0 00000000
89c70f80 00000998 00000000 00000000 00000137
89c70f90 00000000 89e38b30 d4d9d8b4 01cd2b29
89c70fa0 00010000 00000394 0000036f 0000036f
而且两者对应的差都是7C,符合EPROCESS中的偏移差
0x89e6c814 - 0x89e6c798 = 7C
89de05cc - 89de0550 7C
完全符合,学习了wrk中可是知道具体这些东西是怎么操作,对应的进程也是这样的。所以普通的隐藏进程EPROCESS中的链去除掉就可以了。。
[课程]Linux pwn 探索篇!