Python 混淆通常会带来第二个问题:重命名符号
虽然能减缓普通读者的阅读速度,但也会让生产环境中的崩溃对开发者和他们的编码助手失去意义。
正是这种权衡促使我构建了
pyobfus,一个基于 AST 的 Python
混淆器,具备可逆调试路径。Apache-2.0 核心是公开的,商业版 Pro 源代码单独授权,两者均在同一个公共仓库中开发。
基本工作流程有意保持常规:
pip install pyobfus
pyobfus --check src/ --json
pyobfus src/ -o dist/ --save-mapping mapping.json
Enter fullscreen mode Exit fullscreen mode
分发的代码包含重命名的符号。映射文件留给开发者。当崩溃发生时:
pyobfus --unmap --trace error.log --mapping mapping.json --json
Enter fullscreen mode Exit fullscreen mode
结果会在堆栈返回 Claude Code、Cursor 或人工调试器之前恢复原始标识符。框架预设保留了 FastAPI、Django、Flask、Pydantic、Click 和 SQLAlchemy 的反射 API。单独的 pyobfus-mcp 包将风险扫描、配置、混淆和反向映射工作流作为机器可读的 MCP 工具暴露。
0.5.4 版本的变更
最新版本修复了 Pro 流程中的一个具体设备绑定漏洞。
在 0.5.4 之前,--bind-device 保护了 Selective Opacity L3 密钥,但 Runtime
String Vault 密钥仍可能以硬编码常量形式输出。在 0.5.4 中,每个
vault 都有自己的 salt,并在运行时从绑定机器派生其密钥。
常规语法为:
pyobfus src/ -o dist/ --level pro --vault --bind-device
Enter fullscreen mode Exit fullscreen mode
不存在 pyobfus build 子命令。我特别指出这一点,因为一些较早的发布说明使用了错误的简写,复制它会导致路径错误。
发布 CI 记录了 1,046 个通过的核心测试,1 个跳过,覆盖率 90%。 Core、MCP 和端到端套件分别在 Python 3.9 至 3.14 的 Linux、macOS 和 Windows 上运行。
威胁模型是有意限制的
社区版提高了随意查看源代码的成本;它并不声称提供不可逆的保护。Pro 版可以加密选定的函数体和 vaulted 字符串,将解密绑定到机器,密封代码对象,并清理 traceback。一个控制运行中进程的攻击者仍然可以使用动态分析或从内存中提取材料。本地 Pro 试用也仅是一种便利控制,而非安全边界;这一限制已记录并由测试固定。
如果需求是抵御国家级攻击,加密虚拟机或硬件边界是更诚实的答案。如果需求是向客户分发 Python 同时保持常规调试可用,这就是我试图服务的利基市场。
我需要反馈的内容
接下来的工作应该来自真实使用,而不是另一个推测性功能。
候选方向包括:
- ML/模型服务预设;
- 带签名的构建来源清单;
- PyInstaller 集成指南;
- MCP 工具描述的完整性验证。
我特别感兴趣的是可复现的案例,例如框架出现问题、映射工作流不友好,或记录的威胁模型不准确。问题和代码位于
github.com/zhurong2020/pyobfus。
如果您在研究中使用 pyobfus,该项目有一个与版本无关的 Zenodo DOI:10.5281/zenodo.20846053。
披露:我维护 pyobfus 并授权可选的 Pro 版本。没有人赞助此帖。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.