6

実際、Dropbox は非常にうまくやっており、Python で作成されたデスクトップ アプリケーションを保護することができました。私はこれについて多くのことを調査しましたが、難読化よりも優れた解決策はありません。難読化はあまり安全な方法ではなく、コードがどこかにアップロードされているのを見ることになります。

Giovanni Bajo (PyInstaller の創設者)によるセッションを聞いたところ、 Dropbox は次のように機能すると彼は言いました。

  1. CPythonのインタープリターを再コンパイルすることによるバイトコードスクランブリング。これにより、標準のCPythonインタープリターはそれを実行できなくなり、再コンパイルされたcpythonインタープリターのみが実行されます。
  2. あなたがする必要があるのは、下の数字をシャッフルすることだけですdefine loadup 8

私は Python のソース コードを読んだことがないので、上記の言葉を完全に理解しているとは言えません。

専門家の声を聞く必要があります。また、再コンパイル後に、PyInstaller などの利用可能なツールを使用してアプリケーションをパッケージ化できるようになるとしたら?

アップデート:

Dropbox がこの種の難読化/変異をどのように行っているかについて調査したところ、次のことがわかりました。

Hagen Fritschによると、彼らはそれを 2 段階で行います。

  1. それらは、各 Python モジュールのコード オブジェクトのいくつかの値によってシードされた RNG と共に TEA 暗号を使用します。彼らはそれに応じて通訳を調整しました。

    a) モジュールを復号化し、

    b) 復号化されたコード オブジェクトへのアクセスを防止します。

    これは、ドロップボックスにすべてを復号化させ、組み込みのマーシャラーを使用してモジュールをダンプさせる簡単な方法でした。

  2. 使用される別のトリックは、オペコードの手動スクランブルです。残念ながら、これは半自動的にしか修正できなかったため、彼らの単一アルファベット置換暗号は、しばらくの間勝つという点で非常に効果的であることが証明されました.

私はまだこれがどのように行われるかについてのより多くの洞察を望んでいます.

4

1 に答える 1

2

これは の数字をシャッフルすることだと思いますinclude/opcode.h。ただし、そこには表示されません#define loadupが、古い Python バージョンを参照している可能性があります。私はこれを試していません。

これにより、ファイルが難読化.pycされ、通常のファイルを認識するツールで検査できなくなり.pycます。これにより、プログラム内のセキュリティ対策を隠すことができます。ただし、攻撃者は (たとえば) アプリ バンドルからカスタム Python インタープリターを抽出し、それを利用してファイルを検査できる可能性があります。(対話型インタープリターを起動し、モジュールに dir をインポートして使用することで調査を開始するだけです)

パッケージには、Python 標準ライブラリのいくつかのモジュールが確実に含まれていることにも注意してください。オペコードをシャッフルしたと攻撃者が推測した場合、標準モジュールのバージョンと通常のバージョンをバイト単位で比較し、その方法でオペコードを発見することができます。この単純な攻撃を防ぐには、モジュールを適切な暗号化で保護し、更新された質問で述べたように、インタープリターで復号化ステップを隠そうとします。これにより、攻撃者は機械コードのデバッグを使用して復号化コードを探すことを余儀なくされます。


このプロセスで復号化がどのように行われるのかわかりません...

モジュールをインポートするインタープリターの部分を変更し、そこに復号化 C コードを挿入します。

于 2013-02-21T08:32:13.827 に答える