首页
社区
课程
招聘
某南极动物厂-反双机调试分析
发表于: 2022-9-20 16:01 10829

某南极动物厂-反双机调试分析

2022-9-20 16:01
10829

首先了解一下与内核调试相关的函数与变量
内核调试相关变量

 

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期)

收藏
免费 2
支持
分享
最新回复 (7)
雪    币: 2325
活跃值: (2304)
能力值: ( LV6,RANK:89 )
在线值:
发帖
回帖
粉丝
2
你倒是分析啊,,,,标题党
2022-9-20 16:15
0
雪    币: 2229
活跃值: (3757)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
LexSafe 你倒是分析啊,,,,标题党
你HOOK MmGetSystemRoutineAddress
打印他获取的函数就知道了
2022-9-20 16:37
0
雪    币: 63
活跃值: (738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问下x64的企鹅是检测的getsystemfirwtabled,获取的ibos信息检测的,挂了个钩子清零就过掉虚拟机检测了,但是在win7-32里处理了,vmp检测都过了,但是tp还是能检测到,除了硬件,注册表,特权指令,还有那些信息能被检测到的
2022-9-24 02:54
0
雪    币: 515
活跃值: (3252)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
5
请问高手,
用的什么HOOK?
可以过PG HOOK MmGetSystemRoutineAddress 而不蓝屏?
2022-9-25 02:11
1
雪    币: 63
活跃值: (738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
wem 请问高手, 用的什么HOOK? 可以过PG HOOK MmGetSystemRoutineAddress 而不蓝屏?
2022-9-27 05:21
0
雪    币: 63
活跃值: (738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
里面有个链表-0x10位置是特征,-8是call地址
2022-9-27 05:22
0
雪    币: 95
活跃值: (1041)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8


最后于 2023-9-1 15:50 被0xffffffff编辑 ,原因:
2023-2-17 11:27
0
游客
登录 | 注册 方可回帖
返回
//