6

Projectが接続して使用できる新しいコントロールサーフェスを構成するためのプラグインを管理するために、内部でPythonを使用する大規模な商用プロジェクト(別名Project)があると仮定します。

小さな情報漏えいがあり、プロジェクトのPython APIの一部が公開情報に漏えいし、プロジェクトのプラグイン読み込みメカニズムの一部として、基盤となるPython実装によって呼び出されるPythonスクリプトを作成することができました。

さらに、inspectモジュールと生の__dict__読み取り値を使用して、人々はProjectの基盤となるPython実装の主要部分を見つけることができました。

Pythonシークレットコードをシークレットに保つ方法はありますか?

Pythonのドキュメントをざっと見てみると、次のようにinspectモジュールのインポートを抑制する方法が明らかになりました。

import sys
sys.modules['inspect'] = None

それは問題を完全に解決しますか?

4

4 に答える 4

12

いいえ、これで問題が解決するわけではありません。誰かがinspectモジュールの名前を別の名前に変更してインポートすることができます。

あなたがやろうとしていることは不可能です。Pythonインタープリターは、バイトコードを取得して実行できる必要があります。誰かが常にバイトコードを逆コンパイルできるようになります。彼らは常にASTを生成し、変数名とクラス名を使用してコードのフローを表示できます。

このプロセスは、コンパイルされた言語コードでも実行できることに注意してください。違いは、アセンブリを取得することです。一部のツールはアセンブリからC構造体を推測できますが、詳細についてコメントするのに十分な経験がありません。

どのような特定の情報を隠そうとしていますか?アルゴリズムサーバー側を維持し、ソフトウェアをWebサービスにアクセスするクライアントにすることができますか?制御するマシンにコードを保持することが、コードを実際に制御し続ける唯一の方法です。ロックされたボックス、ボックスのキーを誰かに渡して、実行するためにボックスを開かなければならないときにボックスを開かないようにすることはできません。これは、DRMが機能しないのと同じ理由です。

そうは言っても、リバースエンジニアリングを困難にすることは可能ですが、クライアントが実行可能ファイルを持っている場合は不可能になることはありません。

于 2011-06-17T19:01:30.223 に答える
9

アプリケーションコードを絶対的な秘密にする方法はありません。

率直に言って、熱心で断固としたハッカーのグループが(蔑称的な意味ではなく、良い意味で)PlayStationのコード署名セキュリティモデルをクラックできる場合、アプリはチャンスに耐えられません。アプリを社外の誰かの手に渡したら、リバースエンジニアリングすることができます。

これで、難易度を上げるために努力したい場合は、独自の埋め込みPython実行可能ファイルをコンパイルし、不要なモジュールを取り除き、コンパイルされたPythonバイトコードを難読化して、デバッガーの場合にアプリの起動を拒否するマルウェアルートキットにラップすることができますが走っています。

しかし、あなたは本当にあなたのビジネスモデルについて考える必要があります。あなたの製品に情熱を注いでいる人々を脅威と見なす場合、彼らの経験を危険としてパーソナライズするためにあなたの製品をカスタマイズすることに時間と労力を費やすことをいとわない人々を見るなら、おそらくあなたはセキュリティへのアプローチを再考する必要があります。あなたがDRMビジネスに従事していない、または消極的な消費者からお金を搾り取るような同様のモデルを持っていると仮定して、ユーザーと情報を共有し、ユーザーが共同で製品を改善できるようにするアプローチを開発することを検討してください。

于 2011-06-17T19:25:19.360 に答える
4

Pythonシークレットコードをシークレットに保つ方法はありますか?

いいえ、ありません。

Pythonは特にリバースエンジニアリングが容易ですが、他の言語は、コンパイルされた言語であっても、リバースエンジニアリングを行うのに十分簡単です。

于 2011-06-17T19:02:16.767 に答える
1

ソフトウェアのリバースエンジニアリングを完全に防ぐことはできません。つまり、プログラムが構成するアセンブラ命令をいつでも分析できます。

ただし、Pythonの内部をいじるなどして、プロセスを大幅に複雑にすることができます。ただし、その方法にジャンプする前に、それを行うかどうかを評価することをお勧めします。通常、自分でコードをコーディングするよりも、コードを「盗む」ことは困難です(結局、コードを拡張できるようにするには、コードを完全に理解する必要があります)。ただし、純粋でわかりにくいPythonプラグインインターフェイスは、プログラムの周りにエコシステム全体を作成する上で不可欠であり、完全に設計されていない可能性のあるコーディング内部を誰かに覗いてもらうことの潜在的な欠点をはるかに上回ります。

于 2011-06-17T19:05:45.463 に答える