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, 代码混淆, 反逆向工程, 客户端加密, 打包工具, 无后门, 端点可见性, 软件加壳, 逆向工具