質問

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

役に立ちましたか?

解決

まず、Windows市場をターゲットにしている場合は、「.java」の逆「.java」を防ぐのが非常に簡単です。 .jar。EXE.

これは絶対確実です:そうです 無理だよ Excelsior Jetを使用している場合、.javaファイルを取り戻すには(すべての人が「の逆」を防ぐことは不可能だと言っています。 。クラス ファイル ")。確かに、攻撃者は起動することができます ソフト そして、あなたを追跡してみてください 。EXE しかし、それはJADを使用して逆コンパイルするよりも少し難しいことがわかります 。クラス.java そして、それは確かにそれを見つけることができません .java ファイルを返します。

今、あなたもOS XとLinuxをターゲットにしているか、$$$を持っていないのは、Excelsiorジェットのために砲撃していないでしょう。

Javaで書かれた商用ソフトウェアを書いています。そのソフトウェアは、インターネット接続がある場合にのみ理にかなっています。したがって、私たちはソフトウェアを「保護」します。他のソフトウェアは、サーバー側で計算の一部を持っていることによってです。いくつかあります。 。クラス サーバー側から生成されない限り、それは機能しません。 いつも 異なる:私たちはユニークな1回限りの生成を生成しています 。クラス サーバー側のファイル)。

これにはインターネット接続が必要ですが、ユーザーがソフトウェアの仕組みを好まない場合、競合他社の劣等製品を自由に購入できます;)

処分はあまりうまくいきません。ソフトウェアを積極的にクラックする必要があります(つまり、サーバー側で起こっていることを再現するか、使用できません。

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

次に、Proguard(無料)を使用して、すべてのOO階層を平らにし、すでにコードフローアンドストリング遮断コードを難読化します。

だから私たちの流れは次のとおりです。

  • 文字列難読化
  • ランダムコードフローの難読化
  • Proguard
  • 最後の .jar それはに依存します 。クラス これは(異なる)サーバー側で動的に生成されます。

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

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

他のヒント

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

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

すべての記事で詳細に説明しています Javaコードを保護します - Obfuscators以降を介して

では、どのようにしてクラスを逆コンパイルから保護できますか? 1つの答えはCREMAです。 CREMAは、.classファイルの象徴的な情報をスクランブルして、それらが逆コンパイルに対して脆弱になるようにします。 CREMAスクランブルの象徴的な情報には、クラスの名前、スーパークラス、インターフェイス、可変名、メソッドなどが含まれます。これらの象徴的な名前は、クラスをライブラリパッケージにリンクするために、Java仮想マシン(JVM)によって必要です。 CREMAはこれらの象徴的な名前をスクランブルし、同じ方法でそれらを参照して、JVMがクラスとパッケージ間の正しいリンクを達成できるようにします。

では、クレマはどのように機能しますか?基本的に、インターネット上でクラスファイルを配布する前に、それらにクレマを実行します。 CREMAは、それらに含まれる象徴的な情報をスクランブルし、各クラスをファイル1.Cremaに配置します。あなたの仕事は、インターネットで配布する前に、1.CremaをFilename.classのようなものに名前を変更することです。

Javaに準拠したクラスを投影する方法

あなたは試すことができます Javaプロテクター. 。これは難読化よりも良い方法です。OpenJDKのソースを変更することでネイティブクラスローダーを作成し、AESで保護したいクラスを暗号化し、JREでソフトウェアを公開して配布できます。あなたのソフトウェアの安全。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top