bozopr00x/Onyx-Packer
GitHub: bozopr00x/Onyx-Packer
Onyx 是一款将 Python 脚本编译为原生二进制文件的打包器,通过多层加密与反调试机制有效保护源码并规避逆向分析。
Stars: 2 | Forks: 0
# Onyx Packer
Onyx 是一个 Python 到原生二进制的编译器,它将 `.py` 脚本转换为独立的 Windows 可执行文件。它应用了多层保护,包括 Cython 编译、XOR 加密、反调试检查以及 RunPE 加密阶段,以生成加固的输出二进制文件。
## 截图
```
您将收到提示选择模式:
```
[?] Target Python file: payload.py
[?] Select Mode (1/2) [1]: 1
```
或者将目标作为参数传递:
```
python src/Onyx.py payload.py
```
### 输出文件
| 模式 | 输出 | 描述 |
|--------|-------------------------------|----------------------------------------------|
| Native | `_native_protected.exe` | 带有 RunPE 存根的单体可执行文件 |
| Layered| `_protected.pyd` + `_run.exe` | 带有原生 loader 的加密 PYD 模块 |
## 保护模式
### Native 模式(推荐)
完整的编译流程:
```
Python Source
-> Cython (.pyx)
-> C Extension (.pyd / .obj)
-> Static Linked EXE (with embedded Python init)
-> RunPE Crypter Stub (final .exe)
```
这将生成一个单一的 `.exe` 文件。原始 Python 源代码被编译为 C 对象,与包含字符串混淆和反调试检查的原生 loader 链接,然后包装在 RunPE 进程空心化存根中。对于 Detect It Easy (DIE) 等分析工具,输出二进制文件显示为标准的 MSVC 编译可执行文件。
### Layered 模式
一种两阶段方法:
```
Python Source
-> Cython PYD (Layer 1)
-> XOR Encrypted + Embedded in C++ Loader (Layer 2)
-> Protected PYD + Native EXE Launcher
```
这将生成两个文件:一个加密的 `.pyd` 模块和一个原生 `.exe` 启动器。加密的 PYD 在运行时被解密到临时隐藏文件中,加载到 Python 解释器中,并安排在重启时删除。
## 架构
```
+-----------------+
| Python Source |
+--------+--------+
|
+--------v--------+
| Cython Compiler |
| (source -> .pyd) |
+--------+--------+
|
+-------------+-------------+
| |
+--------v--------+ +--------v--------+
| Native Mode | | Layered Mode |
+--------+--------+ +--------+--------+
| |
+--------v--------+ +--------v--------+
| Static Linker | | XOR Encrypt PYD |
| + Anti-Debug | | + C++ Loader |
| + String Obfusc | | + Anti-Debug |
+--------+--------+ +--------+--------+
| |
+--------v--------+ +--------v--------+
| RunPE Crypter | | EXE + PYD Pair |
| (Final .exe) | +--------+--------+
+--------+--------+
|
+--------v--------+
| Protected Output |
+-----------------+
```
### 反调试检查
以下检查被嵌入到多个阶段(Cython 守卫、C++ loader 和 RunPE 存根):
| 检查 | 方法 |
|-----------------------------|-------------------------------------|
| 内核调试器 | `IsDebuggerPresent()` |
| 远程调试器 | `CheckRemoteDebuggerPresent()` |
| Frida agent | `GetModuleHandleW("frida-agent.dll")` |
| Python trace | `sys.gettrace()` |
| 线程隐藏 | `NtSetInformationThread(0x11)` |
## 项目结构
```
Onyx-Packer/
├── run.pyw # GUI entry point
├── requirements.txt # Python dependencies
├── LICENSE # Project license
├── README.md # This file
└── src/
├── Onyx.py # Core compiler engine (CLI + API)
└── gui.py # GUI application (pywebview + HTML/CSS/JS)
```
### 源码分解
- **`Onyx.py`** -- 包含 `OnyxCompiler` 类及其所有编译逻辑:Cython 转译、XOR 加密、C++ 代码生成、MSVC 编译、静态链接以及 RunPE 加密构建器。
- **`gui.py`** -- 使用 pywebview 实现桌面 GUI,带有嵌入式 HTML/CSS/JS 界面。提供拖放文件加载、模式选择、实时控制台输出以及深色玻璃主题 UI。
## 配置
Onyx 不使用配置文件。所有行为通过编译时的模式选择来控制。
| 参数 | 默认值 | 描述 |
|-----------------|------------|--------------------------------------|
| 保护模式 | Native (1) | 单体 EXE 或 Layered EXE+PYD |
| 加密密钥 | 随机 | 每次构建生成的 32 字节密钥 |
| 构建 ID | 随机 | 用于唯一命名的 6 字节十六进制 token |
| 子系统 | WINDOWS | 执行时不显示控制台窗口 |
C++ 编译默认使用 `/O2` 优化和 `/MT` 静态链接。字符串混淆密钥源自编译时的 `__TIME__` 宏,这使得每次构建产生不同的加密字符串。
## 更新日志
### v1.0.0
- 首次发布
- 基于 Cython 的 Python 到原生编译
- 两种保护模式:Native(单体)和 Layered(EXE + PYD)
- 带有每次构建随机密钥的 XOR 加密
- 带有反调试检查的 C++ loader
- RunPE 进程空心化加密阶段
- 编译时字符串混淆(ADVobfuscator 风格)
- 支持拖放的桌面 GUI
- 用于脚本化构建的 CLI 界面
## 许可证
本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE)。
## 免责声明
此工具仅供授权的安全研究和合法的软件保护目的提供。作者不对任何误用负责。请使用时遵守所有适用的法律法规。
标签:Cython, C++开发, DNS 反向解析, DOM解析, GitHub Advanced Security, Python编译器, RunPE, SSH蜜罐, Windows可执行文件, 二进制转换, 云资产清单, 代码混淆, 加壳工具, 加密工具, 反调试, 安全加固, 安全意识培训, 恶意代码分析, 源码保护, 网络安全, 进程注入, 逆向工具, 逆向工程, 配置文件, 隐私保护