インタプリタ言語で記述されたコードがクライアントに表示されないようにするにはどうすればよいですか?


16

Pythonでかなり複雑なインタープリタープログラムを構築しています。私はこのコードの大部分を他の目的で数か月間作業してきたので、クライアントが単純にコピーして販売しようとするのは望ましくありません。

問題は、クライアントが支払っているサーバーでスクリプトを実行する必要があるため、マシン上の特定のフォルダーをルートアクセスから保護する方法、または特定の使用者のみがディレクトリにアクセスできるようにする方法があります?OSはUbuntuです。


13
あなたとあなたのクライアントの間にはどんな種類の契約/契約がありますか?彼らはコードを所有しているのですか、それとも単にライセンスの使用をライセンスしているのですか?または、あなたはこれのどれも解決しませんでしたか?
マットb

2
Pythonソースをバイナリにコンパイルすることは可能だと思いました。このプロジェクトは可能ですか?その場合、代わりにバイナリを展開できます。
FrustratedWithFormsDesigner

私の意見では、ナイトクラッカーは正しい。適切なライセンスと契約は、技術的な対策ではなく、これらすべてを防ぐべきです。特に、いつでも何かを逆コンパイル/難読化することrootができ、すべてを行うことが許可されているためです。
ボビー

彼らは契約を破るか、彼らが泣くまであなたがそれらを訴えることができますライセンスあれば、それを他の方法を考えて
ヤコブボウヤー

9
誰もが自分のコードはかなりの価値があるといつも言っています。
カレブブラゼー

回答:


40

それをライセンスします。

本当に、それだけです!


6
私の最初の考えは、これを答えではなくダウンボットすることでした。ライセンスと契約書への署名はここに行く方法です。
ボビー

@ボビー:ほとんど唯一の道。別の方法は、楽しくて便利な新機能を非常に迅速に追加し続けることで、古いバージョンを盗むのは時間の無駄です。
-S.ロット

ライセンスとしてクリエイティブコモンズで十分ですか?

10
-1質問は、クライアントがコードを見るのを止める方法を尋ねますが、これはそうしません。人々は常にライセンスに従うとは限らず、訴えるために合法的に確実に知ることができない場合があります。
11

8
クライアントがPythonコードを見ることを止めることはできません。逆アセンブルするのは簡単すぎます。DRMは機能しません(実行できる場合は、分解できます)。したがって、唯一の答えは合法的なものです。そして、法律の施行を頼りにすると、技術基盤を複雑にすることで自分自身や顧客の生活を難しくする意味はありません。
-ncoghlan

10

すべてのファイルをバイトコードpycにいつでもコンパイルできます。そこからソースコードを生成できる逆コンパイラはありますが、深刻なことは何もありません。

ただし、それはプログラムのコードを読み取る機能を解決するだけです。唯一の方法を保護するには、ナイトクラッカーが言ったようにライセンスを付与する必要があります。コードをコンパイルしたとしても、マシンコードを言うために、あなたの作品がライセンスで保護されていない場合でも、意志に反して商用化できるためです

ボトムライン、バイトコードにコンパイルし、さらに重要なことはそれをライセンス


質問があります。バイトコンパイラは任意の変数名を使用しますか、それとも古い変数名を使用しますか?(外部モジュールはその名前空間に依存しているため、古いものを使用する必要があると思います)。

@Garrett:バイトコードには変数名が含まれています。逆アセンブルするときはまだ比較的読みにくい混乱です(このレシピの逆アセンブルを試してみてください)。また、(最近の)逆コンパイラはありません。

7

Cythonを使用します。これにより、プログラムをネイティブ実行可能ファイルとしてコンパイルできます。そうすれば、盗むのがずっと難しくなるはずです。

ディレクトリに関して、私があなたに与えることができる唯一のアドバイスは、あなたがあなたの許可が正しくセットアップされていることを確認することです。ACLはあなたの友人かもしれませんが、rootがファイルにアクセスするのを制限できるかどうかは100%確信できません。たとえできたとしても、rootは許可を変更するだけです。彼は根であり、神です。それがまさにこれらのことの仕組みなのです。

http://www.korokithakis.net/node/109


1

上記のユーザーが示したように、逆アセンブラーはコードを取り戻すことができますが、それでも非常に読みやすくはありません(少なくともオープンソースの逆アセンブラーはそうではありません)。

私はこれについて考えていましたが、この問題を解決できると思う方法の1つは(強制オープンコードを問題と呼ぶ場合)、自動リファクタリングスクリプトを記述することです。これは実際には非常に簡単です。スクリプトをモジュールにフィードするだけで、モジュール固有のすべての変数の名前が変更されます。これは、コンパイルされたファイルを解放するだけでなく、コードを難読化するのに非常に役立ちます。

PyPI上で検索を行う、私はこれを見つけた:http://pypi.python.org/pypi/pyfuscate/0.1。あなたはそれをチェックし、他の人はそれを好きで、報告してください:D

また、もちろんライセンスも必要です。


1

ライセンスもお勧めします。ライセンスに加えて、非対称キーアルゴリズムを使用してメインルーチンのソースコードを暗号化して、クライアントのマシンのみが実行できるようにします。ペアのキーの1つは、クライアントのマシンのハードウェア(例:ネットワークカードのシリアル番号)から取得したものです。ペアのもう一方のキーを使用して、プログラムの実行時にソースコードを復号化します。平文で唯一の成果物は復号化ルーチンであり、残りは暗号文であることに注意してください。

このようにして、クライアントは一見意味のないコードをコピーして貼り付けることができますが、他の場所では実行できません。ただし、私の提案は完全に防弾というわけではありません。インタープリターは復号化されたプログラムをメモリのどこかに保存するかもしれません。その後、ハッカーが実行中に平文でプログラムを取得する可能性があります。

フォルダーのルートアクセスを防止することに関しては、ルートがファイル/フォルダーへのアクセスを停止できないことに同意します。


これは難読化であり、適切なツールを使用すると、コードがプレーンテキストである時点が常に存在します。あなたのソリューションを倒すための簡単な方法は、単純に入れ替えることであろうruby/ python/ nodeカスタムプログラム鏡と実行APIとコードを出力します。
ジャモ

さらに、秘密キー(復号化用)は環境で利用できる必要があるため、攻撃者が利用できます。
Fixee

0

ここでライセンスが最良の答えです。とはいえ、なぜ彼らのギアで実行する必要があるのでしょうか?非常に重要な場合は、サービスを開始し、物事を中心に何らかのサービスAPIを構築して、人々があなたの知的財産を盗むことさえできないようにすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.