逆コンパイルがいかに簡単かという理由で、Java で特定のコードを記述しないことを検討するのに十分興味があります。逆コンパイラを気にせずに Java で書く方法はありますか? 十分な時間があれば、何でもリバース エンジニアリングできることは理解しています。そこで私が質問したいのは、Java クラスの難読化ツールは逆コンパイルを抑止するのに十分な効果があるかということです。
7 に答える
Java クラスの難読化ツールは、逆コンパイルを抑止するのに十分効果的ですか?
私は「いいえ」と言うでしょう。誰かがどのように何かを行ったのかを理解しようとしてソース コードを逆コンパイルするとき、私は自分が探しているものをすでに知っています。そのため、プログラム全体を理解する必要はありません。その時点で関心のある 1 つの部分だけを理解するだけです。メソッドを十分に理解し、呼び出しチェーンを少しさかのぼると、通常、過度の労力を費やすことなく、内部に何があるかを判断することができます。
あなたの質問が Can I ensure that no one can't hack my code である場合、答えは NO.. JAVA であろうと Visual C++ であろうと。バイまたはビットで構成されているソフトウェアがハッカーによって直接アクセス可能である限り。
理由は簡単です。
どのようにエンコードしても、デコードできます。
最良の戦略は、Web サービスを作成し、そこに秘密のロジックをデプロイすることです。あなたが書いた方法にアクセスすることなく、他の人があなたのサービスを使用できるようにします。
Java やその他の言語での難読化は単なる抑止力です。それは単に攻撃者の水準を上げるだけです。これは、難読化に価値がないという意味ではありません。それは保証ではありません。
何を保護しようとしているのか、どのようなタイプの市場をターゲットにしているのか?
著作権侵害が蔓延している市場でライセンス アルゴリズムを保護するための難読化は、あまり意味がありません。ただし、SMB の場合は、ほとんどのカジュアルな海賊版をカットするだけで十分かもしれません。
競合から IP を保護しようとしている場合、2 つの答えがあります。アイデアは、保護するのが難しいでしょう。コードを見て有能なエンジニアは、ロジックの宝石を見つけ出し、再実装することができます。難読化により、人々がコードを拾い上げて自分の製品に組み込むことが非常に難しくなります。彼らが変更を加えようとするにつれて、メンテナンス コストは増大し続けます (クリーンに逆コンパイルされたコードについても同様です)。
私が会社のために開発した Java 製品は難読化されています。彼らは私たちを盗難から守ってくれましたか...私はそれを疑います. しかし、開発コストを考えると、難読化はそれほど高価ではありませんでした。わずかな価格でわずかな保護を提供することは、悪いトレードオフではありません。
Java を逆コンパイルした個人的な経験から、難読化を行うと、誰かが逆コンパイルしようとする試みが非常にいらいらし、困難になる可能性があると言えます。私にとって最も苛立たしいのは、最終ビルドのクラス ファイルがすべて「a.class、b.class、c.class」などの名前で、大量のダミーが投入された場合です。コードの難読化に関しては、試してください/catches は、逆コンパイラの処理をうまく処理します。
一般に、逆コンパイルしたものはコンパイルできませんが、プログラムの一般的な動作に関するヒントが得られます。
「十分に効果的」かどうかは、どれだけ効果的である必要があるかに完全に依存します。それは、何を誰から保護しているかによって異なります。従来の方法 (難読化、バイトコードの暗号化、「exe」へのコンパイル) はどれも、十分な時間とインセンティブがあれば、熟練した断固たる攻撃者を止めることはできません。しかし、それはほぼすべての形式のプログラミングに当てはまります。(C/C++ アプリも逆アセンブルまたは逆コンパイルできます...)
重大なリバース エンジニアリングの試みから保護できる唯一の方法は、安全な実行プラットフォームを使用することです。たとえば、 TPMに基づくものを使用します。それでも、悪意のある人物がコードを実行しているシステムにロジック アナライザーを接続できれば、(理論上は) 実行中のネイティブ コードをキャプチャして、リバース エンジニアリング パスを開始できます。
編集:誰かが電子顕微鏡を使用して、人気のある TPM チップを破壊することに成功したと報告されています。この登録記事を参照してください。そして興味深いことに、彼の最初の動機は Xbox 360 コンソールをハッキングすることでした!
率直に言って、いいえ。コードをどれほどばかげて難読化しても、誰かがあなたのコードから100万ドルを稼ぐことができると知っていれば、彼はあなたのクラスファイルを逆コンパイルしてコードを取得します。
ただし、代替手段があります。
配布する前に、Javaプログラムをexeに変換します。ここにキャッチがあることを知っておく必要があります。
クラスファイルをキーで暗号化します。秘密鍵を使用してクラスファイルをメモリにロードする前にデコードできるカスタムクラスローダーを作成します。ここには2つの問題があります。a)ロード時間が長くなる、b)秘密鍵をどのように隠すか。
私の投稿https://stackoverflow.com/a/26717791/2132826を読むと、実際に期待どおりに機能する優れた Java 難読化解除ツールが 1 つも見つからないことがわかります。
したがって、現在の答えは次のとおりです。