首页
社区
课程
招聘
[原创]DXX CX NX 调试原理。思路来自于 山总的调试器 对 系统打补丁
发表于: 2019-1-12 11:44 21474

[原创]DXX CX NX 调试原理。思路来自于 山总的调试器 对 系统打补丁

2019-1-12 11:44
21474

WIN10下双机调试原理:

1 创建.OBJECTTYE_CALLBACK 来恢复权限


2 我记得原来有人问过我问XX在WIN10是不是清空DebugProt是不清空了。我原来不分析过 这几天在研究发现。确实是清空了。1803也好 WIN7也好

都清空了。

他的清空原理就是调试器退出的原理。所以不触发PG.调试器退出调用(已经到R0)NtRemoveProcessDebug来移除调试对象 也就是DebugProt里的值

NtRemoveProcessDebug 的定义


NTSTATUS NtRemoveProcessDebug(IN HANDLE ProcessHandle, IN HANDLE DebugHandle);

参数1:ProcessHandle 进程句柄

参数2:调试句柄 NtCreateDebugObject 返回


XX通过这个函数来清空了DebugProt句柄。说白了就是调试器退出的原理。这样就不会触发PG.很高的手法。(个人水平不咋地。感觉这样真的很NB。)


这样一来肯定有人要问了:你是如何分析出来XX调用的NtRemoveProcessDebug。这个很简单。直接对DebugPort下写断点。ba w1 EPRPCRESS + 0X420.断下来之后 k 栈回溯。就会发现了



HOOK了NtRemoveProcessDebug R0的事就已经结束了。

 DNF: HOOK KdpTrap   解决登陆的时候 WINDBG一直抛出异常 过滤是不是TASLogin.exe在抛出异常 如是的话 直接返回return STATUS_SUCCESS;

NTSTATUS TwoMachineDebugging::HookedKdpTrap(
IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN PEXCEPTION_RECORD ExceptionRecord,
IN PCONTEXT ContextRecord,
IN KPROCESSOR_MODE PreviousMode,
IN BOOLEAN SecondChanceException
{

PEPROCESS hp = PsGetCurrentProcess();
if (!_stricmp((char *)PsGetProcessImageFileName(hp), "TASLogin.exe"))
{
return STATUS_SUCCESS;
}

return OriginalKdpTrap(TrapFrame, ExceptionFrame, ExceptionRecord, ContextRecord, PreviousMode, SecondChanceException);
}
NTSTATUS TwoMachineDebugging::HookedKdpTrap(
IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN PEXCEPTION_RECORD ExceptionRecord,
IN PCONTEXT ContextRecord,
IN KPROCESSOR_MODE PreviousMode,
IN BOOLEAN SecondChanceException
{

PEPROCESS hp = PsGetCurrentProcess();
if (!_stricmp((char *)PsGetProcessImageFileName(hp), "TASLogin.exe"))
{
return STATUS_SUCCESS;
}

return OriginalKdpTrap(TrapFrame, ExceptionFrame, ExceptionRecord, ContextRecord, PreviousMode, SecondChanceException);
}


2:   SharedUserData->KdDebuggerEnabled = TRUE; 这一步可以在WIDNBG里来设置。也可以用上述代码实现


3:定时器循环对KdDebuggerEnabled 设置为 1.
VOID
Pass KdDebuggerEnabled (
__in struct _KDPC  *Dpc,
__in_opt PVOID  DeferredContext,
__in_opt PVOID  SystemArgument1,
__in_opt PVOID  SystemArgument2
)
{
__try
{
*KdDebuggerEnabled = 0x1;
}
__except (1)
{
return;
}
KeSetTimer(&g_PassObjTimer, g_PassObjTime, &g_PassObjDpc);
return;
}
VOID
Pass KdDebuggerEnabled (
__in struct _KDPC  *Dpc,
__in_opt PVOID  DeferredContext,
__in_opt PVOID  SystemArgument1,
__in_opt PVOID  SystemArgument2
)
{
__try
{
*KdDebuggerEnabled = 0x1;
}
__except (1)
{

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-2-22 14:43 被kanxue编辑 ,原因:
上传的附件:
收藏
免费 11
支持
分享
打赏 + 11.00雪花
打赏次数 3 雪花 + 11.00
 
赞赏  可爱的小狗子   +5.00 2019/09/30 我也想跟大佬交个朋友
赞赏  可爱的小狗子   +1.00 2019/09/30 大佬分享下企鹅群号
赞赏  aabiaobiao   +5.00 2019/01/31 非常想跟老哥深入认识认识
最新回复 (33)
雪    币: 34
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
先拿个一楼
2019-1-12 11:50
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
感谢分享!
2019-1-12 12:35
0
雪    币: 914
活跃值: (2468)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
4
很强
2019-1-12 12:38
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
山总好
2019-1-12 17:19
0
雪    币: 177
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
厉害 
2019-1-12 21:55
0
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
文中说的山总是MFC几个小时的那个吗
2019-1-12 22:34
0
雪    币: 515
活跃值: (3272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
8
马克
2019-1-13 02:44
0
雪    币: 10704
活跃值: (809)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持,虽然不知道讲的什么
2019-1-13 09:22
0
雪    币: 4709
活跃值: (1575)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
安排上了
2019-1-13 11:36
0
雪    币: 1454
活跃值: (84)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
调试没意思,应该科普一下过DXF各种检测
最后于 2019-1-14 20:21 被JACK李冰编辑 ,原因:
2019-1-14 20:20
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
12
win10的异常是在base线程内的,异常代码有crc
2019-1-14 22:42
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
13
刘铠文 win10的异常是在base线程内的,异常代码有crc
所以直接在内核异常派遣的地方把这种异常单独过滤调就好了啊,不用patch
2019-1-15 11:31
0
雪    币: 40
活跃值: (303)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
有山总的地方就有江湖
2019-1-15 14:29
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
OD可以忽略异常,传递给程序
2019-1-15 14:54
0
雪    币: 634
活跃值: (1149)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
       
最后于 2019-1-15 14:56 被BDBig编辑 ,原因:
2019-1-15 14:55
0
雪    币: 634
活跃值: (1149)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
刘铠文 win10的异常是在base线程内的,异常代码有crc
1803是在base里。直接过滤就好了。其他版本就比较蛋疼了。全部都在抛异常。
2019-1-15 15:01
0
雪    币: 4939
活跃值: (2360)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark
2019-1-21 08:50
0
雪    币: 148
活跃值: (681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
.
最后于 2019-11-10 00:59 被唔Wydy编辑 ,原因: .
2019-2-16 03:56
0
雪    币: 3676
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
又是个打广告的
2019-2-16 08:28
0
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
CWangChao 有山总的地方就有江湖
山总是哪个啊
2019-3-27 18:17
0
雪    币: 59
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
坐标
2019-6-18 11:20
0
雪    币: 4939
活跃值: (2360)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark
2019-6-30 14:34
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
24
mark
2019-7-1 14:18
0
雪    币: 1480
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
ba w1 EPRPCRESS + 0X420 是X64 debugPort 的偏移吗? 这不是瞎写吗?
2019-7-2 09:11
0
游客
登录 | 注册 方可回帖
返回
//