ソースコードを入手できないJavaプログラムを修正するときなど、クラスファイルから基になったソースコードの復元が必要になることがあります。このような方法は、ソースコードを「コンパイル」してクラスファイルを生成する通常の流れとは逆になるため、「逆コンパイル」と呼ばれています。この逆コンパイルを行えば、コンパイル時に失われる情報(コメントや定数同士の四則演算など)以外のソースコードを復元することができます。
Javaの逆コンパイルツールはいくつかありますが、本稿ではJadとJadClipseというツールを使用して、Eclipse上で逆コンパイルする方法を紹介します。
操作手順
(1)JadとJadClipseのダウンロード
Jadはコマンドラインで使用する逆コンパイラで、JadClipseというEclipseプラグインを利用すれば、Eclipse上から使用することができます。JadClipseを利用すれば、Eclipse上でクラスファイルをダブルクリックするだけでJavaのソースコードが復元できるので、便利でしょう。
JadとJadClipseは、以下のサイトからダウンロードできます。
執筆時点の最新版は、Jadが1.5.8e、JadClipseはbeta2.06です。残念ながら、このバージョンのJadClipseは、Eclipse 3.0には対応していません。本稿では、Eclipse 2.1.3+Language Pack 2.1.2という環境で、JadClipseを使用して逆コンパイルを行う方法を説明します。
(2)Jadのインストール
まず、上記のJadのWebサイトの「Download Jad」から、使用しているプラットフォームに合ったJadアーカイブをダウンロードします。ここでは、Windows用の“jadnt158.zip”をダウンロードし、適当なディレクトリ上で展開します。
展開先にある実行ファイル(Windowsの場合はjad.exe)を、環境変数PATHに列挙してある任意のディレクトリにコピーします。通常、Javaの開発環境ではjavacコマンドのあるディレクトリ(環境変数JAVA_HOMEで示されるディレクトリ下のbinディレクトリ内)が環境変数PATHに登録されているはずなので、javacコマンドと同じディレクトリにコピーしておくのがよいでしょう。
コマンドプロンプトを開き、jadコマンドを実行します。以下のような、jadコマンドの簡易ヘルプが表示されればインストールは成功です。
C:\>jad Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov (kpdus@softhome.net). Usage: jad [option(s)] <filename(s)> Options: -a - generate JVM instructions as comments (annotate) -af - output fully qualified names when annotating (以下略)
注意:Webサイトではバージョンが1.5.8eとなっていますが、コマンドの簡易ヘルプでは1.5.8fと表示されます。どちらが正しいかは不明ですが、使用上は問題ありませんので、そのまま使用してください。
(3)JadClipseのインストールと設定
次に、上記のJadClipseのWebサイトから、JadClipseアーカイブ(jadclipse_b206.zip)をダウンロードします。ダウンロードしたzipファイルを適当なディレクトリ上で展開し、できたjadclipseディレクトリをそのままEclipseのpluginsディレクトリにコピーします。インストールはこれで終了です。すでに、Eclipseを起動している場合は、ここでいったん終了させます。
JadClipseのインストール後、Eclipseを起動し、[ウィンドウ]メニューから[設定]を選択して設定ダイアログを開きます。設定ダイアログで、[ワークベンチ]→[ファイルの関連付け]を選択し、以下の図のように[ファイル・タイプ]一覧にある“*.class”を選択してから“JadClipse Class File Viewer”を選択し、[デフォルト(F)]ボタンをクリックします。これで、[関連付けられたエディター]一覧に“JadClipse Class File Viewer(デフォルト)”と表示されるようになります。
次に、設定ダイアログで[Java]→[JadClipse]を選び、[Ignore existing source]チェックボックスをオンにします。また、[Reuse code buffer]チェックボックスはオフにしておきます。これにより、クラスファイルをダブルクリックすると、必ず逆コンパイルが行われるようになります。
最後に、設定ダイアログで[Java]→[JadClipse]→[Misc]と選び、[Convert Unicode strings into ANSI strings]チェックボックスをオンにします。この項目がチェックされていないと、逆コンパイルされた結果内の文字列に含まれた日本語が“\xu3042”のようにUnicodeのコード番号として表示されてしまい、読みづらくなってしまいます。
ここまで設定できたら、[OK]ボタンをクリックして、[設定]ダイアログを閉じます。
(4)JadClipseの使い方
プロジェクト内に逆コンパイルしたいクラスファイルを置きます。[ウィンドウ]メニューから[ビューの表示]→[ナビゲーター]を選択し、ナビゲータービューを開きます。ナビゲーター上で、逆コンパイルしたいクラスファイルをダブルクリックすると、逆コンパイルされた結果が表示されます。
Copyright © ITmedia, Inc. All Rights Reserved.