XAntiDenbug的检测逻辑与基本反调试

入口相关代码

XAntiDenbug的检测逻辑与基本反调试

XAntiDebug 初始化获取当前模块地址 与设置了一个标识。

#define FLAG_FULLON (FLAG_CHECKSUM_NTOSKRNL | FLAG_CHECKSUM_CODESECTION |
FLAG_DETECT_DEBUGGER | FLAG_DETECT_HARDWAREBREAKPOINT)
XAntiDenbug的检测逻辑与基本反调试

获取当前系统相关信息。

_isArch64 代表是64位架构
_isWow64 代表是64位环境运行32位程序
XAntiDenbug的检测逻辑与基本反调试
NtSetInformationThread  设置线程的优先级
句柄-1 是进程的句柄 -2是当前线程的句柄
0x11 ThreadHideFromDebugger = 17,
wrk源码

XAntiDenbug的检测逻辑与基本反调试

会设置线程标识。

XAntiDenbug的检测逻辑与基本反调试

把调试端口置空。

然后继续调用但是传递了错误的地址 如果没调试器应该返回错误 调试器可能处理全部设置为0 证明其存在


运行XAD_Initialize函数


XAntiDenbug的检测逻辑与基本反调试

添加调加校验crc32的初始值。

XAntiDenbug的检测逻辑与基本反调试

获取64位 ZwQueryInformationProcess的地址 然后减去ntdll64位模块地址 算偏移=0x000000000009d370。

XAntiDenbug的检测逻辑与基本反调试

XAntiDenbug的检测逻辑与基本反调试
XAntiDenbug的检测逻辑与基本反调试

XAntiDenbug的检测逻辑与基本反调试

这段代码是直接分析ntdl pe结构 然后计算这个偏移 得到代码 直接得到文件中的代码。

XAntiDenbug的检测逻辑与基本反调试

为了得到映射的下标 构造系统调用 代码目保证应用层的NtQueryInformationProcess正确。
并使用crc保护自己的代码。

然后调用XAD_ExecuteDetect进行检测


1 crc 检测 节表 我们的构造的系统调用 可以防止下代码段被修改


XAntiDenbug的检测逻辑与基本反调试


2 IsDebuggerPresent 检测当前是否正在被调试


XAntiDenbug的检测逻辑与基本反调试
XAntiDenbug的检测逻辑与基本反调试

fs:[30h]指向PEB的基址。

XAntiDenbug的检测逻辑与基本反调试

XAntiDenbug的检测逻辑与基本反调试

检测BeingDebugged的值。

3 CheckRemoteDebuggerPresent


XAntiDenbug的检测逻辑与基本反调试

实际上是查询NtQueryInformationProcess ProcessDebugPort。

XAntiDenbug的检测逻辑与基本反调试

如果DebugPort存在返回 true。

4 关闭一个无效句柄 如果被调试会进入异常


XAntiDenbug的检测逻辑与基本反调试
XAntiDenbug的检测逻辑与基本反调试

CloseHandle->NtClose 如果存在debuginfo与debugPort抛出异常 0xC0000008L被调试器接管。

5 使用DuplicateHandle进行检测


XAntiDenbug的检测逻辑与基本反调试

我这边追流程 好像还是DuplicateHandle…->ObDuplicateObject 调用了NtClose。

XAntiDenbug的检测逻辑与基本反调试


6 检测StrongOD


XAntiDenbug的检测逻辑与基本反调试


7 NtQueryInformationProcess检测 0x1E ProcessDebugObjectHandle


XAntiDenbug的检测逻辑与基本反调试

0x1E ProcessDebugObjectHandle

XAntiDenbug的检测逻辑与基本反调试

DbgkOpenProcessDebugPort

XAntiDenbug的检测逻辑与基本反调试

如果DebugPort未存在 返回 STATUS_PORT_NOT_SET 端口未设置。

8 内核二次覆盖的BUG来检测反调试


XAntiDenbug的检测逻辑与基本反调试

这个没看懂和上面有区别吗?

9 使用GetThreadContext检测 检测当前线程是否使用硬件断点


XAntiDenbug的检测逻辑与基本反调试


10 使用VEH检测


XAntiDenbug的检测逻辑与基本反调试

添加VEH 到最前面。

调用HardwareBreakpointRoutine触发异常 检测硬件断点。

XAntiDenbug的检测逻辑与基本反调试
XAntiDenbug的检测逻辑与基本反调试



XAntiDenbug的检测逻辑与基本反调试


看雪ID:tian_chen

https://bbs.kanxue.com/user-home-941362.htm

*本文为看雪论坛优秀文章,由 tian_chen 原创,转载请注明来自看雪社区

XAntiDenbug的检测逻辑与基本反调试


# 往期推荐

1、Frida-Hook-Java层操作大全

2、符号执行去除BR指令混淆

3、Frida 实战 KGB Messenger

4、打造柚子(yuzu)模拟器的金手指工具

5、APP sign签名参数分析

6、Chrome v8漏洞 CVE-2021-30632浅析


XAntiDenbug的检测逻辑与基本反调试

XAntiDenbug的检测逻辑与基本反调试

球分享

XAntiDenbug的检测逻辑与基本反调试

球点赞

XAntiDenbug的检测逻辑与基本反调试

球在看



XAntiDenbug的检测逻辑与基本反调试

点击阅读原文查看更多

原文始发于微信公众号(看雪学苑):XAntiDenbug的检测逻辑与基本反调试

版权声明:admin 发表于 2024年3月28日 下午6:00。
转载请注明:XAntiDenbug的检测逻辑与基本反调试 | CTF导航

相关文章