[C++]
纯文本查看
复制代码
NTSTATUS NTAPI NewNtReadWriteVirtualMemory(Message_NtReadWriteVirtualMemory *message);
NTSTATUS NTAPI NewNtProtectVirtualMemory(Message_NtProtectVirtualMemory *message);
实现了3个debug开始的重要函数 这些函数都跟dbgport有关 都需要绕过如果不需要实现调试器的中途附加功能 其实不需要发送fakemessage也行(理论上)
[C++] 纯文本查看 复制代码
NTSTATUS NTAPI NewNtCreateDebugObject(Message_NewNtCreateDebugObject *message);
NTSTATUS NTAPI NewNtDebugActiveProcess(Message_NewNtDebugActiveProcess *message);
这些私有函数其实都是windows内核的dbg函数 但是他们都会跟dbgport扯上关系 所以做一些处理
[C++] 纯文本查看 复制代码
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,
为了支持异常处理,异常分发 绕反调试主动异常以及支持调试器创建进程 这些函数也是必不可少的
[C++] 纯文本查看 复制代码
static VOID NTAPI NewKiDispatchException(
IN PEXCEPTION_RECORD ExceptionRecord,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN PKTRAP_FRAME TrapFrame,
IN KPROCESSOR_MODE PreviousMode,
IN BOOLEAN FirstChance);
static BOOLEAN NTAPI NewDbgkForwardException(
IN PEXCEPTION_RECORD ExceptionRecord,
IN BOOLEAN DebugException,
IN BOOLEAN SecondChance);
static VOID NTAPI NewDbgkCreateThread(PVOID StartAddress);
static VOID NTAPI NewDbgkMapViewOfSection(
IN PVOID SectionObject,
IN PVOID BaseAddress,
IN ULONG SectionOffset,
IN ULONG_PTR ViewSize);
static VOID NTAPI NewDbgkUnMapViewOfSection(IN PVOID BaseAddress);
/*static NTSTATUS NTAPI NewPspCreateProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess OPTIONAL,
IN ULONG Flags,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
IN ULONG JobMemberLevel);*/
static NTSTATUS NTAPI NewNtCreateUserProcess(
PHANDLE ProcessHandle,
PETHREAD ThreadHandle,
ACCESS_MASK ProcessDesiredAccess,
ACCESS_MASK ThreadDesiredAccess,
_OBJECT_ATTRIBUTES *ProcessObjectAttributes,
_OBJECT_ATTRIBUTES *ThreadObjectAttributes,
ULONG ProcessFlags,
ULONG ThreadFlags,
_RTL_USER_PROCESS_PARAMETERS *ProcessParameters,
void *CreateInfo,
之前在调试进程创建时遇到了不少麻烦
XP和win7的进程创建有一些不同 PSPCreateProcess不在被使用替代的函数是NtCreateUserProcess虽然NtCreateUserProcess和PSPCreateProcess实现流程基本相同
但无论是参数还是调用的内部函数其实都是不同的
即便是我有windows私有符号的加持 想要完整还原进程创建函数也得废很大劲 所以最后让进程先成功创建 等回头再去掉dbgport
但此时的dbgport和dbgobject的确是自实现函数创建的 所以dbgobject以及event不能做任何修改这种处理肯定会遇到问题
但管它的呢... 那些极端情况直接不考虑了剩下的也没什么特殊的地方了 在内核中只需要注意dbgport即可 一些LPC和PEB之类的东西随便绕一下就能过去
目前AADebug已经是将所有能省的全都给省了 几乎所有的内核调试相关函数我都看了一遍 剩下的都无关紧要 最后al项目的反调试测试也说明了这一点
至于为什么不直接针对dbgport做一些特殊而且简单很多的方案 是因为我的主要目的是内核反双机调试检测 R3反反调试只是顺手一起搞了
AADebug目前已实现- 内核绕过DebugPort
- 应用层绕过DbgUiDebugObjectHandle (NtCurrentTeb()->DbgSsReserved[1])
- 应用层绕过PEB->BeingDebugged
- 支持创建进程和附加进程
- 支持配合ScyllaHide插件同时使用
- 支持x64dbg
- 绕过VMP SE等反调试加壳
- ....
未来准备支持(按优先级排序)- (已完成)支持x64dbg
- (已完成 待测试)支持cheat-engine
- (已完成)绕过大部分al-khaser应用层反调试手段
- 支持虚拟机双机调试 重写内核调试函数 绕过内核反调试检测(某些反调试会加载驱动 比如游戏反外挂 驱动会判断内核的某些标志 判断是否处于双机调试模式 目标就是绕过这些点)
- 虚拟机双机调试支持VirtualKD
- 支持Win10
- 绕过部分游戏反调试保护(HS BE TP ...)
最后感谢一下MeeSong(我的确不知道他52破解的账号ID) 以及群里的朋友和同事 一人写代码 全群都在帮忙想哈哈哈
没有他的那份代码 在搞R3的时候我会走不少弯路 虽然他的代码也有坑...
内核启用STL也一直是在用他的代码 挺好用
最后方上源代码地址:https://github.com/DragonQuestHero/Kernel-Anit-Anit-Debug-Plugins
调试, AADebug, 层反调试, 函数, 内核