vertigo-z/obsidian-protector

GitHub: vertigo-z/obsidian-protector

Obsidian 是一款用 C 语言编写的通用 PE 打包器和可执行文件保护器,支持通过 XOR 混淆和自定义 loader stub 保护 Windows 二进制文件,涵盖 AMD64 与 ARM64 架构。

Stars: 7 | Forks: 2

obsidian logo

obsidian community edition - universal pe packer
advanced, open-source obfuscation

obsidian badge tor native badge nostdlib badge

clearnettori2p

## 简介: obsidian 是一个用 C 语言编写的自定义通用 PE 打包器 / 可执行文件保护器。它旨在与一个 loader stub 配合使用,该 stub 负责解密并执行打包的 payload。 包含的 stub 使用带有移位的滚动 XOR 混淆,并且不包含任何反调试机制。此打包器 / stub 已经过测试,可在 putty.exe、strings.exe 上正常工作,它甚至可以打包自身,然后从打包状态再去打包其他可执行文件。 ARM64 和 AMD64 stub 的完整源代码均包含在此 repo 中。请随意修改它以满足您的需求或规避检测。 obsidian splashscreen ## 功能: **社区版-v1.3:** * 现已添加 ARM64 支持 * 改进的 XOR 算法 * 基于哈希的导入查找 * 编译好的 xorshift64+ stub (stubs/stub.bin) * 高熵 ASLR 支持 * stub 模板 (BYOS - bring your own stub) * 详尽的 debug 输出 (-DDEBUG & --debug 标志) * 随机化配置标记 * 清零可选头 * 安全密钥生成 * 校验和重新计算 * PE 段操作 * 进度条和颜色 obsidian logo ## obsidian pro: Static Badge obsidian pro 是 obsidian 社区版的升级版本,具备 SPECK 加密、aPlib 压缩和反调试 syscall。它使用开源的 obsidian [keykeeper](https://github.com/vertigo6622/obsidian-keykeeper) 进行许可授权,该组件位于 clearnet 到 tor 的代理之后,从而实现匿名的许可证管理。 **获取地址:**

clearnettori2p

**专业版功能:** * SPECK 128/128 CTR 加密 * aPlib 压缩 (--compress) * 资源加密 * 详尽的 syscall 反调试 (--ultra) * 反沙箱 * hmac 完整性检查 * [ollvm-22](https://github.com/vertigo6622/ollvm-22) 混淆 ## 待办事项: **社区版和专业版:** * pyinstaller 支持 * 保持更新以领先于 AV 检测 **商业版(未来):** * GUI * 防 dump 保护 * 许可证支持 / 硬件绑定 * 在线密钥分发 * 类 DRM 保护 ## 用法: `.\obsidian.ce.universal.exe program.exe packed.exe` putty debugging output detect-it-easy detect-it-easy ## ce 混淆引擎: ``` void obfuscate_data(uint8_t* data, size_t size, uint64_t key) { uint8_t key_xor_aa = (uint8_t)(key ^ 0xAA); uint8_t key_xor_aa_shr8 = (uint8_t)((key ^ 0xAA) >> 8); for (size_t i = 0; i < size; i++) { uint64_t subkey = key ^ (i * 0x9E3779B97F4A7C15ULL); subkey = (subkey ^ (subkey >> 30)) * 0xBF58476D1CE4E5B9ULL; subkey = (subkey ^ (subkey >> 27)) * 0x94D049BB133111EBULL; subkey = subkey ^ (subkey >> 31); uint8_t shift1 = (uint8_t)((i * 8) & 0x3F); uint8_t shift2 = (uint8_t)((24 + i * 8) & 0x3F); uint8_t shift3 = (uint8_t)((56 + i * 8) & 0x3F); uint8_t mask = (uint8_t)(subkey >> shift1) ^ (uint8_t)(subkey >> shift2) ^ (uint8_t)(subkey >> shift3); data[i] ^= mask; data[i] += key_xor_aa; data[i] -= key_xor_aa_shr8; } } ``` **混淆过程:** 1. 使用常量推导出 ADD 和 SUB 操作的值 2. 将“黄金比例”常量混合到子密钥中以增加熵 3. 生成移位和最终掩码变量 4. 对数据应用转换 ## stub 参考表: | | stub.bin | stub.Oz.bin | stub.obfuscated.bin | stub.full.obf.bin | stub-arm64.bin | | :--- | :--- | :--- | :--- | :--- | :--- | | 描述: | 无优化 | 激进的体积优化 | 控制流平坦化 + 指令替换 | 完全混淆(虚假控制流、拆分、平坦化、替换) | arm64 变体,-O1 优化 | | 大小: | 17kb | 13kb | 17kb | 57kb | 5kb | | 工具: | clang/llvm | clang/llvm + Oz | clang/llvm + Oz + [ollvm-22](https://github.com/vertigo6622/ollvm-22) | clang/llvm + Oz + [ollvm-22](https://github.com/vertigo6622/ollvm-22) | clang/llvm + O1 | | 注意: | 基础 | 最小 / 最快 | 均衡 | 最大 / 最慢 | 现已在 stubs/ 文件夹中提供 | ## 编译: **要求:** gcc: * 可在 `https://winlibs.com/` 获取的 mingw64 工具套件 * windbg 或其他调试器 * 用于 `clean.py` 的 python 解释器 llvm/clang: * llvm 22 工具链 * mingw64 工具套件 **arm64 要求:** * arm64 llvm/mingw64 工具链(包含在某些发行版中) ### amd64 命令: **步骤 1:构建 stub 对象文件** gcc: ``` .\gcc.exe stub.c -o stub.o -fno-asynchronous-unwind-tables -fno-ident -fno-stack-protector ``` llvm/clang: ``` clang --target=x86_64-pc-windows-gnu \ -I/llvm-mingw-20260311-ucrt-macos-universal/generic-w64-mingw32/include \ -masm=intel \ -fno-asynchronous-unwind-tables -fno-ident -fno-stack-protector -Oz \ -c stub.c -o stub.o ``` **步骤 2:链接并剥离 stub 二进制文件** 两者皆可: ``` .\ld.exe stub.o -o stub.exe -nostdlib --build-id=none -s --entry=_start ``` ``` .\objcopy.exe -O binary stub.exe stub.bin ``` ``` .\windres.exe resource.rc -o resource.o ``` **步骤 3:构建 obsidian ce** gcc: ``` .\gcc.exe obsidian.c resource.o -o obsidian.exe -lbcrypt ``` llvm/clang: ``` x86_64-w64-mingw32-clang \ -I/llvm-mingw-20260311-ucrt-macos-universal/generic-w64-mingw32/include -O1 \ obsidian.c resource.o -o obsidian.exe -lbcrypt ``` ### arm64 命令: **步骤 1:构建 stub 对象文件** ``` /llvm/llvm-mingw-20260311-ucrt-macos-universal/bin/aarch64-w64-mingw32-clang \ -fno-asynchronous-unwind-tables -fno-ident -fno-stack-protector -O1 \ -c stub-arm64.c -o stub-arm64.o ``` **步骤 2:链接并剥离 stub 二进制文件** ``` .\ld.lld.exe stub.o -o stub.exe --build-id=none -s --entry=_start ``` ``` .\objcopy.exe -O binary stub.exe stub.bin ``` ``` .\windres.exe resource.rc -o resource.o ``` **注意:** 资源文件步骤必须在 arm64 和 amd64 stub 均处于 .bin 格式之后进行 **步骤 3:构建 obsidian ce** gcc: ``` .\gcc.exe obsidian.c resource.o -o obsidian.exe -lbcrypt ``` llvm/clang: ``` x86_64-w64-mingw32-clang \ -I/llvm-mingw-20260311-ucrt-macos-universal/generic-w64-mingw32/include -O1 \ obsidian.c resource.o -o obsidian.exe -lbcrypt ```

Ask DeepWiki License used by repo Approximate number of clones Static Badge

arm64 supported amd64 supported donation button

标签:ARM64, PE打包器, 代码混淆, 免杀工具, 客户端加密, 执行体保护, 逆向工具