- 开发工具
- 应用安全
【免费下载链接】pyarmor
A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.
本文基于仓库中的 docs/ReleasePlan.md 展开,完整梳理 Pyarmor 8 与 9 两个大版本中每个小版本规划了什么功能、当前处于什么状态,并结合src/cli命令行源码与 src/cli/default.cfg 配置基线逐项印证这些规划特性的真实实现,帮助你在选型 Pyarmor 版本、评估某个功能(如 BCC/RFT/MINI/ECC 模式、NTP 过期检查、package_name_format等配置)可用版本时快速找到依据。
文档定位:Release Plan 记录了什么
Release Plan 是 Pyarmor 8+ 的"计划特性清单",其核心宗旨一句话概括:Pyarmor 8 与 9 按小版本滚动交付特性,8 系主打架构重写与不可逆混淆,9 系主打 CI/CD 适配与混淆模式细分。文档按8.0 → 8.1 → … → 8.5 → 9.0 → 9.1 → 9.2/9.2.2 → 9.3 → 9.4逐版本列出特性与状态(released / developing / not start),并附带"因 ECC/VMC 模式引入而被取消的功能"清单——这是判断某个特性最终命运的关键依据。
从当前仓库配置可以确认仓库处于路线图哪个位置:src/cli/default.cfg 中声明的版本号为
major = 9 minor = 2 patch = 7 cli.core = 8.1.2 ; pyarmor.cli.core 兼容核心版本 mini.core = 3.0 ; 运行 MINI/VMC/ECC 模式脚本所需的最小 core 版本即仓库当前基线是 9.2.x 阶段(9.2与9.2.2的特性均已落地,9.3开发中),与 Release Plan 的状态标注完全一致。
Pyarmor 8 系列:架构重写与不可逆混淆
8.0:新命令体系与 BCC/RFT 模式(released)
8.0 是整个 8 系的地基版本,ChangeLogs.8 明确说明其为"重写"(rewritten),并且旧命令(obfuscate、licenses等)只做 bug 修复、不再加新特性。8.0 的规划特性为:
- 支持 Python 3.11
- 引入 3 个新命令:
gen、cfg、reg - 引入 BCC Mode(将 Python 函数转 C 函数,不可逆混淆)
- 引入 RFT mode(Refactoring,重构式混淆,不可逆)
- 运行期错误消息本地化/国际化
- 通过 NTP 服务器校验过期时间
这些规划在源码中均有对应实现证据:
新命令注册。src/cli/main.py 中的子命令注册段依次挂载了
gen_parser、reg_parser、env_parser、init_parser、build_parser、cfg_parser、man_parser;gen解析器文档串直接给出三种用法(src/cli/main.py):pyarmor gen <options> <scripts> # 生成混淆脚本及全部运行时文件 pyarmor gen key <options> # 只生成 runtime key pyarmor gen runtime <options> # 只生成 runtime package处理逻辑见
cmd_gen(src/cli/main.py):先校验许可证版本,再把命令行选项 push 进配置上下文,创建Builder并安装插件;cfg命令则通过Configer对 local/global 两个域的配置文件做run/reset(src/cli/main.py),这正是pyarmor cfg package_name_format "xxxx"这类写法背后的实现;reg命令负责注册 regfile、生成 group device、查询当前 license 信息(src/cli/main.py)。BCC/RFT 模式开关。src/cli/default.cfg 的
[builder]段提供enable_bcc、enable_rft、enable_jit、enable_vmc四个模式开关(默认均为 0),运行时经 src/cli/context.py 的enable_bcc/enable_rft属性读取;BCC 模式还带有独立的[bcc]配置段(unsupported_functions、unsupported_nodes、trace_lineno、call_function_ex等,src/cli/default.cfg)。NTP 过期检查。src/cli/default.cfg 的
[runtime]段定义了nts选项,支持ntp 协议主机、http://前缀主机、特殊值local,以及逗号分隔的候选主机列表与and,前缀(全部校验取最大时间戳),默认nts = local、nts_timeout = 3。
8.1:ARM64 平台扩展(released)
8.1 补齐了darwin.aarch64(Apple M1)与linux.aarch64,并让windows.x86、linux.x86、linux.armv7在不启用 BCC 模式下可运行。从 src/cli/default.cfg 的平台段结构看,各平台的 BCC 编译配置是按os.arch.bcc分节维护的——早期只覆盖 x86_64 平台,8.1 之后linux.aarch64.bcc、darwin.aarch64.bcc等段逐步补齐,这与路线图的增量节奏吻合。
8.2:文档、Group 授权与插件体系(released 2023-05-10)
8.2 的规划项是后续使用频率很高的一批特性:
- 完整文档(对应仓库中
docs/目录下的 tutorial/how-to/reference 结构) - Group license(多台机器共享一个授权)
- 插件与钩子(plugins and hooks)支持
- BCC 模式扩展到
windows.x86、linux.x86、linux.armv7 - 非试用版可用
pyarmor cfg package_name_format "xxxx"自定义运行时包名 - 可用
pyarmor cfg clear_frame_locals 1清空帧局部变量 - 打包安全加固:保护系统包、绑定解释器(bind interp)、检测调试器
源码印证:
package_name_format是 src/cli/default.cfg 中[runtime]段的真实选项,默认pyarmor_runtime_{suffix},{suffix}会被替换为平台/版本后缀;clear_frame_locals在 src/cli/default.cfg 中定义为"wrap 模式下清空frame.f_locals,非 wrap 模式无意义",默认 0;- bind interp 对应
[runtime]段注释掉的interps =选项(D与S:符号规则,src/cli/default.cfg); - 默认插件即写在配置里:
plugins = CodesignPlugin DarwinUniversalPlugin(src/cli/default.cfg),用于 Darwin 代码签名场景; - 插件协议定义见 docs/reference/environments.rst,其中
post_script是可选方法(后文 8.5 正式新增的钩子)。
8.3:Themida、WebUI 与更多平台(released 2023-08-01)
- 支持
--enable-themida:对应 src/cli/default.cfg 的enable_themida = 0("Use Themida to protect runtime package in windows"),gen解析器中也注册了同名开关(src/cli/main.py); pyarmor-webui:仓库根目录下的 src/pyarmor-webui.py 即该 Web 版前端入口;- 多 Python 版本支持;
- 新增平台:Android、Alpine Linux(musl-c/docker)、FreeBSD;新架构
loongarch64。配置文件中已能看到[android.x86_64.bcc]、[alpine.aarch64.bcc]、[freebsd.x86_64.bcc]等段(src/cli/default.cfg);loongarch64的 runtime 扩展包解压路径在 docs/reference/solutions.rst 的排障示例中出现(pyarmor/cli/core/linux/loongarch64/pyarmor_runtime.so); - Group license 支持"使用默认 bridge 网络且未深度定制"的无限数量 Docker 容器——这是授权侧策略,代码层面通过 group 设备标识(
group_device_flag = 22,src/cli/default.cfg)与cmd_reg中的generate_group_device路径支撑(src/cli/main.py)。
8.4:Python 3.12(released 2023-10-18)
单特性版本:适配 Python 3.12。配置注释中已体现 3.12 的行为变化,例如 wrap 模式说明(src/cli/default.cfg):"Since Python 3.12, '2' is same as '1', both of them use full wrap mode"。
8.5:专家钩子与跨平台构建(released 2024-03-08)
8.5 是 8 系的收官版本,四项规划特性全部可在源码中找到落点:
- 专家用户可在
pyarmor_runtime初始化中插入自己的 Python 代码——即 runtime hooks 机制,[runtime]段的hooks = hooks.py选项(src/cli/default.cfg); - 新插件
post_script:在每个脚本混淆完成后回调,用于二次改写混淆产物。调用点在 src/cli/generate.py:构建流程收集所有带post_script属性的插件,对每个资源调用plugin.post_script(ctx, r, source),若返回非空则用返回值替换源码(并行构建路径 src/cli/generate.py 同样处理);插件协议在 docs/reference/environments.rst 中有正式签名说明post_script(ctx, res, source); - Runtime key 可混淆——对应
obf_key_mode选项(0 不混淆 / 1 简单混淆,src/cli/default.cfg); - Apple Silicon 扩展不再打补丁,使 Windows 用户也能为 Apple Silicon 构建混淆脚本——对应
patch_extension选项(0 保持代码签名、1 把 runtime key 嵌入扩展,src/cli/default.cfg)。
Pyarmor 9 系列:CI/CD 适配与混淆模式细分
9.0:pyarmor.man、CI License 与 Python 3.13(released 2024-11-10)
- Pyarmor.man 包:快速查询"出问题时的解决方案"。命令实现见
cmd_man(src/cli/main.py):优先导入pyarmor.man,未安装时提示并自动pip install -U pyarmor.man,最终执行python -m pyarmor.man.shell;使用场景在 docs/questions.rst 中反复强调(报 issue 前先用pyarmor man自查); - Pyarmor CI License:专为 CI/CD pipeline 设计的特殊授权。docs/ChangeLogs.9 详细说明了 9.0 在 CI/CD 上的大变化:9 起 Pro License 不能用于 CI/CD pipeline,CI License 按年付费且不能用于本地机器,Basic 可用但需额外申请 CI regfile;具体两种接入方式(Direct/Indirect)见 docs/how-to/ci.rst;
- Python 3.13 支持(自 v9.0.5 起)。
9.1:MINI 模式(released 2025-02-24)
MINI 被定义为"a simple RFT mode, the goal is high performance after obfuscation",即在 RFT 重构混淆的基础上做性能优先的简化形态。仓库配置中mini.core = 3.0(src/cli/default.cfg)注释说明它"是运行 MINI、VMC 或 ECC 模式脚本所需的最小 core 版本"——三个新模式共享同一套 mini 运行时核心。
9.2 与 9.2.2:ECC/VMC 模式与 Python 3.14/3.15(released)
9.2(2025-10-31):支持 Python 3.14 与 3.15 (a2);
9.2.2(2025-12-8):引入两个更轻量的"半 BCC"模式:
- ECC mode:mini BCC mode,只把函数体的一部分转成 C 代码;
- VMC mode:simple ECC mode,把函数体转成 VM 指令而非真正的 C 代码。
仓库中
enable_vmc开关已就位(src/cli/default.cfg,当前注释标注"Not implemented"),说明该开关是为 9.2.2 起的 VMC 模式预留的统一模式控制面。
Release Plan 还特别列出了因 ECC/VMC 引入而被取消的四个规划项,对使用者判断"某能力是否还会来"很重要:
- BCC 模式尽可能转换不支持的节点类型(cancelled)
- 专家用户自定义 BCC 生成的 C 源码(cancelled)
- BCC 模式跨平台支持(cancelled,"may not if too complex")
- 混淆扩展模块
pyarmor_runtime中的字符串常量(cancelled)
9.3(developing)与 9.4(not start)
- 9.3 开发中:完整测试用例;细化 RFT 模式以改进大脚本性能(对齐 MINI 模式);
pyarmor build支持--pack把项目打包成单个可执行文件;RFT 模式支持模块名重构。关于打包能力,当前仓库的gen解析器已提供--pack(onefile/onedir模式,src/cli/main.py),且校验逻辑限制--pack与--no-runtime、--use-runtime、-i/--prefix互斥(src/cli/main.py);build命令的 docstring 也提到"Option--packmay be still got from command line"(src/cli/command.py)。从源码结构看,打包主流程在gen中已打通(args.pack分支调用find_packer,src/cli/main.py),9.3 计划是把该选项进一步对齐到pyarmor build; - 9.4 未开始:面向用户的学习体系(Learning system)。文档同时给出时间预期:"Pyarmor features will be stable in 2025"。
版本选型速查
| 需求 | 最低可用版本 | 仓库依据 |
|---|---|---|
新命令gen/cfg/reg、BCC/RFT、NTP 过期校验 | 8.0 | src/cli/main.py、src/cli/default.cfg |
| Apple M1 / linux.aarch64 运行 | 8.1 | docs/ReleasePlan.md 平台增量 |
自定义package_name_format、clear_frame_locals、bind interp、插件钩子 | 8.2 | src/cli/default.cfg |
--enable-themida、pyarmor-webui、Android/Alpine/FreeBSD/loongarch64 | 8.3 | src/cli/default.cfg、src/pyarmor-webui.py |
| Python 3.12 / 3.13 | 8.4 / 9.0.5 | docs/ReleasePlan.md |
runtime hooks、post_script插件、obf_key_mode、Windows 构建 Apple Silicon | 8.5 | src/cli/generate.py |
pyarmor man排障、CI License | 9.0 | src/cli/main.py、docs/ChangeLogs.9 |
| MINI / ECC / VMC 模式 | 9.1 / 9.2.2 | src/cli/default.cfg |
| Python 3.14 / 3.15 (a2) | 9.2 | docs/ReleasePlan.md |
需要注意的前提:新命令体系只支持 Python 3.7+(旧命令兼容 2.7~3.10 但停止加特性,见 docs/ChangeLogs.8);平台名采用os.arch组合(如darwin.aarch64、android.armv7),完整清单见 docs/reference/concepts.rst;9 起 CI/CD 授权策略变化较大,升级前建议阅读 docs/ChangeLogs.9 与 docs/how-to/ci.rst。
小结
docs/ReleasePlan.md 以极简的清单形式承载了 Pyarmor 8→9 的全部路线:8 系完成架构重写、BCC/RFT 不可逆混淆与多平台铺开,9 系则用 CI License 解决流水线授权问题,并用 MINI/ECC/VMC 三种"性能导向"模式细化混淆档位。结合 src/cli/default.cfg 的模式开关与[runtime]/[bcc]配置段、src/cli/main.py 的命令注册与cmd_man实现、以及 src/cli/generate.py 的post_script调用点,可以确认仓库当前基线(9.2.7)与路线图标注的状态一一对应;后续关注点即为 9.3 的pyarmor build --pack与 RFT 大脚本性能优化。
- 开发工具
- 应用安全
【免费下载链接】pyarmor
A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.
相关推荐
BallonsTranslator 版本演进史:从 v1.0.0 到 v1.3.34 的功能路线图与实现解读
BallonsTranslator 版本演进史:从 v1.0.0 到 v1.3.34 的功能路线图与实现解读 BallonsTranslator 是一款基于深度
AI 应用计算机视觉图像处理NLP桌面应用GitHub Desktop 路线图解读:从 1.5 到 3.0 的核心功能演进与源码实现
GitHub Desktop 路线图解读:从 1.5 到 3.0 的核心功能演进与源码实现 GitHub Desktop 的 路线图文档 https://lin
后端图像处理release-please 版本演进全史:从 CHANGELOG.md 解读 v1 到 v17 的技术路线图
release please 版本演进全史:从 CHANGELOG.md 解读 v1 到 v17 的技术路线图 导读:本文以 release please 仓库
开发工具CI/CDDevOps
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考