首页
社区
课程
招聘
[原创]开源 AADebug 内核反反调试插件(支持x64dbg)-支持VMP3.X 支持SE等反调试
发表于: 2020-12-21 07:42 23539

[原创]开源 AADebug 内核反反调试插件(支持x64dbg)-支持VMP3.X 支持SE等反调试

2020-12-21 07:42
23539

Process->DebugPort是个永远绕不开的坎 甚至很多反调试手段都需要依赖DebugPort来判断程序是否正处于调试模式

重写调试函数几乎已经是目前0环所能做到的极限了

使用-1环虚拟化会遇到兼容以及不稳定问题

使用-2环不是蓝屏就是死机 没个年薪百万的水平真的玩不来-2环

当然在某些情况下虚拟化的确很好用 这里不将-1环和-2环的情况加入讨论

AADebug以及TrialSword 虽然实现方式上目前只是略有区别 但都属于重写部分调试函数来达到反反调试的效果(TrialSword 为私有 不公开项目)

TrialSword在实现的函数上更多更全 部分处理更好

AADebug只是为了能用就行 比如ProcessDebugFlags就没有处理 因为这种反调试手段在应用层就可以轻松绕过

不过AADebug在未来会支持反内核双机调试检测使用AADebug内核反调试 而且这也是主要目标

再加上应用层的反反调试手段 理论上可以无限接近使用虚拟化反反调试器所能实现的效果

代码在帖子最下方

插件目前效果

使用github/al-khaser作为测试对象

一图为第一版测试 二图为第二版测试 均在虚拟环境下进行



VMP调试测试

SE反调试测试

对于读写打开进程等权限目前只是做了一切基本处理 遇到类BE反外挂循环反权限模式依旧无法绕过 之后考虑为了支持CE加入强行修改句柄表功能 不过循环处理真的很恶心 还是虚拟化方案治这种狗东西最舒服

实现了3个debug开始的重要函数 这些函数都跟dbgport有关 都需要绕过如果不需要实现调试器的中途附加功能 其实不需要发送fakemessage也行(理论上)

这些私有函数其实都是windows内核的dbg函数 但是他们都会跟dbgport扯上关系 所以做一些处理

为了支持异常处理,异常分发 绕反调试主动异常以及支持调试器创建进程 这些函数也是必不可少的

之前在调试进程创建时遇到了不少麻烦

XP和win7的进程创建有一些不同

PSPCreateProcess不在被使用替代的函数是NtCreateUserProcess虽然NtCreateUserProcess和PSPCreateProcess实现流程基本相同

但无论是参数还是调用的内部函数其实都是不同的

即便是我有windows私有符号的加持 想要完整还原进程创建函数也得废很大劲 所以最后让进程先成功创建 等回头再去掉dbgport

但此时的dbgport和dbgobject的确是自实现函数创建的 所以dbgobject以及event不能做任何修改

这种处理肯定会遇到问题

但管它的呢... 那些极端情况直接不考虑了剩下的也没什么特殊的地方了 在内核中只需要注意dbgport即可 一些LPC和PEB之类的东西稍微注意一下就能过去 非常轻松

目前AADebug已经是将所有能省的全都给省了 几乎所有的内核调试相关函数我都看了一遍 剩下的都无关紧要 最后al-khaser项目的反调试测试成功也说明了这一点

至于为什么不直接针对dbgport做一些特殊而且简单很多的方案 是因为我的主要目的是内核反双机调试检测 R3反反调试只是顺手一起搞了

内核绕过DebugPort

应用层绕过DbgUiDebugObjectHandle (NtCurrentTeb()->DbgSsReserved[1])

应用层绕过PEB->BeingDebugged

支持创建进程和附加进程

支持配合ScyllaHide插件同时使用

支持x64dbg

....

(已完成)支持x64dbg

(已完成 待测试)支持cheat-engine

(已完成 有些是内核工程太大 不如在应用层做处理 内核做的话得不偿失)绕过大部分al-khaser应用层反调试手段

支持虚拟机双机调试

虚拟机双机调试支持VirtualKD

支持Win10

绕过部分游戏反调试保护(HS BE TP ...)

(已完成 待测试)绕过VMP SE等反调试加壳

最后感谢一下MeeSong 以及群里的朋友和同事 一人写代码 全群都在帮忙想哈哈哈

没有他的那份代码 在搞R3的时候我会走不少弯路 虽然他的代码也有坑...

内核启用STL也一直是在用他的代码 挺好用 但我创建项目的时候VS2019还只是预览版 所以没有用最新的2019内核STL

最后方上源代码地址:源码地址

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
NTSTATUS NTAPI NewNtReadWriteVirtualMemory(Message_NtReadWriteVirtualMemory *message);
        NTSTATUS NTAPI NewNtProtectVirtualMemory(Message_NtProtectVirtualMemory *message);
        NTSTATUS NTAPI NewNtOpenProcess(Message_NewNtOpenProcess *message);
NTSTATUS NTAPI NewNtReadWriteVirtualMemory(Message_NtReadWriteVirtualMemory *message);
        NTSTATUS NTAPI NewNtProtectVirtualMemory(Message_NtProtectVirtualMemory *message);
        NTSTATUS NTAPI NewNtOpenProcess(Message_NewNtOpenProcess *message);
NTSTATUS NTAPI NewNtCreateDebugObject(Message_NewNtCreateDebugObject *message);
        NTSTATUS NTAPI NewNtDebugActiveProcess(Message_NewNtDebugActiveProcess *message);
        NTSTATUS NTAPI NewNtRemoveProcessDebug(Message_NewNtRemoveProcessDebug *message);
NTSTATUS NTAPI NewNtCreateDebugObject(Message_NewNtCreateDebugObject *message);
        NTSTATUS NTAPI NewNtDebugActiveProcess(Message_NewNtDebugActiveProcess *message);
        NTSTATUS NTAPI NewNtRemoveProcessDebug(Message_NewNtRemoveProcessDebug *message);
private://私有实现函数
        NTSTATUS NTAPI PrivateDbgkpPostFakeProcessCreateMessages(
                IN PEPROCESS Process,
                IN PDEBUG_OBJECT DebugObject,
                IN PETHREAD *pLastThread);
        NTSTATUS NTAPI PrivateDbgkpPostFakeThreadMessages(
                        IN PEPROCESS Process,
                        IN PDEBUG_OBJECT DebugObject,
                        IN PETHREAD StartThread,
                        OUT PETHREAD *pFirstThread,
                        OUT PETHREAD *pLastThread);
        NTSTATUS NTAPI PrivateDbgkpQueueMessage(
                IN PEPROCESS Process,
                IN PETHREAD Thread,
                IN OUT PDBGKM_APIMSG ApiMsg,
                IN ULONG Flags,
                IN PDEBUG_OBJECT TargetDebugObject);
        NTSTATUS NTAPI PrivateDbgkpPostFakeModuleMessages(
                IN PEPROCESS Process,
                IN PETHREAD Thread,
                IN PDEBUG_OBJECT DebugObject);
        NTSTATUS NTAPI PrivateDbgkpSetProcessDebugObject(
                IN PEPROCESS Process,
                IN PDEBUG_OBJECT DebugObject,
                IN NTSTATUS MsgStatus,
                IN PETHREAD LastThread);
        NTSTATUS NTAPI PrivateDbgkpSendApiMessage(
                IN OUT PDBGKM_APIMSG ApiMsg,
                IN BOOLEAN SuspendProcess);
private://私有实现函数
        NTSTATUS NTAPI PrivateDbgkpPostFakeProcessCreateMessages(
                IN PEPROCESS Process,
                IN PDEBUG_OBJECT DebugObject,
                IN PETHREAD *pLastThread);
        NTSTATUS NTAPI PrivateDbgkpPostFakeThreadMessages(
                        IN PEPROCESS Process,
                        IN PDEBUG_OBJECT DebugObject,
                        IN PETHREAD StartThread,
                        OUT PETHREAD *pFirstThread,
                        OUT PETHREAD *pLastThread);
        NTSTATUS NTAPI PrivateDbgkpQueueMessage(
                IN PEPROCESS Process,
                IN PETHREAD Thread,

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

最后于 2020-12-23 18:47 被章鱼C编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (29)
雪    币: 4491
活跃值: (2484)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
前来支持
2020-12-21 09:55
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
微软内部肯定有自己的一套debugger吧
2020-12-21 10:02
0
雪    币: 174
活跃值: (2731)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
谢谢分享 支持
2020-12-21 10:02
0
雪    币: 615
活跃值: (590)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
支持,开源,赞赞,赞,
2020-12-21 10:21
0
雪    币: 6584
活跃值: (4541)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
有没有编译好的
2020-12-21 10:21
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持下
2020-12-21 11:24
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
Foodie 前来支持
mesong? 这你是看雪号么
2020-12-21 12:36
0
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
nice
2020-12-21 14:40
0
雪    币: 2466
活跃值: (4561)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
厉害,不过请问一下r-2指的是smm吗?这个层次有啥研究成果吗?
2020-12-21 15:21
0
雪    币: 137
活跃值: (1380)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
BE句柄降权的接管X64dbg的那些要用到句柄的API即可 
2020-12-21 16:32
0
雪    币: 5296
活跃值: (4773)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

win7的 早就有人开源了! 还自带VT,  不过你这个也不错 谢谢分享!!~~

最后于 2020-12-21 16:36 被~时光荏苒编辑 ,原因:
2020-12-21 16:35
0
雪    币: 1319
活跃值: (1960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13

学习一下,VT调试网上早就开源了,支持ept下断最新版的支持win10

最后于 2020-12-21 17:20 被库尔编辑 ,原因:
2020-12-21 17:19
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
默NJ 厉害,不过请问一下r-2指的是smm吗?这个层次有啥研究成果吗?
这得问大佬级了 我只见过一个键盘监听
2020-12-21 18:55
0
雪    币: 2466
活跃值: (4561)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
章鱼C 这得问大佬级了 我只见过一个键盘监听
太强了,我听说软件层是无法访问smm内存区的
2020-12-21 19:02
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
默NJ 太强了,我听说软件层是无法访问smm内存区的
以前其实有机会接触的 但是最后开会讨论还是否决了这个方案 因为当时找到了一种不依赖虚拟化 不触发PG的内核任意HOOK方式
2020-12-21 19:24
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
huojier BE句柄降权的接管X64dbg的那些要用到句柄的API即可
关键是他没有触发PG 但你HOOK的话就触发了 这就有点让人恼火
2020-12-21 19:27
0
雪    币: 137
活跃值: (1380)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
章鱼C 关键是他没有触发PG 但你HOOK的话就触发了 这就有点让人恼火
不 是注入dll到x64dbg里面hook那些R3 API再跟你驱动通讯
2020-12-22 14:46
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
huojier 不 是注入dll到x64dbg里面hook那些R3 API再跟你驱动通讯
现在就是这样实现的 但句柄依旧还是没有权限的状态 只是能读写内存了
2020-12-22 21:43
0
雪    币: 75
活跃值: (156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有没有群交流的,我想加入研究行列……
2020-12-23 00:48
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
21
wx_怪兽老了啊 有没有群交流的,我想加入研究行列……
780705352 入群有一定的条件 你可以加我Q好友然后聊一聊
2020-12-23 10:17
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
又是32位吧?  
2020-12-23 10:55
0
雪    币: 206
活跃值: (2599)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
23
tmflxw 又是32位吧?

64位的

最后于 2020-12-23 11:44 被章鱼C编辑 ,原因:
2020-12-23 11:43
0
雪    币: 10962
活跃值: (2925)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
24
库尔 学习一下,VT调试网上早就开源了,支持ept下断最新版的支持win10
兄弟,地址给一个我,谢谢。
2020-12-23 15:52
0
雪    币: 1319
活跃值: (1960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
joker陈 兄弟,地址给一个我,谢谢。
我记得蛮多的,https://github.com/changeofpace/VivienneVMM
2020-12-24 09:19
0
游客
登录 | 注册 方可回帖
返回
//