Rong Zhu

Pythonの難読化は通常、2つ目の問題を引き起こす。カジュアルな読者を遅らせる同じリネームされたシンボルは、
本番環境のクラッシュを開発者やそのコーディングアシスタントにとって無用なものにする。

そのトレードオフが、私が
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に独自のソルトが付与され、ランタイム時にバインドされたマシンからキーを導出する。
通常の構文は次の通り:

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文字列を暗号化し、復号をマシンにバインドし、コードオブジェクトをシールし、
トレースバックを除去することができる。実行中のプロセスを制御する熟練した攻撃者は、依然として
動的解析を使用したり、メモリから素材を抽出したりすることができる。ローカルのProトライアルも
利便性のための制御であり、セキュリティ境界ではない。その制限は文書化され、
テストによって固定されている。

要件が国家レベルの耐性である場合、暗号化されたVMまたはハードウェア
境界がより誠実な答えとなる。要件が、日常的なデバッグを可能に保ちつつPythonを
顧客に配布することである場合、それが私が提供しようとしているニッチである。

フィードバックが必要な点

次の作業は、推測的な機能ではなく実際の使用から来るべきだ。
候補は以下の通り:

  • ML/モデルサービング向けプリセット;
  • 署名付きビルドプロvenanceマニフェスト;
  • PyInstaller統合クックブック;
  • MCPツール記述の完全性検証。

特に興味があるのは、フレームワークが破綻する再現可能なケース、
マッピングワークフローが不便なケース、または文書化された脅威モデルが
誤っているケースである。Issuesとコードは
github.com/zhurong2020/pyobfusにある。

pyobfusを研究で使用する場合、プロジェクトにはバージョン非依存のZenodo
DOIがある: 10.5281/zenodo.20846053

開示: 私はpyobfusをメンテナンスしており、オプションのProエディションをライセンスしている。誰も
この投稿をスポンサーしていない。