量産メモ帳

忘れっぽいのでメモを残しています。

jad.exe を使って複数の class ファイルを一括デコンパイルする。

スポンサーリンク

Eclipse 3.7.1 (Indigo) で jad.exe と JadClipse を使い、class ファイルをデコンパイルしようとしたら、エラーメッセージが表示された。
パッと見、原因が分からず、調査に時間がかかりそうなので、代わりに jad.exe を再帰的に実行することにした。
コマンドプロンプトで class ファイルのルートディレクトリに移動して、以下のコマンドを実行する。

for /r . %i in (*.class) do (jad -8 -lnc -o -r -s java -t %i)

ちなみに jad.exe のオプションの意味は、以下のコマンドで知ることができる。

jad -help



一応、全ての class ファイルから java ファイルを生成することはできた。
しかし、デコンパイルの途中、"Couldn't fully decompile method *"というエラーメッセージが数多く出ていた。
java ファイルを見てみると、主に以下の箇所でデコンパイルに失敗している。

  • ループ処理
  • try 〜 catch 処理
  • Unicode 文字列("-8"オプションを付けたのに ANSI 文字列への変換に失敗している。)

また、"JVM INSTR"という文字列も大量に出ている。
どうも認識できないバイトコードを数多く含んでいたようだ。
class ファイルを直接修正して、再びデコンパイルする方法もあるようだけど、数が多過ぎてチャレンジする気になれない。
自分でデコンパイラを作ってしまうというのも一つの手だが、気が遠くなる話なので、他のデコンパイラを試す。


参考資料: