首先了解一下与内核调试相关的函数与变量
内核调试相关变量
SharedUserData 是操作系统为每个进程提供的个共享数据结构
其中 KdDebuggerEnabled 用于判断是否存在内核调试
处理他
1 | SharedUserData - >KdDebuggerEnabled = FALSE
|
静态分析发现
对这两个调试变量进行判断与写入
KdDebuggerEnabled
KdDebuggerNotPresent
对KdDisableDebugger函数进行调用
处理方法 HOOK MmGetSystemRoutineAddress
返回我定义的地址与函数回调
处理完上面,但是实际没有改变
KdDebuggerEnabled
KdDebuggerNotPresent
这里的值
依然可以通过 NtQuerySystemInformation 函数检查是否有内核调试器
处理
NtQuerySystemInformation
SystemInformationClass == SystemKernelDebuggerInformation
这个函数可以直接取得
KdDebuggerEnabled
KdDebuggerNotPresent
所以得Hook 此函数
顺便处理了
SystemKernelDebuggerInformationEx
SystemKernelDebuggerFlags
SystemKernelDebuggingAllowed
这三个让其调用失败即可
此时测试,R3已经不报异常了
但驱动启动后,报 13002 蓝屏
回溯堆栈为 驱动保护所在模块调用 蓝屏函数
且处于VMP虚拟段落,不好分析
由于他是主动蓝屏,可以想到肯定是判断了内核某个地方
去主动蓝屏的
查看 ntoskrnl.exe 导出函数
000002A5 001075E0 KdChangeOption .text
000002A6 00277550 KdDebuggerEnabled
000002A7 00277551 KdDebuggerNotPresent
000002A8 0013F7F0 KdDisableDebugger .text
000002A9 001405D0 KdEnableDebugger .text
000002AA 00277548 KdEnteredDebugger
000002AB 0007E850 KdPollBreakIn .text
000002AC 001075A0 KdPowerTransition .text
000002AD 0013D330 KdRefreshDebuggerNotPresent .text
000002AE 004D6E80 KdSystemDebugControl PAGE
这几项与调试相关
根据名称 发现几个可疑函数
KdPollBreakIn
KdSystemDebugControl
KdChangeOption -> 常式會存取和變更核心中與核心偵錯相關的狀態 IDA 查看其实这个函数也是对 KdPitchDebugger 进行检查 如果不以debug启动系统,返回0C0000354
KdRefreshDebuggerNotPresent -> 这个函数也是对 KdPitchDebugger 进行检查 msdn 例子里教你判断是否存在内核调试器
1 2 3 4 5 6 7 8 9 10 11 | if (KdRefreshDebuggerNotPresent() = = FALSE)
{
/ / A kernel debugger is active.
DbgPrint( "A problem occurred\n" );
DbgBreakPoint();
}
else
{
/ / No kernel debugger attached, or kernel debugging not enabled.
KeBugCheckEx(...);
}
|
处理完以上进行测试
发现 windbg 报
KDTARGET: Refreshing KD connection
The target has requested that the debuger execute a command .detach
且主动主断特别慢,所以觉得是不是调用了重新启用内核调试器
KdDebuggerEnabled -> 启用内核调试器
Hook 函数 让其调用失败
windbg 不报 KDTARGET: Refreshing KD connection了
但是这行并没有消失
The target has requested that the debuger execute a command .detach
意思是目标让调试器分离
但不影响调试,请问这又是调用那个函数呢?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)