6

Javaアプリケーションを逆コンパイルできない実行可能jarにパッケージ化するにはどうすればよいですか(たとえば、Jadclipseによって)?

4

5 に答える 5

11

できません。JRE がそれを実行できる場合、アプリケーションはそれを逆コンパイルできます。

期待できる最善の方法は、非常に読みにくくすることです (すべての記号を 'l' と '1' および 'O' と '0' の組み合わせに置き換え、多くの役に立たないコードを挿入するなど)。比較的馬鹿げた翻訳ツールを使ったとしても、どれほど読めないコードを作成できるかに驚くことでしょう。これは難読化と呼ばれ、完全ではありませんが、十分な場合もあります。

断固とした強盗と同様に、断固たるハッカーを止めることはできないことを忘れないでください。あなたがやろうとしているのは、カジュアルな攻撃者にとって物事を非常に困難にすることです. O001l1ll10OO001llll10O、 、OO01l1ll10OO0Ol11ll10Oおよび とO001l1ll1OO、何の役にも立たないように見えるコードを提示されると、ほとんどの人は諦めてしまいます。

于 2009-05-28T08:08:49.990 に答える
3

まず、コードのリバース エンジニアリングを避けることはできません。JVM バイトコードは、実行するためにプレーンである必要があり、それをリバース エンジニアリングするプログラムがいくつかあります (.NET CLR にも同じことが当てはまります)。コードを見て理解するための障壁 (つまり、コスト) をますます難しくすることしかできません。

通常の方法は、何らかのツールでソースを難読化することです。クラス、メソッド、およびフィールドはコードベース全体で名前が変更され、選択した場合は無効な識別子であっても、コードが理解できなくなります。過去にJODEで良い結果を出しました。難読化した後、逆コンパイラを使用してコードがどのように見えるかを確認します...

難読化の次に、何らかの方法でクラス ファイル (小さなスターター クラスを除くすべて) を暗号化し、カスタム クラス ローダーを使用してそれらを復号化できます。残念ながら、クラス ローダー クラス自体を暗号化することはできないため、クラス ローダーの逆コンパイルされたコードを読み取ることで、解読アルゴリズムを特定できる可能性があります。しかし、コードを攻撃するウィンドウは小さくなりました。繰り返しますが、これは人々があなたのコードを見ることを妨げるものではありません。

JVM機能の必要性に応じて、JavaアプリケーションをWindows EXEに変換して、それがJavaであるという手がかりを(ある程度)隠すか、実際にマシンコードにコンパイルすることもできます。(私はこれを試していません。)

于 2009-05-28T11:54:06.463 に答える
2

少し遅れてわかりましたが、答えはノーです。

C で記述してネイティブ コードにコンパイルした場合でも、人々がコードをステップ実行できるようにする逆アセンブラー / デバッガーがあります。確かに、シンボリック情報なしで最適化されたコードをデバッグするのは面倒ですが、それは可能です。

これをより困難にするために実行できる手順があります。たとえば、Windows ではIsDebuggerPresent API をループで呼び出して、誰かがプロセスをデバッグしているかどうかを確認し、リリース ビルドである場合はプロセスを終了します。もちろん、攻撃者が IsDebuggerPresent への呼び出しを傍受し、常に false を返す可能性があります。

何かを守りたい人、それをぶち壊そうとする人、まさに軍拡競争!この道をたどると、防御を常に更新/アップグレードし続ける必要があり、止まるところはありません。

于 2014-12-04T20:19:09.383 に答える
2

GCJは、バイトコードまたはネイティブ コードにコンパイルできる無料のツールです。心に留めておくと、それは Java の目的に反することになります。

于 2009-05-29T01:56:42.550 に答える
1

これは私の実用的な解決策ではありませんが、最高レベルの満足度を実現するための優れたコレクションまたはリソースとチュートリアルがここにあります。

この Web サイト(オラクル コミュニティ)からの提案

(きれいな方法)、コードを難読化します。多くのオープンソースおよび無料の難読化ツールがあります。ここにそれらの簡単なリストがあります:[オープンソースの難読化ツールのリスト]。これらのツールは、名前を変更することにより、コードを判読不能にします (ただし、逆コンパイルすることはできます)。これは、コードを保護する最も一般的な方法です。

2.(あまりクリーンな方法ではありません) 特定のターゲット プラットフォーム (Windows など) がある場合、またはプラットフォームごとに異なるバージョンを使用できる場合は、アルゴリズムの洗練された部分を C などの低レベル言語で記述できます (これは非常に困難です)。逆コンパイルして理解するため)、Java アプリケーションでネイティブ ライブラリとして使用します。私たちの多くはクロスプラットフォーム機能のために Java を使用しており、このメソッドはその機能を弱めているため、クリーンではありません。

そして、これはステップバイステップに従ってください: ProtectYourJavaCode

楽しみ!ソリューションを追加しておいてください。これはもっと必要です。

于 2015-11-24T13:19:41.147 に答える