thyrn90/opaque
GitHub: thyrn90/opaque
Opaque 是一个C++反分析引擎,通过自定义VCPU和激进反调试技术保护软件免受逆向工程侵害。
Stars: 0 | Forks: 0
# 不透明 🛡️
[]()
[](LICENSE)
[]()
[]()
**面向独立开发者的零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 检测到调试器的那一刻,它强制触发断点异常以夺取控制权。

### 2. 诱饵群攻(幽灵线程)
在崩溃之前,Opaque 生成多个运行无限垃圾数学循环的诱饵线程,以混淆分析师的线程视图。

### 3. 执行(致命访问冲突)
Opaque 故意向一个 NULL 指针 (`0x00000000`) 写入数据,迫使操作系统强制终止进程,将其从调试器手中剥离。

### 4. 内存炸弹(资源耗尽)
当调试器崩溃时,Opaque 早已分配并填满了一个巨大的内存块,以瘫痪内存扫描器。

### 5. 事后分析(调试器日志)
x64dbg 事件日志记录的进程最终状态。

### Ghidra 盲区(零IAT与混乱代码)

## 🚀 快速开始(集成)
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解析, 代码混淆, 内存保护, 反分析, 反编译防护, 反调试, 反逆向工程, 字节码解释器, 安全引擎, 崩溃触发, 延迟执行, 恶意软件防护, 数据擦除, 游戏保护, 独立开发者, 端点可见性, 虚拟机技术, 调试器检测, 软件加密