ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Pyarmor 8 与 9 路线图全解:从 Release Plan 逐版本读懂功能演进与源码实现

Pyarmor 8 与 9 路线图全解:从 Release Plan 逐版本读懂功能演进与源码实现
  • 开发工具
  • 应用安全

【免费下载链接】pyarmor

A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.

项目地址:https://gitcode.com/gh_mirrors/py/pyarmor
点击查看免费下载

本文基于仓库中的 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 服务器校验过期时间

这些规划在源码中均有对应实现证据:

  1. 新命令注册。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)。

  2. 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)。

  3. 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 系的收官版本,四项规划特性全部可在源码中找到落点:

  1. 专家用户可在pyarmor_runtime初始化中插入自己的 Python 代码——即 runtime hooks 机制,[runtime]段的hooks = hooks.py选项(src/cli/default.cfg);
  2. 新插件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);
  3. Runtime key 可混淆——对应obf_key_mode选项(0 不混淆 / 1 简单混淆,src/cli/default.cfg);
  4. 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.0src/cli/main.py、src/cli/default.cfg
Apple M1 / linux.aarch64 运行8.1docs/ReleasePlan.md 平台增量
自定义package_name_format、clear_frame_locals、bind interp、插件钩子8.2src/cli/default.cfg
--enable-themida、pyarmor-webui、Android/Alpine/FreeBSD/loongarch648.3src/cli/default.cfg、src/pyarmor-webui.py
Python 3.12 / 3.138.4 / 9.0.5docs/ReleasePlan.md
runtime hooks、post_script插件、obf_key_mode、Windows 构建 Apple Silicon8.5src/cli/generate.py
pyarmor man排障、CI License9.0src/cli/main.py、docs/ChangeLogs.9
MINI / ECC / VMC 模式9.1 / 9.2.2src/cli/default.cfg
Python 3.14 / 3.15 (a2)9.2docs/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.

项目地址:https://gitcode.com/gh_mirrors/py/pyarmor
点击查看免费下载
上一篇:PPT Master 动画系统完全指南:页面过渡、对象级动画与确定性 Morph 配对的执行契约
下一篇:三步解锁Wand游戏修改器专业版:本地增强工具完全指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进