開発覚え書き

ソフトウェアシステムの開発に関わるさまざまなことの覚え書き

難読化ツールProGuardを試す

2006-07-14 15:12:35 | Weblog
Javaプログラムのサイズ縮小・最適化・難読化機能のあるProGuardを試してみた。
確かに、逆コンパイルしてもかなり読みにくい様になる。
まあ、少し読みにくいだけで、機械語のアセンブリコードを読むよりはずっと
わかりやすいだろうが...

オプションとして以下のようなものを使う。
     -injars で入力jarファイル
     -outjars で出力jarファイル
     -libraryjars でJava SDKのjarファイル(インストール先の jre/lib/rt.jar)
     -keep でメインクラスとmainメソッドを指定

     -defaultpackage でパッケージの区別もなくしてくれる。

出力ファイルのサイズも縮小される。
試した簡単なGUIアプリケーションでは、元のjarファイル30KBに対して
適用後のファイルサイズは10KBになった。

Javaの逆コンパイラの威力を実感

2006-07-05 12:35:53 | Weblog
Javaの逆コンパイラのJadを試してみた。バージョンは v1.5.8g のWindows版。
jarファイルは直接逆コンパイルできないが、展開すればディレクトリ以下をごっそり逆コンパイルできる。
出力されるコードも元のものが分かるくらい近いもののようだ。

簡単なGUIプログラムをJ2SE 1.5.0_07 でコンパイルした後、
Jadで逆コンパイルし、さらにそれをコンパイルしてみた。
問題点は1個だけだった。
内部クラスのコンストラクタで親クラスthisのメンバの設定が入っていて(これは本来は暗黙に含まれるべきもの)、その後 super()が呼ばれており、
super()は最初になければならないというエラーが出た。
親クラスthisのメンバの設定を削除したら問題なくコンパイル・実行できた。

こうも簡単に逆コンパイルできてしまうとは...
かなり衝撃的だ。

Jad は C++ で記述されているとのことだが、逆コンパイラには他にJODEというJavaで書かれたものもあるらしい。