GUIを使ったツールを使おう
Jadはコマンドとして用意されているので、毎回使う度にコマンドプロンプトを起動してコマンドを打ち込んで……とするのはかなり面倒です。そこで、JadにGUIを用意したツール類がいろいろと登場しています。ここでは、主なものをいくつか紹介しておきましょう。
DJはデコンパイル以外にも多くの解析機能を持っています。 |
DJは、クラスファイルだけでなく、JARファイルを直接開いてデコンパイルをしたり、クラスディレクトリにあるクラスをまとめてデコンパイルするなど効率的にデコンパイルを行うことができます。デコンパイルされたソースコードはキーワードやリテラルなどが色分け表示され、また用意されているメソッドの一覧が別枠で表示されるなど非常にわかりやすく整理された形で表示されます。
またデコンパイルの他にもDJにはさまざまな機能が組み込まれています。デコンパイルされたソースコードをもとに、再度のコンパイル、実行、JARファイルの生成などをDJ内から行うことができます。またクラスファイル内をディスアセンブルしてバイトコードの状態を調べたり、メソッドやフィールド、定数プールの状態などを詳しく表示するなど、一般的な開発環境にもあまり用意されていない機能も多くそろっています。
DJは、デコンパイルやディスアセンブルなど、「プログラムを解析する」という視点から作られた、特殊なJava開発環境であるということもできるでしょう。実際、DJで一からJavaプログラムを開発することも十分可能なのです。(なお、DJは現在、シェアウェアとなっており、継続して使用するには登録が必要です)
FrondEnd Plusは非常にシンプルで使いやすいデコンパイルツールです。 |
Jadを使ったデコンパイルツールです。通常のWindowsアプリケーションになっており、メニューやアイコンを使ってデコンパイルを行えます。現在、FrontEnd Plusのサイトが閉鎖されているようで、Jadのサイトから直接ダウンロード可能になっています。
機能的なものでは、DJよりもかなり劣る感はありますが、シンプルで簡単に使えるデコンパイラとしてなかなか重宝します。JARファイルからデコンパイルすることはできませんが、複数のクラスファイルをまとめてデコンパイルするなどは可能ですので、実用上問題はないでしょう。
Jodeはpure Javaなデコンパイルツールです。 |
Javaでできたpure Javaなデコンパイラです。Executable Java Archiveとして作成されており、ダブルクリックで起動し、ビジュアルに操作できます。Jodeは、classpath上にあるクラスファイルやJARファイルなどを調べ、すべてのクラスを階層的に一覧表示します。そして、その中から調べたいクラスをダブルクリックして開けば、その場でデコンパイルしてソースコードを表示するのです。
classpathにあるクラスを自動的に認識するため、特定のプログラムのデコンパイルをしたいような場合は、そのクラスファイルやJARファイルがある場所をclasspathに設定するといったやり方をします。もちろん、Jode内からメニューで簡単に行えるのですが、慣れないとどう使うのかよくわからないかも知れません。少々癖のあるツールだといえるでしょう。
http://jode.sourceforge.net/download.html
JadClpseはEclipseのプラグイン。Eclipse内からクラスをデコンパイルします。 |
EclipseからJadを利用するためのプラグインです。これをインストールすると、クラスファイルをダブルクリックするだけでそのクラスがデコンパイルされソースコードがエディタで表示されるようになります。
JadClipseでは、プロジェクト内にクラスファイルやJARのファイルをコピーしたり、ライブラリとしてそれらを参照するなどして、調べたいファイルをプロジェクトエクスプローラーから表示できるようにしておかなければいけません。「クラスファイルを開くとデコンパイル」というものではないのです。Eclipseという開発環境にデコンパイル機能を追加するというものですので、あくまで「Eclipseでの開発を支援するもの」と考えるとよいでしょう。
http://sourceforge.net/projects/jadclipse/
以上、さまざまなJavaのデコンパイルツールを紹介しました。デコンパイルは、完成されたプログラムをソースコードに戻してしまう、プログラマからすれば夢のツールです。が、それ故に、使い方のルールをわきまえないでいると違法行為につながりかねないものであることもよく理解しておいてください。その点さえしっかりと認識していれば、デコンパイラは強力な武器となってくれることでしょう。