Window s 深入解析---Processes,Threads,Jobs学习各种高级外挂制作技术,马上去百度搜索 "魔鬼作坊",点击第一个站进入,快速成为做挂达人。这是 Window s Internals第6章的内容。发现描述的还算详细。读了总比不读强。于是纪录之,老鸟飘过----<一>进程相关EPROCESS算是进程的代表,它还保留着与之相关的其他信息。进程是死的,其中的线程才是活的。进程就好比一个容器,装着很多活跃的线程而已[没有线程的进程注定要死亡,因为它没有活力]。对了,还有 PEB、TEB[这2个结构存在于用户进程空间中,其他的都在系统的高2GB地址范围里]。见图:① 明确 KPCR、KPRCB、ETHREAD、KTHREAD、EPROCESS、KPROCESS、TEB、PEB----KPCR(Kernel'sProcessorControlRegion,内核进程控制区域)是一个不会随 WINDOWS版本变动而改变的固定结构体,在它的末尾[偏移0x120]指向 KPRCB结构。nt!_KPCR+0x000NtTib:_NT_TIB+0x01cSelfPcr:Ptr32_KPCR+0x020Prcb:Ptr32_KPRCB+0x024Irql:UChar+0x028IRR:Uint4B+0x02cIrrActive:Uint4B+0x030IDR:Uint4B+0x034KdVersionBlock:Ptr32Void+0x038IDT:Ptr32_KIDTENTRY+0x03cGDT:Ptr32_KGDTENTRY+0x040TSS:Ptr32_KTSS...//省略+0x120PrcbData :_KPRCBKPRCB同样是一个不会随WINDOWS版本变动而改变的固定结构体。它包含有指向当前KTHREAD的指针,偏移值0x004。其实也就是知道了当前的ETHREAD基地址。[因为 ETHREAD的第一项便是KTHREAD,ETHREAD在后面讨论,现在讨论进程相关][通过 KeGetCurrentPrcb()函数即可得到 PKPRCB,具体参见 WRK]展开 KTHREAD,其中的_KAPC_STATE结构中包含当前 KPROCESS的地址nt!_KTHREAD+0x000Header:_DISPATCHER_HEADER...+0x034ApcState :_KAPC_STATE+0x034ApcState :struct_KAPC_STATE,5elements,0x18bytes+0x000ApcListHead:[2]struct_LIST_ENTRY,2elements,0x8bytes+0x010Process:Ptr32tostruct_KPROCESS,29elements,0x6cbytes+0x014KernelApcInProgress:UChar+0x015KernelApcPending:UChar+0x016UserApcPending:UChar而EPROCESS的第一项正是KPROCESS。联想我们熟悉的断 EPROCESS链表隐藏进程的手法。通过 PsGetCurrentProcess得到的其实是当前 KPROCESS的地址,而KPROCESS就是EPROCESS结构体的第一项,这样就得到了当前的EPROCESS。然后遍历整个链表。。。---->>大致流程:PsGetCurrentProcess()函数---->_PsGetCurrentProcess()宏----->KeGetCurrentThread()函数---->>具体细节:...