この記事にはプロモーションが含まれていることがあります

【裏技】Javaクラスファイルからソースコードを逆生成する方法

IT
スポンサーリンク

ClassファイルからJavaソースコードを作りたい

通常は、Javaソースコードビルドして、ClassファイルJarファイルを作成します。

しかし、時にその逆(ClassファイルからJavaソースコード)をやりたいシーンで出くわす時があります。

例えば次のような時

  1. 今動いているJarファイルやClassファイルのソースコードを無くしてしまった
  2. Gitでのバージョン管理にミスがあって現在動いているシステムのソースがどれかわからない
  3. 気になるシステムのソースコードが気になる・・・

こんな時は、リバースエンジニアリング(逆コンパイル)を行うことでソースコードを確認することができます。

但し、上記の例の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 クラスファイル名

実行したフォルダにパッケージ名のフォルダ構成が作成されて、ソースコードが生成されていると思います。

リバースエンジニアリングを使うと、処理内容は同じものが作成できますが、元のソースコードとそっくりそのまま同じものは作成できません。

従ってdiffなどで差分確認はできないので、元のソースコードの行番号が入るオプションを指定しています。行番号は不要という場合は、 -lncオプションを外して実行してください。

今回、Jad v1.5.8g で確認しました。
Usageが出力される場合はオプションが変更になった可能性がありますので、表示されたオプション一覧で確認してください。

スポンサーリンク

まとめ

リリースしているシステム、現在動いているシステムのソースコードを確認したい場合の緊急用のツールですね。

本来はJadのお世話にならないよう、しっかりとGitでバージョン管理、資材管理を行うべきです。しかし、このような手段があることを知っておくこともまたITエンジニアとして大事なことです。

それではまた!

コメント

タイトルとURLをコピーしました