JD-GUI で JAR ファイルをデコンパイルする

久々に Java の話。別に新しい話ではないのだが、紹介したことがなかったので。

ソースファイルである .java ファイルがなく、コンパイル後の .class.jar ファイルしか見当たらないことがあったりする。原則的に、一度コンパイルされたクラスファイルから、元通りのソースコードを復元することはできない。しかし、JD-GUI というアプリを使えば、どんなメソッドやフィールドがあり、おおよそどんな処理をやっているかが復元できる。今回はこのソフトを試してみる。

なお、似たようなことができるアプリに Jad というモノもあるが、個人的に JD-GUI の方が見やすかったのでコチラを紹介する。

目次

その前に jar コマンド

JD-GUI の前に、JDK 付属の jar コマンドも紹介しておく。

# JAR ファイルの中にあるファイルを一覧表示する
$ jar tf 【JAR ファイル名】

# JAR ファイルを解凍しファイルを抽出する
$ jar -xvf 【JAR ファイル名】

jar -xvf は単純に unzip コマンドで解凍しても良い。

.class ファイルを直接デコンパイルするには、javap というコマンドがあったりする。

$ javap HOGE.class

ただ、逆アセンブルされた結果は通常の Java ソースコードとは違い、見づらくて使い物にならない。

JD-GUI を使う

いよいよ JD-GUI を使う。

JD-GUI は Windows・MacOS・Linux 向けにバイナリが存在するので、大抵の OS ですんなり使える。以下の公式サイトからダウンロードできる。

JD-GUI を起動したら、JD-GUI のウィンドウに .jar ファイルをドラッグ & ドロップしてみる。するとファイルツリーとともに、デコンパイルされたソースコードが確認できる。

Jad と比べて、より自然なソースコードに見えるので、読み解きやすいと思う。