NT内核级进程隐藏3-线程调度链表及Hook 内核函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NT内核级进程隐藏3-线程调度链表及Hook内核函数

基于线程调度链表的检测和隐藏技术

1.什么是ETHREAD和KTHREAD块

学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。

Windows2000是由执行程序线程(ETHREAD)块表示的,ETHREAD成员都是指向的系统空间,进程环境块(TEB)除外。ETHREAD块中的第一个结构体就是内核线程(KTHREAD)块。在KTHREAD块中包含了windows2000内核需要访问的信息。这些信息用于执行线程的调度和同步正在运行的线程。

kd>!kthread

struct_KTHREAD(sizeof=432)

+000struct_DISPA TCHER_HEADER Header

+010struct_LIST_ENTRY MutantListHead

+018void*InitialStack

+01c void*StackLimit

+020void*Teb

+024void*TlsArray

+028void*KernelStack

+02c byte DebugActive

+02d byte State

+02e byte Alerted[2]

+030byte Iopl

+031byte NpxState

+032char Saturation

+033char Priority

+034struct_KAPC_STATE ApcState

+034struct_LIST_ENTRY ApcListHead[2] +044struct_KPROCESS*Process

+04c uint32ContextSwitches

+050int32WaitStatus

+054byte WaitIrql

+055char WaitMode

+056byte WaitNext

+057byte WaitReason

+058struct_KWAIT_BLOCK*WaitBlockList +05c struct_LIST_ENTRY WaitListEntry

+064uint32WaitTime

+068char BasePriority

+069byte DecrementCount

+06a char PriorityDecrement

+06b char Quantum

+06c struct_KWAIT_BLOCK WaitBlock[4] +0cc void*LegoData

+0d0uint32KernelApcDisable

+0d4uint32UserAffinity

+0d8byte SystemAffinityActive

+0d9byte PowerState

+0da byte NpxIrql

+0db byte Pad[1]

+0dc void*ServiceTable

+0e0struct_KQUEUE*Queue

+0e4uint32ApcQueueLock

+0e8struct_KTIMER Timer

+110struct_LIST_ENTRY QueueListEntry

+118uint32Affinity

+11c byte Preempted

+11d byte ProcessReadyQueue

+11e byte KernelStackResident

+11f byte NextProcessor

+120void*CallbackStack

+124void*Win32Thread

+128struct_KTRAP_FRAME*TrapFrame

+12c struct_KAPC_STATE*ApcStatePointer[2] +134char PreviousMode

+135byte EnableStackSwap

+136byte LargeStack

+137byte ResourceIndex

+138uint32KernelTime

+13c uint32UserTime

+140struct_KAPC_STATE SavedApcState

+158byte Alertable

+159byte ApcStateIndex

+15a byte ApcQueueable

+15b byte AutoAlignment

+15c void*StackBase

+160struct_KAPC SuspendApc

+190struct_KSEMAPHORE SuspendSemaphore

+1a4struct_LIST_ENTRY ThreadListEntry

+1ac char FreezeCount

+1ad char SuspendCount

+1ae byte IdealProcessor

+1af byte DisableBoost

在偏移0x5c处有一个WaitListEntry成员,这个就是用来链接到线程调度链表的。在偏移0x34处有一个ApcState成员结构,在ApcState中的Process域就是指向当前线程关联的进程的KPROCESS块,由于KPROCESS块是EPROCESS块的第一个元素,所以找到了KPROCESS块指针也就是找到了EPROCESS块的指针。找到了EPROCESS就不用多少了,就可以取得当前线程的进程的名字,ID号等。

2.线程调度

在windows系统中,线程调度主要分成三条主要的调度链表。分别是KiWaitInListHead,

KiWaitOutListhead,KiDispatcherReadyListHead,分别是两条阻塞链,一条就绪链表,当线程获得CPU执行的时候,系统分配一个时间片给线程,当发生一次时钟中断就从分配的时间片上减去一个时钟中断的值,如果这个值小于零了也就是时间片用完了,那么这个线程根

相关文档
最新文档