songzihui 发表于 2017-6-1 13:33:59

NT6动态开启本地内核调试

两个未导出变量 位置在KdSystemDebugControl下
本地内核调试需要用到KdSystemDebugControl函数 要动态的内核调试就需要来看看它干了什么
PAGE:00000001404D9C00
PAGE:00000001404D9C00               mov   , rbx
PAGE:00000001404D9C05               mov   , rdi
PAGE:00000001404D9C0A               push    r12
PAGE:00000001404D9C0C               sub   rsp, 170h
PAGE:00000001404D9C13               mov   r10, rdx
PAGE:00000001404D9C16               and   , 0
PAGE:00000001404D9C1B               and   qword ptr , 0
PAGE:00000001404D9C21               and   , 0
PAGE:00000001404D9C27               cmp   cs:KdpBootedNodebug, 0
PAGE:00000001404D9C2E               jnz   loc_1404DA4B7
PAGE:00000001404D9C34               cmp   cs:KdPitchDebugger, 0
PAGE:00000001404D9C3B               jnz   loc_1404DA4B7
PAGE:00000001404D9C41               cmp   cs:KdDebuggerEnabled, 0
PAGE:00000001404D9C48               jz      loc_1404DA4B7
PAGE:00000001404D9C4E               cmp   ecx, 0Eh
PAGE:00000001404D9C51               jg      loc_1404DA1D1
PAGE:00000001404D9C57               cmp   ecx, 0Eh
PAGE:00000001404D9C5A               jz      loc_1404DA112
PAGE:00000001404D9C60               sub   ecx, 7
PAGE:00000001404D9C63               jz      loc_1404DA0EB

比较了KdpBootedNodebug KdPitchDebugger KdDebuggerEnabled
据我的了解KdpBootedNodebug非调试为1 此值是调试模式得代表之一
KdPitchDebugger 非调试也为1
KdDebuggerEnabled 不用多说 调试为1 非调试为0
而loc_1404DA4B7是返回失败
那么不用多说了
KdpBootedNodebug = FALSE;
KdPitchDebugger = FALSE;
KdDebuggerEnabled = TRUE;


Win8/8.1:KdLocalDebugEnabled = TRUE;
页: [1]
查看完整版本: NT6动态开启本地内核调试