シリーズ振り返り
| PART | 内容 | 主なポイント |
|---|---|---|
| 01 | はじめに・前提知識 | ライセンス確認必須・.class はバイトコード・JAR/WAR は ZIP |
| 02 | ツール選定ガイド | CFR(CLI高精度)・Fernflower(IntelliJ内蔵)・Procyon(ラムダ)・jadx(GUI) |
| 03 | .class 単体の逆コンパイル | CFR の基本コマンド・デバッグ情報の有無・javap との組み合わせ |
| 04 | JAR から一括抽出 | CFR に JAR を直接渡す・jadx GUI・内部クラスはディレクトリ指定で解決 |
| 05 | WAR から抽出 | WEB-INF/classes が自前コード・WEB-INF/lib が依存ライブラリ |
| 06 | 難読化コードへの対処 | ProGuard で名前が変わる・mapping.txt があれば復元可・型と構造から推測 |
| 07 | IDE で活用する | IntelliJ は Fernflower 内蔵・VS Code は Java Extension Pack・ソース JAR を紐付け |
| 08(本記事) | まとめ | 早見表・チェックリスト・参考資料 |
ツール選定フロー早見表
何を逆コンパイルしたいか?
│
├─ .class ファイル単体
│ └─ → CFR(最も簡単)または IntelliJ で開く
│
├─ JAR ファイル
│ ├─ 探索的に見たい → jadx-gui
│ └─ バッチ・スクリプト化したい → CFR
│
├─ WAR ファイル
│ ├─ 自前コードのみ → WEB-INF/classes を CFR へ
│ └─ 全体を一括 → jadx(WAR を直接渡せる)
│
└─ IDE でそのまま読みたい
├─ IntelliJ IDEA → ファイルを開くだけ(Fernflower 自動)
└─ VS Code → Java Extension Pack が自動処理
ラムダ式が多く可読性が低い → Procyon を試す
難読化されている → ProGuard mapping.txt を探す / 型・構造から推測
どれか迷ったら → まず CFR で試す
作業チェックリスト
事前確認
- 対象バイナリのライセンス(EULA / OSS ライセンス)を確認した
- 逆コンパイルの目的が合法的な範囲内であることを確認した
- OSS ライブラリであれば公式ソース JAR の入手を先に試みた
環境準備
- JDK がインストールされている(
java -versionで確認) - CFR / jadx などのツールをダウンロードした
- 出力先ディレクトリを作成した
逆コンパイル実行
- JAR/WAR のバージョンを確認した(
MANIFEST.MF・ファイル名) jar tfで内部構造を把握した- 逆コンパイルを実行し、
.javaファイルが出力された - エラーコメント(
/* MISSING */等)がないか確認した
解析
- 難読化の有無を判定した
- 難読化されている場合は
mapping.txtの存在を確認した - IDE にソースを取り込んで定義ジャンプが動作することを確認した
「読める」と「分かる」は別物
逆コンパイルでソースコードを取り出すことは技術的に可能だが、 「コードが読める」と「コードが理解できる」は全く別の話だ。
変数名がないコード・ビジネスドメインの知識なしには読めないロジック・ 他システムとの連携前提の処理など、ソースがあっても意図が分からないケースは珍しくない。
逆コンパイルはあくまで「調査の入口」であり、 それ以上の理解には実行トレース・ログ解析・ステークホルダーへのヒアリングを組み合わせることが現実的だ。
⚠️ 逆コンパイルに期待しすぎない
「ソースを取り出せばすぐ移行できる」という期待は禁物。 難読化・最適化・コメントなし・ドメイン知識の欠如など、 逆コンパイル後のコードは読解に相当のコストがかかることを事前に理解しておくこと。
参考リンク・ツールリスト
逆コンパイルツール
- CFR — Class File Reader Lee Benfield 氏製。単一 JAR で動作する高精度 CLI ツール。最も活発にメンテナンスされている。
- jadx GUI 付き逆コンパイラ。JAR・WAR・APK に対応。探索的解析に最適。
- Procyon ラムダ式・invokedynamic の復元精度が高い。Java 8 コードに強い。
- Fernflower(IntelliJ Community) IntelliJ IDEA 内蔵の分析的逆コンパイラ。CLI 単体でも使用可能。
難読化ツール
- ProGuard Java / Android の難読化・デッドコード除去ツール。OSS 版あり。
- R8 Android ビルドツールチェーンに統合された ProGuard 後継。DEX への最適化も行う。
JVM ツール
- javap(Oracle 公式ドキュメント) JDK 付属のクラスファイルディスアセンブラ。バイトコード命令を直接確認できる。
- JAR ファイル仕様(Oracle) JAR の構造・MANIFEST.MF の書式・sealed パッケージの仕様。
✅ シリーズ完走おつかれさまでした
全 8 回にわたって Java バイトコードの逆コンパイルを網羅的に解説した。 このシリーズが、ソースのないバイナリを前にした誰かの助けになれば幸いだ。