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,
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-12-23 18:47
被章鱼C编辑
,原因: