3

ジレンマがあります。基本的に、私は友人のグループに、グループ外の誰にも知られたくないソース コードを利用するプログラムを提供しました。ほとんどの難読化ツールはオブジェクトの名前を変更したり、コードをスクランブルしたりするだけなので、Java があらゆるレベルの難読化を行うのは絶対にひどいことは誰もが知っています。私はそのようなツールを使用しましたが、正直に言うと、プログラムのセキュリティ。

アプリケーションは、使用するサーバーにログインするためにユーザー名、パスワード、およびその他の識別子を必要とするため、ユーザーが JAR を保護するために一意の AES キーを生成できないかと考え始めていました。

基本的に、ある種のランチャーを実行してログインすると、ランチャー アプリはサーバーに AES キーを要求し、それを使用してサーバーから既にダウンロードされている保護された JAR を復号化します。キーは各ユーザーに対して完全に一意であり、サーバーはユーザーごとに異なる方法で JAR を暗号化する必要があります。

今、私はこれがどれほどクレイジーに聞こえるかを知っています。しかし、これは非常に低レベルのことなので、任意のタイプのストリームから JAR を復号化して実行する方法があるかどうかを知る必要があります。または、それが不可能な場合、ファイルを復号化して実行し、再暗号化するのが合理的でしょうか?

4

2 に答える 2

4

もちろん、Java バイトコードをオンザフライで復号化して実行することもできます。ASM などのバイトコード操作ライブラリは、新しいクラスを動的に作成することもできます。

しかし、率直に言って、何かが実際にコンピューター上で実行される場合、そのコードは知識のある人なら誰でも確実に利用できるようになります。特に Java は、ネイティブにコンパイルされた言語よりも JVM によってロードされるクラスのバイトコードへのアクセスがはるかに優れているため、さらに便利です。

理論的には、JNA/JNI とネイティブ共有ライブラリを 1 つまたは 2 つ使用することで、難読化をさらに進めることができます。しかし、断固たる攻撃者の手には、コードを完全に保護する手段はありません。アルゴリズムがどのように機能するかを理解するのに時間がかかるだけです。著作権侵害が心配な場合は、まあ、私たちは仮想化の時代にいます。キーを数回押すだけで、実際にコンピューターシステム全体を上から下まで複製できます-残りは...

実行可能な唯一の解決策は、Software as a Service を提供することです。そのアプローチにはすべての問題が伴いますが、それでも完全なセキュリティは得られません。

知的財産の保護についてそれほど心配している場合は、弁護士を雇って、何らかの形でアルゴリズムを公開することを検討してください。誰かがあなたのシステムでブラックボックス分析を行うのを止めることはなく、多くの場合、何かが可能であることを知っているだけで十分です。

明らかに技術的な性質のものではない問題に対する技術的な解決策を見つけようとするのはやめてください...

于 2013-01-01T17:50:46.830 に答える
0

私の答えは、サーバー情報を jar の外部に完全に保持することです。パラメーターまたは構成ファイルを使用して、その情報を取得する場所を指定します。次に、jar ファイルにはシークレットがありません。コードが実行されるサーバーだけがその情報を持っています。その後、jar 内のコードを実行できるユーザーのみが構成ファイルを読み取れるようにするなどの操作を行うことができます。

于 2013-01-02T06:51:24.940 に答える