-2

.pyc ファイルを逆コンパイルすることが可能です: Decompile Python 2.7 .pyc

c++ -> exePython ファイルを「コンパイル」して、バイナリ ファイルのような人間が読めないコードを作成することはできますか? ..平文の .py や非常に簡単に復元できる.pyc ファイルとは異なりますか? (力ずくで割れても構わない)

4

2 に答える 2

8

Python は非常に動的な言語であり、さまざまなレベルのイントロスペクションをサポートしています。そのため、Python バイトコードの難読化は山積みの作業です。

さらに、組み込みの Python インタープリターは、製品に同梱するバイトコードを実行できる必要があります。また、インタープリターがバイトコードにアクセスできる必要がある場合は、他のすべての人もアクセスできます。暗号化は役に立ちません。自分でバイトコードを復号化する必要があり、他の人はメモリからバイトコードを読み取ることができるからです。難読化はデフォルトのツールを難しくするだけであり、使用が不可能になるわけではありません。

そうは言っても、アプリケーションの Python バイトコードを読むのを非常に難しくするために必要なことは次のとおりです。

  • すべての python opcode 値を新しい値に再割り当てします。インタプリタ全体を再配線して、異なるオペコードに異なるバイト値を使用します。

  • できる限り多くのイントロスペクション機能をすべて削除します。関数にはクロージャが必要であり、codeobjects には定数が必要ですが、たとえば、コード オブジェクトの locals リストは地獄です。関数を中性化しsys._getframe()、トレースバック情報をスラッシュします。

これらの両方の手順では、Python インタープリターがどのように機能するか、および Python オブジェクト モデルがどのように適合するかについての深い知識が必要です。解決が困難なバグが発生することは間違いありません。

最後に、これが価値があるかどうかを自問する必要があります。決心したハッカーは、バイトコードを分析し、頻度分析を行ってオペコード テーブルを再構築し、プログラムにさまざまなオペコードを供給して何が起こるかを確認し、すべての難読化を解読することができます。変換テーブルが作成されると、バイトコードの逆コンパイルは簡単で、コードの再構築もすぐに完了します。

バイトコード ファイルが変更されないようにすることだけが目的の場合は、.pycファイルにチェックサムを埋め込み、起動時にチェックサムをチェックします。一致しない場合は読み込みを拒否します。誰かがあなたのバイナリにパッチを当てて、チェックサム チェックを削除したり、チェックサムを置き換えたりするでしょうが、改ざんからトークンを保護するために少なくともある程度の労力を費やす必要はありません。

于 2013-02-26T11:25:28.193 に答える
3

復号化キーがどこかに存在する必要があるため、コード暗号化を使用するすべてのシステムが攻撃される可能性があります。

そのため、それは単に努力の問題です。

于 2013-02-26T11:08:12.470 に答える