Abdul-Hakim88/Dragon--ANTI-ReverseEngineerable-PYTHON
GitHub: Abdul-Hakim88/Dragon--ANTI-ReverseEngineerable-PYTHON
Dragon 是一款用 C 编写的 Python 项目加固构建器,通过 PyArmor 混淆、Base64 嵌入、反调试启动器和 Nuitka 原生编译四阶段流水线,将 Python 工程打包为防逆向的独立 Windows exe。
Stars: 1 | Forks: 1
# Dragon — Python 加固构建器 v1.5
## 概述
Dragon 是一款用 C 语言编写的 Windows 工具,它接收一个 Python 项目目录,并通过四个阶段的 pipeline 生成一个独立的、加固的 `.exe` 文件:
1. **PyArmor 混淆** — 具有 license 强制执行的 bytecode 级别混淆
2. **ZIP + Base64 嵌入** — 混淆后的 payload 被归档并作为 Base64 blob 嵌入
3. **自解压 launcher** — 生成的 Python 脚本在临时目录中解码、验证并运行 payload
4. **Nuitka 编译** — launcher 被编译为原生 Windows 可执行文件
5. **UPX 打包** *(可选)* — 最后的 LZMA 压缩步骤
最终结果是一个单一的 `.exe` 文件,没有可见的 Python 源代码,没有可导入的 `.py` 文件,并具有活跃的 runtime 反分析检查。
## Pipeline
```
Python project directory
│
▼
┌───────────────────────┐
│ 1. Scan .py files │ ← Auto-detects third-party imports (non-stdlib)
│ for imports │
└───────────────────────┘
│
▼
┌───────────────────────┐
│ 2. PyArmor 6.8.1 │ ← --advanced 2 --restrict 1
│ obfuscation │ (advanced mode, restricted import)
└───────────────────────┘
│
▼
┌───────────────────────┐
│ 3. 7z ZIP + Base64 │ ← -mx=9 max compression
│ encode payload │
└───────────────────────┘
│
▼
┌───────────────────────┐
│ 4. Generate launcher │ ← Embeds Base64 blob + anti-debug checks
│ launcher_.py │ + runtime extraction + runpy execution
└───────────────────────┘
│
▼
┌───────────────────────┐
│ 5. Nuitka --onefile │ ← Compiles to native PE, no IL/bytecode exposed
│ + auto --include │ Dynamic --include-package for detected imports
└───────────────────────┘
│
▼
┌───────────────────────┐
│ 6. UPX LZMA pack │ ← Optional, --ultra-brute
│ (if on PATH) │
└───────────────────────┘
│
▼
.exe (self-contained, hardened)
```
## 反分析技术 (Runtime Launcher)
生成的 launcher 在提取 payload 之前嵌入了以下检查:
| 技术 | 方法 |
|---|---|
| Python trace hook 检测 | `sys.gettrace()` — 检测 `pdb`, `pydevd`, coverage hooks |
| 原生 debugger 检测 | 通过 ctypes 调用 `kernel32.IsDebuggerPresent()` |
| 可疑环境变量 | 检查 `PYCHARM_HOSTED`, `VSCODE_PID`, `PYDEV_CONSOLE_ENCODING` 等 |
| Sandbox DLL 检测 | `GetModuleHandleW` 扫描 Sandboxie, API Monitor DLL |
| 时间异常检测 | 测量 CPU 密集型循环;标记大于 0.5 秒的减速(模拟器指示) |
| 临时路径启发式检测 | 如果 `__file__` 路径包含 `temp`,则延迟执行 |
| 窗口标题扫描 | `EnumWindows` + 针对调试器/分析工具名称的标题匹配 |
如果任何检查被触发,进程将正常退出,不输出任何错误信息。
## Import 自动检测
Dragon 递归遍历项目目录,解析所有 `.py` 文件,并提取第三方 `import` / `from X import` 语句 — 过滤掉整个 Python 标准库(150 多个模块)。检测到的 package 将:
- 作为 `try/except import` stub 注入到 launcher 中
- 自动作为 `--include-package=` 标志传递给 Nuitka
这确保了编译后的 exe 能够打包所有必需的依赖项,而无需手动配置。
## 构建要求
| 要求 | 说明 |
|---|---|
| Windows 10/11 x64 | ctypes P/Invoke 调用仅限 Windows |
| Python 3.x | 必须在 `PATH` 中作为 `python` 存在 |
| PyArmor 6.8.1 | 如果缺失,则通过 pip 自动安装 |
| 7-Zip (`7z`) | 必须在 `PATH` 中 |
| Nuitka | `python -m pip install nuitka`;也会尝试 `py -3.9` 和 `py -3` |
| C 编译器 | Nuitka 必需(MSVC 或 MinGW) |
| UPX *(可选)* | 启用最后的 LZMA 压缩步骤 |
## 用法
```
Dragon_1_5.exe
```
提示:
1. **项目目录名称** — 包含您的 `.py` 文件的文件夹
2. **主入口文件** — 例如 `main.py`
输出:
- `pyarmor_/` — 混淆后的 Python 文件
- `pyarmor_payload_.zip` — 压缩后的 payload 归档
- `launcher_.py` — 生成的自解压 launcher
- `dist_/.exe` — 最终加固的可执行文件
## 版本历史
### v1.0
- 基本的 PyArmor 混淆 + Nuitka 编译 pipeline
- 手动指定 import
### v1.5 *(当前)*
- 自动扫描整个项目树中的第三方 import
- 为 Nuitka 动态生成 `--include-package` 标志
- 增强了反调试 launcher(时间、环境变量、窗口扫描、sandbox DLL)
- 改进了 PyArmor 路径解析(通过 `sys.path` 注入修复 `pytransform.pyd`)
- 在 `finally` 代码块中清理临时目录
- 在提取前进行 Base64 payload 完整性检查
## 参考
- [PyArmor 6 文档](https://pyarmor.readthedocs.io/en/v6.8.1/)
- [Nuitka 文档](https://nuitka.net/doc/user-manual.html)
- [Python 反调试技术](https://blog.quarkslab.com/protecting-a-python-codebase.html) — Quarkslab
- *Practical Malware Analysis* — Sikorski & Honig,第 17 章(Sandbox 规避)
标签:Nuitka, Python, 代码混淆, 反逆向工程, 客户端加密, 打包工具, 无后门, 端点可见性, 软件加壳, 逆向工具