WubbabooMark旨在检测软件调试器或特殊软件的使用痕迹,这些软件旨在通过篡改程序环境的各个方面来向被调试者隐藏调试器的存在。
如今典型的调试器集实际上仅限于一些最流行的解决方案,例如 Ghidra/IDA/OllyDbg/x32+x64dbg/WinDbg 等。有一种特殊的软件旨在“隐藏”调试器,使其不被调试者检测到。调试器检测通常由另一个软件类 - 软件保护程序(例如 Themida/VMProtect/Obsidium/WinLicense)使用。有时,抵消这些检测的软件被称为“反反调试”或其他任何东西。就我个人而言,我发现所有这些“反反”有点烦人,因为我们可以继续,它将是“反反反……”,所有的感觉都在中间的某个地方丢失了。
这种“反反”类软件实际上所做的是创建额外的检测向量,而一些最臭名昭著的部分为了能够工作而损害了操作系统组件的完整性和安全性。由于无法正确复制挂钩/模拟函数的原始行为,所有这些,绝对所有它们都会带来多个错误。听起来很可怕吗?并没有那么可怕,因为大多数该软件用户(他们称自己为“逆向者/破解者”)知道他们在做什么并且是故意这样做的......对吧?粗心地针对已知且经过良好逆向工程的商业保护程序实施了有针对性的反检测方法,从而创造了一堆新的工件。WubbabooMark 使用公开的、实际的和改进的方法来列出这些工件。
连续不断的 VMProtect 戏剧给我带来了很多乐趣,所以我无法远离它。由于 VMProtect 最近在 DGAF 许可下“开源”,我有机会仔细研究它的“反”东西。VMProtect 的底层内容清楚地表明作者遵循主流“场景”,由于商业产品和软件支持要求的限制,在某些方面几乎没有自己的创造力。直接系统调用,天堂之门?现在是哪一年了?然而,即使在 2018 年,重新发明这些东西似乎也注定会消亡一些所谓的“反反”软件。
无论如何,我们有一些调试器,一些“篡改工具/插件”等,让我们看看它们有多好!
系统要求
x64 Windows 10/11 及更高版本。
Windows 10 以下的任何系统均不受支持。嗯,因为这些操作系统已被微软和主流行业停产。真是一个惊喜!真是一个惊喜!忘记石器时代的系统并继续前进。
Windows 11 预览版/开发人员版本警告:由于该程序依赖于完全未记录的内容,因此程序不知道的最新版本可能会出现问题,从而导致误报检测或程序崩溃。使用风险自负。
实施的测试
(一个简短的列表,几乎每个实际上都做了更多的事情,但对于自述文件来说,技术细节太多了)
-
通用测试集
-
存在允许自定义内核签名者的 Windows 策略
-
通过 NtSystemDebugControl 行为检测 Windows 内核调试器。
-
检查是否启用了不必要的进程权限
-
进程环境块 (PEB) 加载器条目验证
-
必须对所有authenticode进行签名,并具有有效的名称
-
加载的内核模块验证
-
必须对所有authenticode进行签名,不包括内置黑名单中的任何内容
-
检测惰性数据篡改
-
列入黑名单的驱动程序设备对象
-
在对象管理器命名空间中查找设备对象名称并将其与黑名单进行比较
-
Windows 版本信息
-
检测l33t和其他BS变化
-
交叉比较 KnownDll 中多个系统模块的版本信息
-
将来自 PEB 的版本信息与通过 WMI 获取的数据进行交叉比较
-
验证 PEB 版本的系统调用 (syscall) 布局
-
验证系统版本号可接受的范围
-
正在运行的进程
-
检查进程名是否在黑名单中
-
将本机 API 查询结果与 WMI 数据进行交叉比较,以检测客户端进程中隐藏的内容
-
检测惰性 Native API 数据篡改
-
根据控制台主机信息检查客户端
-
应用程序兼容性 (AppCompat) 父信息
-
客户端线程
-
验证客户端线程指令指针是否属于可见模块
-
NTDLL 映射验证
-
使用多种方法映射 NTDLL 并交叉比较结果
-
检查程序堆栈
-
查找不属于任何已加载模块的代码
-
验证工作集 (WS) 信息
-
查询 WS 并遍历每个页面寻找可疑标志
-
使用 WS watch 并查找页面错误数据
-
执行句柄跟踪
-
为客户端启用句柄跟踪,执行诱饵调用并检查结果
-
检查 NtClose 不当行为
-
验证 NTDLL 系统调用
-
通过多种方式获取系统调用数据,使用并交叉比较结果
-
验证 WIN32U 系统调用
-
获取系统调用数据并比较结果
-
检测调试器的存在
-
具有间接系统调用的进程调试端口
-
使用间接系统调用处理调试句柄
-
使用间接系统调用处理调试标志
-
DR寄存器
-
用户共享数据信息
-
检查系统句柄转储
-
查找调试对象和调试句柄
-
检测惰性 Native API 数据篡改
-
检测具有可疑权限的客户端句柄
-
枚举 NtUser 对象
-
遍历 UserHandleTable 以查找所有者对客户端 API 调用不可见的对象
-
枚举 NtGdi 对象
-
遍历 GdiSharedHandleTable 以查找所有者对客户端 API 调用不可见的对象
-
枚举启动配置数据(需要客户端提升)
-
搜索选项启用:TestMode、WinPEMode、DisableIntegrityChecks、KernelDebugger
-
扫描进程内存区域
-
搜索具有不属于任何已加载模块的内存可执行标志的区域
程序可以配置您想要尝试的测试。进入菜单“探针 -> 设置”,应用更改并开始扫描。注意设置将保存到注册表并在程序加载时读取。
输出示例
-
干净扫描
-
Wubbaboos 发现扫描
项目地址:
https://github.com/hfiref0x/WubbabooMark
原文始发于微信公众号(Ots安全):WubbabooMark旨在检测软件调试器或特殊软件的使用痕迹
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论