Tesla.Angela 发表于 2014-10-24 20:30:11

《WIN64驱动教程》补充[24]:不用任何API设置线程CONTEXT

作者:Tesla.Angela

线程的CONTEXT记录了各种寄存器的数值,包括很多人关心的DRX寄存器的数值。
而获取/设置CONTEXT一般来说是需要进程句柄的,于是游戏保护禁止打开进程就让很多调试器抓狂了。
其实在内核里获取/设置CONTEXT根本不需要句柄,因为它就记录在ETHREAD里。下面以WIN7X64为例:
lkd> dt_kthread
ntdll!_KTHREAD
        +0x000 Header         : _DISPATCHER_HEADER
        //省略无关内容...
        +0x1c8 QueueListEntry   : _LIST_ENTRY
        +0x1d8 TrapFrame      : Ptr64 _KTRAP_FRAME        //这个就是CONTEXT
        +0x1e0 FirstArgument    : Ptr64 Void
        //省略无关内容...
        +0x358 XStateSave       : Ptr64 _XSTATE_SAVE
lkd> dt_KTRAP_FRAME
ntdll!_KTRAP_FRAME
        +0x000 P1Home         : Uint8B
        +0x008 P2Home         : Uint8B
        +0x010 P3Home         : Uint8B
        +0x018 P4Home         : Uint8B
        +0x020 P5               : Uint8B
        +0x028 PreviousMode   : Char
        +0x029 PreviousIrql   : UChar
        +0x02a FaultIndicator   : UChar
        +0x02b ExceptionActive: UChar
        +0x02c MxCsr            : Uint4B
        +0x030 Rax            : Uint8B
        +0x038 Rcx            : Uint8B
        +0x040 Rdx            : Uint8B
        +0x048 R8               : Uint8B
        +0x050 R9               : Uint8B
        +0x058 R10            : Uint8B
        +0x060 R11            : Uint8B
        +0x068 GsBase         : Uint8B
        +0x068 GsSwap         : Uint8B
        +0x070 Xmm0             : _M128A
        +0x080 Xmm1             : _M128A
        +0x090 Xmm2             : _M128A
        +0x0a0 Xmm3             : _M128A
        +0x0b0 Xmm4             : _M128A
        +0x0c0 Xmm5             : _M128A
        +0x0d0 FaultAddress   : Uint8B
        +0x0d0 ContextRecord    : Uint8B
        +0x0d0 TimeStampCKCL    : Uint8B
        +0x0d8 Dr0            : Uint8B        //大家关心的寄存器
        +0x0e0 Dr1            : Uint8B        //大家关心的寄存器
        +0x0e8 Dr2            : Uint8B        //大家关心的寄存器
        +0x0f0 Dr3            : Uint8B        //大家关心的寄存器
        +0x0f8 Dr6            : Uint8B        //大家关心的寄存器
        +0x100 Dr7            : Uint8B        //大家关心的寄存器
        +0x108 DebugControl   : Uint8B
        +0x110 LastBranchToRip: Uint8B
        +0x118 LastBranchFromRip : Uint8B
        +0x120 LastExceptionToRip : Uint8B
        +0x128 LastExceptionFromRip : Uint8B
        +0x108 LastBranchControl : Uint8B
        +0x110 LastBranchMSR    : Uint4B
        +0x130 SegDs            : Uint2B
        +0x132 SegEs            : Uint2B
        +0x134 SegFs            : Uint2B
        +0x136 SegGs            : Uint2B
        +0x138 TrapFrame      : Uint8B
        +0x140 Rbx            : Uint8B
        +0x148 Rdi            : Uint8B
        +0x150 Rsi            : Uint8B
        +0x158 Rbp            : Uint8B
        +0x160 ErrorCode      : Uint8B
        +0x160 ExceptionFrame   : Uint8B
        +0x160 TimeStampKlog    : Uint8B
        +0x168 Rip            : Uint8B
        +0x170 SegCs            : Uint2B
        +0x172 Fill0            : UChar
        +0x173 Logging          : UChar
        +0x174 Fill1            : Uint2B
        +0x178 EFlags         : Uint4B
        +0x17c Fill2            : Uint4B
        +0x180 Rsp            : Uint8B
        +0x188 SegSs            : Uint2B
        +0x18a Fill3            : Uint2B
        +0x18c CodePatchCycle   : Int4B代码实现很简单:
**** Hidden Message *****

cghost 发表于 2014-10-30 20:59:47

老大这样貌似可以用来加载DLL~!{:soso_e102:}

5ak 发表于 2024-1-4 09:45:39

学习了

lai0301 发表于 2024-1-4 11:09:24

看看!!!!!!!!

baggiowangyu 发表于 2024-1-27 00:30:42

2024补充学习

376408384 发表于 2024-1-27 15:23:04

我来学习

yimingqpa 发表于 2024-3-28 16:59:53

看看隐藏里面是啥.

nj001 发表于 2024-3-29 13:50:43

学习一下

wst5898 发表于 2025-1-26 11:11:12

好好学习
页: [1]
查看完整版本: 《WIN64驱动教程》补充[24]:不用任何API设置线程CONTEXT