ClassファイルからJavaソースコードを作りたい
通常は、Javaソースコードをビルドして、ClassファイルやJarファイルを作成します。
しかし、時にその逆(ClassファイルからJavaソースコード)をやりたいシーンで出くわす時があります。
例えば次のような時
- 今動いているJarファイルやClassファイルのソースコードを無くしてしまった
- Gitでのバージョン管理にミスがあって現在動いているシステムのソースがどれかわからない
- 気になるシステムのソースコードが気になる・・・
こんな時は、リバースエンジニアリング(逆コンパイル)を行うことでソースコードを確認することができます。
但し、上記の例の3番目の誰かが作ったものをリバースエンジニアリングすることは禁止とされていることが多いので自己責任でお願いします。
リバースエンジニアリングしてみる
専用のツールを用意する
JavaプログラムはClassファイルで構成されていますが、バイナリファイルであるため、テキストエディター等で開いても良くわからない文字の羅列になっています。
JDK標準で用意されているツール類ではリバースエンジニアリングできないので、専用のツールを追加でインストールします。
Jadの入手方法
Jadを公開しているサイトから入手します。
サイトにアクセスしたら、自分のパソコンのOSに合ったものを選択してダウンロードします。
Jadのインストール
ここからはWindowsでのやり方を紹介します。
ZIPファイルをダウンロードしたら、展開します。
展開して出てきた「jad.exe」を%JAVA_HOME%/binの中に移動します。
Java/binの中を汚したくない方は、パスが通ってるところならどこでもいいですし、どこかに置いてパスを通してもOKです。私は面倒くさかったのとJava関係だからJava/binの中に入れてしまいました。
Jadの使い方
JARファイルの場合は、展開してClassファイル群を先に取り出しておきます。
7Zipなどを使えばそのまま展開できますし、Windows標準のみでなんとかする場合は、JARファイルの拡張子をzipに変更することで展開できます。
Classファイルが抽出できたら、コマンドラインでjadを起動して、ソースコードを生成したいクラスファイルを指定します。
Jadにはいろいろな出力ができるように豊富なオプションが指定できますが、とりあえず私のオススメの一番元のソースコードに近い形で出力するオプションはこちらです。
jad -o -r -sjava -lnc -space -t4 クラスファイル名
実行したフォルダにパッケージ名のフォルダ構成が作成されて、ソースコードが生成されていると思います。
まとめ
リリースしているシステム、現在動いているシステムのソースコードを確認したい場合の緊急用のツールですね。
本来はJadのお世話にならないよう、しっかりとGitでバージョン管理、資材管理を行うべきです。しかし、このような手段があることを知っておくこともまたITエンジニアとして大事なことです。
それではまた!
コメント