最高のJava難読化ツール?[閉まっている]


106

セキュリティソフトウェアを開発していますが、リバースエンジニアリングが不可能になるようにJavaコードを難読化したいと考えています。最も信頼できるJava難読化ツールは何ですか?


10
@Xinus「リバースエンジニアすることは不可能になる」 -ほとんど、最高が試していないと失敗している
アリ

211
非常に難読化されたコードを作成した同僚が何人かいました。しかし、それは彼らの意図ではありませんでした。
スティーブマクロード

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.-ディルバート
ant

7
リバースエンジニアリングを回避することは不可能です。
Mnementh

11
@Mnementh:特定のアプリのリバースエンジニアリングを法外に高価にするだけで十分です。
Dmitry Leskov 2010

回答:


98

まず、何かをリバースエンジニアリングすることは決して不可能ではないことを心に留めておく必要があります。すべてハッキング可能です。スマートIDEを使用する賢い開発者は、すでに十分な能力を持っています。

さて、あなたはここにリストを見つけることができます。ProGuardは非常に優れています。私はそれを自分で使用しましたが、Javaコードを「縮小」するためだけに使用しました。


1
@BalusC:では、Javaコードを難読化するためにどのツールを使用しますか?あなたはあなたのJavaコードを難読化しますよね?
Thinhbk

@Thinhbk難読化すると、有用なスタックトレースを取得することが難しくなります。
–ThorbjørnRavn Andersen 2015

@ThorbjørnRavnAndersen:そうですね。IMO、難読化すると、スタックトレースがほとんど役に立たなくなります。その場合、私はログメッセージでいくつかのトリックを使用しています。
Thinhbk

2
@Thinhbk Proguardは、難読化されたスタックトレースを元のコードに変換するためのマップを生成します。そうでなければ、あなたが言ったように、スタックトレースは役に立たなくなります(しかし、とにかく誰がキャッチされない例外を取得します... ;
Matthieu

@Matthieu:元のコードに戻されたスタックトレースを自動的に変換することは可能ですか?それは素晴らしく、私にとっては新しいものです。コードベースが巨大な場合、手動での変換が難しい場合があることを知っています。
Thinhbk

33

コンピュータがそれを実行できる場合、適切に動機付けられた人間がリバースエンジニアリングすることができます。


3
難読化されたコードを読んでロジックを理解できる人は何人ですか?私にはエンジニアの友達がたくさんいて、彼らはそれができません。John Nashだけがこれを行うことができます;)
kodmanyagha

5
@kodmanyagha彼らが十分にやる気になったら、彼らはそれを学ぶでしょう。難しいことではありません。
–ThorbjørnRavn Andersen 2017

1
数学的な意味では、リバースエンジニアリングを行う方法がなくても実行できます。これが準同型暗号化の概要ですが、SaaSとは対照的に、コンピューターソフトウェアで実際に使用できるようにするには、解決する必要のある障害がかなりあります。ゆっくりと移動しています。完全に準同型の暗号化と「数学的ジグソーパズル」に関するGentryのセミナリー作品。その方向に大きく飛躍しました。スキーム全体を実現可能にする要素が1つだけ不足しています(これを「バリア関数」と呼びます)。今不可能であることが将来的に可能になるでしょう。
ogggre

30

アプリのリバースエンジニアリングをより高価にするための難読化と他の3つの方法、およびツールへのリンクと参考資料のコレクションについては、私の記事「Protect Your Java Code-Through Obfuscators And Beyond [Archived]」を参照してください。


1
これは私が実際に必要なものです。プロジェクト用にPHP難読化ツールを記述したい。ロジックはどこでも同じです。ありがとう...
kodmanyagha

1
Javaの難読化とソフトウェアの収集に関するクールで広範な記事。
m3nda 2017年

15

プロガードが最高だと思います。IDE(NetBeansなど)と統合することもできます。ただし、コードを難読化すると、ログの問題を追跡することが困難になる可能性があることを考慮してください。


6
+1「コードを難読化すると、ログの問題を追跡することが困難になる可能性があることを考慮してください」。デバッグが難しいと思ったとき...
Adam Paynter

7
名前と行番号情報を変更する優れた難読化ツールは、プロセスを元に戻すためのログを生成する必要があります。このようにして、少なくともスタックトレースは、難読化されたバイナリに対しては引き続き有用です。
ヨアヒムザウアー

3
ProGuardは、デバッグ用にそのような逆ファイルを作成します。:-)
Malax



7

家を保護することが不可能であるように、常にコードをリバースエンジニアリングして、誰もそれを盗むことができないのは事実です。ただし、ドアをロックすることはできます。実際、私はJavaの世界ではないので、BitHelmet for .net を使用しています。


7
+1するとネット0に戻ります。この答えは役に立ちません。
HaloWebMaster 2013年

6

私は以前の会社でKlassmasterを使用していましたが、それは非常にうまく機能し、ビルドシステムとかなりうまく統合できます(mavenサポートは優れています)。しかし、それは無料ではありません。



6

ソリューションが安全かどうかはわかりませんが、ClassGuardソリューションについては、http://www.javaworld.com/community/?q = node / 1604# commentの記事とコメントを読むのが興味深いです。 -12296


また、defineClassの代わりにネイティブコードを使用する別の代替方法は、JarCryptです
Renato

ClassGuardをクラックする方法を教える記事:setrst.blogspot.com/2010/04/classguard-unguarded.html。これが最新バージョンでも動作するかどうかはわかりません。
Renato
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.