#define FLAG_FULLON (FLAG_CHECKSUM_NTOSKRNL | FLAG_CHECKSUM_CODESECTION |
FLAG_DETECT_DEBUGGER | FLAG_DETECT_HARDWAREBREAKPOINT)
_isArch64 代表是64位架构
_isWow64 代表是64位环境运行32位程序
NtSetInformationThread 设置线程的优先级
句柄-1 是进程的句柄 -2是当前线程的句柄
0x11 ThreadHideFromDebugger = 17,
wrk源码
然后继续调用但是传递了错误的地址 如果没调试器应该返回错误 调试器可能处理全部设置为0 证明其存在
运行XAD_Initialize函数
然后调用XAD_ExecuteDetect进行检测
1 crc 检测 节表 我们的构造的系统调用 可以防止下代码段被修改
2 IsDebuggerPresent 检测当前是否正在被调试
检测BeingDebugged的值。
3 CheckRemoteDebuggerPresent
实际上是查询NtQueryInformationProcess ProcessDebugPort。
4 关闭一个无效句柄 如果被调试会进入异常
5 使用DuplicateHandle进行检测
6 检测StrongOD
7 NtQueryInformationProcess检测 0x1E ProcessDebugObjectHandle
8 内核二次覆盖的BUG来检测反调试
9 使用GetThreadContext检测 检测当前线程是否使用硬件断点
10 使用VEH检测
调用HardwareBreakpointRoutine触发异常 检测硬件断点。
看雪ID:tian_chen
https://bbs.kanxue.com/user-home-941362.htm
# 往期推荐
球分享
球点赞
球在看
点击阅读原文查看更多
原文始发于微信公众号(看雪学苑):XAntiDenbug的检测逻辑与基本反调试