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 金鑰仍可能以 baked constant 形式輸出。在 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% 覆蓋率。核心、MCP 及端到端測試套件分別在 Linux、macOS 及 Windows 上的 Python 3.9 至 3.14 執行。
威脅模型刻意受限
社群版提高了隨意檢視原始碼的成本,但並不表示可提供不可逆的保護。Pro 版可加密選定的函式主體與儲存字串、將解密繫結至機器、密封程式碼物件,並清除追蹤資訊。控制執行中程序的攻擊者仍可使用動態分析或從記憶體中提取資料。本機 Pro 試用版也僅為便利控制,並非安全邊界;此限制已記錄並由測試固定。
如果需求是抵禦國家級攻擊,加密 VM 或硬體邊界才是更誠實的答案。如果需求是將 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.