27

私は知っています、多くの同様の質問がここで尋ねられました。コンパイルされたJavaクラスを保護できるかどうかは尋ねていません。明らかに「いいえ、できません」と言うからです。Javaクラスを逆コンパイルから保護するための最もよく知られている方法は何ですか?この分野の研究論文や学術論文をご存知の場合はお知らせください。また、いくつかの方法やソフトウェアを使用したことがある場合は、経験を共有してください。どんな種類の情報も非常に役に立ちます。ありがとうございました。

4

6 に答える 6

19

まず、Windows市場の「のみ」をターゲットにしている場合、「。classから.java」への逆コンパイルを非常に簡単に防ぐことができます。ExcelsiorJetなどのツールを使用して.jar.exeに変換します。

これは絶対確実です。ExcelsiorJetを使用している場合、.javaファイルを元に戻すことは不可能です(「 .classファイルの逆コンパイルを防ぐことは不可能です」と言うすべての人にとっては)。確かに、攻撃者はSoftIceを起動して.exeをトレースしようとする可能性がありますが、JADを使用して.class.javaに逆コンパイルするよりも少し注意が必要であり、 .javaファイルを見つけることはできません。

今、あなたはOS XとLinuxもターゲットにしているのかもしれませんし、ExcelsiorJetをシェルオフするための$$$がないのかもしれません。

私はJavaで書かれた商用ソフトウェアを書いています。そのソフトウェアは、インターネット接続がある場合にのみ意味があります。したがって、特に、計算の一部をサーバー側で実行することにより、ソフトウェアを「保護」します。サーバー側から生成されない限り機能しない.classがいくつかあり、それらをネットワークに送信します(また、ネットワーク上で送信されるものは常に異なります。サーバー側で一意の1回限りの.classファイルを生成しています)。

これにはインターネット接続が必要ですが、ユーザーが当社のソフトウェアの動作を気に入らない場合は、競合他社の劣った製品を自由に購入できます;)

逆コンパイルはあまり効果がありません。ソフトウェアを積極的にクラックする(つまり、サーバー側で起こっていることを再現する)必要があります。そうしないと、ソフトウェアを使用できなくなります。

Proguardを使用するに、独自の「文字列難読化」を使用します。また、ソースコードのインストルメンテーション(バイトコードのインストルメンテーションも実行できます)を実行して、コードから多くのことを削除し(コメントアウトする「アサート」など)、ランダムな「コードフローの難読化」を導入します[ソフトウェアは異なるパスでも同じ結果が得られますが、これはソフトウェアの追跡を実際に困難にするものです])。

次に、Proguard(無料)を使用して、すべてのOO階層をフラット化し、すでにコードフローと文字列が難読化されているコードを難読化します。

したがって、フローは次のとおりです。

  • 文字列の難読化
  • ランダムなコードフローの難読化
  • プロガード
  • サーバー側で(異なる方法で)動的に生成される.classに依存する最終的な.jar 。

それに加えて、非常に定期的な(そして自動化された)更新をリリースします。これにより、クライアント/サーバー保護スキームが常に少し変更されます(リリースごとに、架空の攻撃者はほとんどゼロから開始する必要があります)。

もちろん、タオルを投げ入れて考える方が簡単です。「JADはとにかく.javaファイルを見つけることができるので、攻撃者の生活を困難にするために私にできることは何もありません」(これは非常に議論の余地があり、明らかに間違っている場合です。 .classから.exeへのコンバーターを使用して、.classを逆コンパイルから保護します)。

于 2010-03-14T22:03:26.847 に答える
6

難読化ツール(http://java-source.net/open-source/obfuscatorsを参照)は、逆コンパイルされたときに意味をなさないようにコードを「スクランブル」します。

于 2010-03-14T20:38:42.647 に答える
5

いくつかの方法があります:

すべて私の記事で詳細に説明されていますJavaコードを保護する-難読化ツールを介して

于 2010-03-15T05:43:59.817 に答える
0

では、クラスが逆コンパイルされないようにするにはどうすればよいでしょうか。1つの答えはクレマです。Cremaは、.classファイル内のシンボリック情報をスクランブルして、逆コンパイルに対する脆弱性を減らします。Cremaがスクランブルするシンボリック情報には、クラスの名前、そのスーパークラス、インターフェイス、変数名、メソッドなどが含まれます。これらのシンボリック名は、クラスをライブラリパッケージにリンクするためにJava仮想マシン(JVM)で必要になります。Cremaは、これらのシンボリック名をスクランブルし、同じ方法でそれらを参照するため、JVMはクラスとパッケージ間の正しいリンクを引き続き実現できます。

では、クレマはどのように機能しますか?基本的に、インターネット上でクラスファイルを配布する前に、それらでCremaを実行します。Cremaは、それらに含まれるシンボリック情報をスクランブルし、新しい各クラスをファイル1.cremaに配置します。次に、インターネットで配布する前に、1.cremaの名前をfilename.classのような名前に変更します。

JAVA準拠のクラスを投影する方法

于 2013-04-18T06:56:40.977 に答える
0

Javaプロテクターを試すことができます。難読化よりも優れた方法です。OpenJDKのソースを変更することでネイティブClassLoaderを作成し、AESで保護するクラスを暗号化して、カスタムJREで解析できます。JREを使用してソフトウェアを公開し、配布することができます。ソフトウェアの安全性。

于 2017-06-25T02:31:17.673 に答える
0

Linuxおよびx86-64CPUを使用している場合は、PackerLXを試すことができます。

これは、無料のWebベースのパッカーソリューションです。jarファイルをELF実行可能ファイルにパックして保護します。ELFファイルには、暗号化や逆コンパイル保護などの保護技術があります。PackerLXは新しいソリューションであり、あらゆる種類のLinux実行可能ファイルを専門家以外のリバースエンジニアリングから保護します。

于 2020-11-22T19:35:03.020 に答える