連載
» 2004年08月10日 10時00分 UPDATE

JavaTips 〜Eclipse活用編:Eclipseで逆コンパイルを行う

[BULL,@IT]

 ソースコードを入手できない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(デフォルト)”と表示されるようになります。

クラスファイルとJadClipseの関連付け クラスファイルとJadClipseの関連付け

 次に、設定ダイアログで[Java]→[JadClipse]を選び、[Ignore existing source]チェックボックスをオンにします。また、[Reuse code buffer]チェックボックスはオフにしておきます。これにより、クラスファイルをダブルクリックすると、必ず逆コンパイルが行われるようになります。

JadClipseの設定 JadClipseの設定

 最後に、設定ダイアログで[Java]→[JadClipse]→[Misc]と選び、[Convert Unicode strings into ANSI strings]チェックボックスをオンにします。この項目がチェックされていないと、逆コンパイルされた結果内の文字列に含まれた日本語が“\xu3042”のようにUnicodeのコード番号として表示されてしまい、読みづらくなってしまいます。

文字列のコード変換の設定 文字列のコード変換の設定

 ここまで設定できたら、[OK]ボタンをクリックして、[設定]ダイアログを閉じます。

(4)JadClipseの使い方

 プロジェクト内に逆コンパイルしたいクラスファイルを置きます。[ウィンドウ]メニューから[ビューの表示]→[ナビゲーター]を選択し、ナビゲータービューを開きます。ナビゲーター上で、逆コンパイルしたいクラスファイルをダブルクリックすると、逆コンパイルされた結果が表示されます。

逆コンパイルして得られたソースコードの表示 逆コンパイルして得られたソースコードの表示

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。