thyrn90/opaque

GitHub: thyrn90/opaque

Opaque 是一个C++反分析引擎,通过自定义VCPU和激进反调试技术保护软件免受逆向工程侵害。

Stars: 0 | Forks: 0

# 不透明 🛡️ [![语言](https://img.shields.io/badge/Language-C++-00599C.svg?style=flat-square&logo=c%2B%2B)]() [![许可证: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat-square)](LICENSE) [![状态](https://img.shields.io/badge/Status-Active-red.svg?style=flat-square)]() [![作者](https://img.shields.io/badge/Author-thyrn90-black.svg?style=flat-square)]() **面向独立开发者的零IAT反分析与自定义VCPU引擎** Opaque 是一种极具攻击性的、仅包含头文件的 C++ 防御机制,旨在保护独立游戏和软件免受逆向工程、调试和内存转储的侵害。 它不依赖标准的 API 调用,也不打算友好行事。Opaque 构建自己的执行环境,通过自定义字节码解释器隐藏其核心逻辑,并通过熔毁试图读取它的工具来主动惩罚分析尝试。 ## ⚙️ 功能库 * **自定义虚拟CPU (VCPU):** 核心逻辑完全隐藏在自定义字节码解释器后面。反编译器(如 Ghidra/IDA)只能看到一个处理随机十六进制值的无意义的 `switch-case` 循环,将3天的绕过工作变成3个月的噩梦。 * **零IAT 与 PEB 遍历:** Opaque 不使用导入地址表 (IAT)。它在运行时通过隐蔽地遍历进程环境块 (PEB) 来手动解析必要的 API(如 `CreateThread`、`VirtualAlloc`)。 * **激进的反调试(内存炸弹):** 如果检测到调试器(例如 x64dbg)或钩子,Opaque 会生成诱饵线程并分配一个填充了 `0xCC` (INT3) 的巨大 500MB `PAGE_READWRITE` 内存块。然后,它故意触发访问冲突 (`0xC0000005`),有效地锁死或崩溃分析工具,并破坏调试会话。 * **延迟混乱:** 为了从心理上挫败分析师,Opaque 不会在检测到后立即崩溃。它会休眠一个随机时长后再触发有效载荷,使得从时间顺序上追踪确切检测点变得不可能。 * **反转储:** 如果环境是干净的,Opaque 会从内存中擦除正在运行的进程的 DOS (`MZ`) 和 NT (`PE`) 头,导致内存转储工具(如 Scylla)立即失败。 ## 📸 视觉证明(熔毁序列) Opaque 对调试器并不友好。当它检测到活动的分析会话时,会启动一次彻底的熔毁。这是一个 x64dbg 会话被逐步摧毁的过程。 ### 1. 陷阱触发(异常产生) 在 Opaque 检测到调试器的那一刻,它强制触发断点异常以夺取控制权。 ![断点触发](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e1076df016140018.png) ### 2. 诱饵群攻(幽灵线程) 在崩溃之前,Opaque 生成多个运行无限垃圾数学循环的诱饵线程,以混淆分析师的线程视图。 ![诱饵线程生成](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/51270e8545140022.png) ### 3. 执行(致命访问冲突) Opaque 故意向一个 NULL 指针 (`0x00000000`) 写入数据,迫使操作系统强制终止进程,将其从调试器手中剥离。 ![CPU视图访问冲突](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/9b76a54e54140027.png) ### 4. 内存炸弹(资源耗尽) 当调试器崩溃时,Opaque 早已分配并填满了一个巨大的内存块,以瘫痪内存扫描器。 ![任务管理器500MB炸弹](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/83b6dd1dc2140033.png) ### 5. 事后分析(调试器日志) x64dbg 事件日志记录的进程最终状态。 ![调试器日志视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/27dbdeaf48140039.png) ### Ghidra 盲区(零IAT与混乱代码) ![Ghidra 反编译失败](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ba1256d4da140047.png) ## 🚀 快速开始(集成) Opaque 被设计为可以轻松集成到任何现有的 C++ 项目中。无需复杂的构建系统或外部依赖。 1. 将 `opaque.hpp` 文件直接放入你项目的源代码目录中。 2. 在主入口文件中包含该头文件。 3. 作为应用程序的**第一个执行步骤**,调用初始化宏。 ``` #include #include "opaque.hpp" // 1. Include the defense header int main() { // 2. Initialize Opaque before anything else. // It will spawn a detached Ghost Thread and guard the background. OPAQUE_INIT(); // 3. Your actual game or application logic follows here. std::cout << "Application is running securely." << std::endl; std::cin.get(); return 0; } ``` ## 变异(开发者关键步骤) 在未修改核心特征的情况下,切勿直接将 Opaque 用于生产环境。如果你使用公开的未修改版本,逆向工程师将很快为其创建自动脱壳工具。 在编译发布版本之前,打开 opaque.hpp 并修改以下内容: 更改 XOR_KEY:将默认的 0x7381 替换为你自己的唯一十六进制密钥。 重新加密字符串:如果你更改了内部字节数组解密密钥(例如 `char k = 0x13;`),则必须使用你的新密钥手动对目标字符串(如 kernel32.dll、VirtualAlloc 等)进行 XOR 加密,并更新代码中的十六进制数组。 修改 VCPU 指令集:更改 `_OPCODES` 枚举中的十六进制值,并打乱 `_BYTECODE` 数组的顺序。这将为你的应用创建一个独特的指令集架构,使通用的静态分析工具失效。 ## 🧪 测试状态与贡献者征集 Opaque 在裸金属 Windows 环境下,针对用户模式 (Ring-3) 调试器、内存转储器和标准分析工具(x64dbg、Ghidra、ScyllaHide)进行了广泛测试,并被证明是致命的。 **关于高级虚拟机和超级监视器的说明:** 虽然针对 VM/超级监视器检测(CPUID、时序检查)的核心逻辑已经实现,但尚未针对 **HyperHide** 或自定义的嵌套恶意软件分析实验室等深层 Ring-0 规避工具进行严格的压力测试。 如果你拥有专用的逆向工程实验室,我邀请你测试 Opaque。Fork 该仓库,测试虚拟机指纹识别的限制,并欢迎提交 Issue 或 Pull Request。让我们一起使这面盾牌坚不可摧。 * **关于游戏引擎集成的说明:** Opaque 目前是一个实验性的概念验证 (PoC),主要在独立的 C++ 二进制文件上进行测试。将其直接集成到重量级商业引擎(Unity/Unreal)中可能会与其内置的崩溃报告器冲突,或导致 VCPU 性能开销。强烈建议在活跃的渲染循环之外初始化 Opaque。 * **关于桌面/UI 应用的说明:** 虽然 Opaque 在标准、原生的 C++ 桌面应用程序上运行流畅且开销接近于零,但对于现代 UI 框架则需谨慎。将 Opaque 集成到多进程架构(如 Electron/CEF)或严格沙箱化的环境(如 Windows UWP)中,可能会因其激进的头部擦除和内存操作而破坏进程间通信 (IPC),或与内部的 JIT 内存管理器冲突。 ## ⚖️ 许可证 该项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。
标签:API手动解析, C++, DNS 反向解析, DOM解析, PEB解析, 代码混淆, 内存保护, 反分析, 反编译防护, 反调试, 反逆向工程, 字节码解释器, 安全引擎, 崩溃触发, 延迟执行, 恶意软件防护, 数据擦除, 游戏保护, 独立开发者, 端点可见性, 虚拟机技术, 调试器检测, 软件加密