逆コンパイルを実際に行うには、デコンパイラと呼ばれる専用のツールを使用します。
対象となるファイルの種類(Java・EXE・DLLなど)によって適切なツールが異なるため、目的に合ったツールを選ぶことが重要です。
この記事では、逆コンパイルのツールの種類と使い方、Java・EXE・DLL別の対応ツール、逆アセンブルとの違いについてわかりやすく解説していきます。
セキュリティ調査やレガシーコードの解析に取り組む方、デコンパイラの選び方を知りたい方にぜひ参考にしていただきたい内容です。
逆コンパイルのツールは「対象ファイルの種類と目的に合わせて選ぶ」のが基本
それではまず、逆コンパイルツールの選び方の基本について解説していきます。
デコンパイラは対応するファイル形式や言語によって異なり、JavaのクラスファイルにはJava向けのデコンパイラ、EXEやDLLにはバイナリ解析向けのツールを使い分けることが基本です。
ツールによって復元されるコードの品質・対応プラットフォーム・GUIの有無なども異なるため、用途に応じた選択が重要になります。
まずは対象ファイルの種類を確認し、それに対応したツールを選ぶというシンプルな手順を押さえておきましょう。
逆コンパイルツール選びの基本:
・Javaの.classファイル → CFR・Procyon・JD-GUIなどのJavaデコンパイラ
・EXE・DLLなどのバイナリ → Ghidra・IDA Pro・dnSpyなど
・.NETアセンブリ(C#など)→ dnSpy・ILSpyなど
デコンパイラとディスアセンブラの違い
逆コンパイルのツールを調べると、デコンパイラとディスアセンブラという2種類のツールが出てきます。
デコンパイラは機械語やバイトコードからC言語・JavaなどのよりC言語・Javaなどの高水準言語のソースコードを復元するツールです。
一方、ディスアセンブラは機械語をアセンブリ言語に変換するツールで、より低レベルな解析を行う際に使われます。
セキュリティ解析の現場ではデコンパイラとディスアセンブラを併用することが多く、両方の特性を理解しておくと解析作業がスムーズになります。
ツール選びで確認すべきポイント
逆コンパイルツールを選ぶ際には、対応ファイル形式・復元コードの品質・GUI対応の有無・無償か有償かという点を確認することが重要です。
初めてデコンパイラを使う方には、GUIで操作できる無償ツールから始めるのが取り組みやすいでしょう。
プロフェッショナルなセキュリティ解析では、IDA Proのような有償の高機能ツールが広く使われています。
用途・予算・対象ファイルの3点を整理してから適切なツールを選ぶことが、効率的な解析作業につながります。
Javaの逆コンパイルツールの種類と使い方を確認しよう
続いては、Javaの逆コンパイルに使われる代表的なツールの種類と使い方を確認していきます。
Javaはバイトコード(.classファイル)にコンパイルされるため、比較的高品質な逆コンパイルが可能です。
| ツール名 | 特徴 | 対応形式 |
|---|---|---|
| JD-GUI | GUIで手軽に使えるJavaデコンパイラ | .class・.jar |
| CFR | コマンドライン型・復元精度が高い | .class・.jar |
| Procyon | 最新のJava構文に対応した高精度デコンパイラ | .class・.jar |
| Fernflower | IntelliJ IDEAに内蔵されているデコンパイラ | .class・.jar |
| Jadx | AndroidのAPKファイルにも対応 | .class・.jar・.apk・.dex |
JD-GUIの特徴と使い方
JD-GUIはGUIベースのJavaデコンパイラで、ドラッグ&ドロップで.classファイルや.jarファイルを読み込み、すぐにソースコードを確認できます。
操作が直感的でインストールも簡単なため、Javaのデコンパイルを初めて試みる方に最適なツールです。
JD-GUIの基本的な使い方:
①JD-GUIを起動する
②解析したい.classまたは.jarファイルをドラッグ&ドロップで読み込む
③左側のツリーからクラスを選択してソースコードを確認する
④必要に応じてFile→Save All Sourcesでソースコードを保存する
表示されたソースコードはコピーして別エディタで確認したり、ファイルとして保存したりすることが可能です。
ただし最新のJava構文への対応が古いバージョンでは不十分な場合があるため、複雑なコードにはCFRやProcyonとの併用を検討しましょう。
CFRの特徴と使い方
CFRはコマンドラインから使用するJavaデコンパイラで、復元されるソースコードの品質が高く、最新のJava構文にも幅広く対応しています。
ラムダ式・switch式・レコードなどJava 8以降の新しい構文の復元精度が高い点がCFRの大きな特徴です。
CFRの基本的な使い方:
java -jar cfr.jar target.jar –outputdir ./output
→ target.jarを逆コンパイルしてoutputディレクトリにソースコードを出力する。
出力されたソースコードはoutputディレクトリにパッケージ構造を保ったまま保存されるため、大規模なJARファイルの解析にも向いています。
GUIはありませんが、コマンドラインに慣れている方にとっては非常に使いやすいツールです。
AndroidアプリのデコンパイルにはJadxが便利
AndroidアプリのAPKファイルを逆コンパイルする場合には、Jadxが広く使われています。
JadxはAPKファイル内のDEXバイトコードをJavaソースコードに変換する機能を持ち、GUIとコマンドラインの両方に対応しています。
Jadxの基本的な使い方(GUI版):
①jadx-guiを起動する
②解析したいAPKファイルを開く
③パッケージツリーからクラスを選択してJavaコードを確認する
AndroidアプリのセキュリティテストやAPKの動作確認など、モバイルアプリ解析の場面で非常に役立つツールです。
リソースファイルやAndroidManifest.xmlの内容も同時に確認できるため、アプリ全体の構造把握にも活用できます。
EXE・DLLの逆コンパイルツールの種類と使い方
続いては、EXEファイルやDLLファイルの逆コンパイルに使われる代表的なツールを確認していきます。
ネイティブバイナリの解析にはJavaとは異なる専用ツールが必要です。
Ghidraの特徴と使い方
GhidraはNSA(米国国家安全保障局)が開発・公開した無償のリバースエンジニアリングツールで、EXE・DLL・ELFなど幅広いバイナリ形式に対応しています。
ディスアセンブラとデコンパイラの両機能を備えており、C言語に近いソースコードへの復元が可能です。
Ghidraの基本的な使い方:
①Ghidraを起動してプロジェクトを作成する
②解析したいEXEまたはDLLファイルをインポートする
③Auto Analyzeを実行して自動解析を行う
④CodeBrowserでアセンブリコードとデコンパイル結果を確認する
無償でありながら高機能なため、セキュリティ研究者・学生・マルウェアアナリストなど幅広いユーザーに使われています。
スクリプト機能を使った解析の自動化にも対応しており、大量のバイナリを効率的に解析することも可能です。
IDA Proの特徴
IDA Proはプロフェッショナルなセキュリティ解析の現場で長年使われてきた高機能なディスアセンブラ・デコンパイラです。
対応するCPUアーキテクチャ・ファイル形式の幅広さと、解析精度の高さがIDA Proの最大の強みです。
有償ツールですが、無償版のIDA FreelyやIDA Free(機能制限あり)も提供されているため、まず無償版で試してみることができます。
マルウェア解析・脆弱性調査・CTF(セキュリティコンテスト)など、高度な解析が求められる場面での活用が中心です。
.NETアセンブリにはdnSpyとILSpyが有効
C#やVB.NETで開発されたEXE・DLLは.NETアセンブリ形式であり、dnSpyやILSpyといった専用ツールで逆コンパイルできます。
dnSpyは.NETアセンブリのデコンパイル・編集・デバッグまで対応した高機能ツールで、復元されるC#コードの品質が高いことで知られています。
dnSpyの基本的な使い方:
①dnSpyを起動する
②解析したい.exeまたは.dllファイルをドラッグ&ドロップで読み込む
③左側のツリーからクラスや関数を選択してC#コードを確認する
ILSpyはオープンソースの.NETデコンパイラで、Visual Studioの拡張機能としても利用可能です。
.NETアセンブリの解析には、まずdnSpyまたはILSpyを試してみることをおすすめします。
逆アセンブルとの違いと使い分け
続いては、逆コンパイルと逆アセンブルの違いと使い分けについて確認していきます。
両者の役割を正しく理解することで、解析作業を効率よく進めることができます。
逆アセンブルとは何か
逆アセンブルとは、機械語のバイナリコードをアセンブリ言語に変換する処理のことです。
逆コンパイルがC言語やJavaなどの高水準言語への復元を目指すのに対し、逆アセンブルは機械語を人間が読めるアセンブリ言語レベルに変換するにとどまります。
逆アセンブルで得られるコードは機械語に近い低レベルな表現であるため、読み解くにはアセンブリ言語の知識が必要です。
代表的な逆アセンブラとしてはobjdump・x64dbg・Ghidra(ディスアセンブル機能)などが挙げられます。
逆コンパイルと逆アセンブルの使い分け
逆コンパイルと逆アセンブルはどちらか一方だけを使うのではなく、解析の目的と対象ファイルの種類によって使い分け・組み合わせるのが実践的なアプローチです。
プログラムの全体的な動作フローや使用しているアルゴリズムを把握したい場合は、まず逆コンパイルで高水準なコードを確認するのが効率的です。
特定の関数の詳細な動作や最適化されたコードの正確な挙動を確認したい場合は、逆アセンブルで詳細を確認します。
GhidraやIDA Proのように両機能を備えたツールを使うことで、同一のツール上でシームレスに両方の解析ができます。
逆コンパイルツール活用時の注意点
逆コンパイルツールを使用する際には、対象ソフトウェアの著作権・ライセンス・利用規約を事前に確認することが必須です。
自分が権利を持つソフトウェアや、セキュリティ調査などの正当な目的に限って使用することが法的リスクを避けるための基本的なルールです。
また、マルウェアを解析する場合は仮想マシン上で作業を行い、解析対象のファイルが実行されても本番環境に影響が出ないよう安全な環境を用意することが重要です。
正しい目的と方法でツールを活用することが、逆コンパイルを安全かつ有効に使うための大前提です。
まとめ
この記事では、逆コンパイルのツールの種類と使い方、Java・EXE・DLL別の対応ツール、逆アセンブルとの違いについて解説しました。
逆コンパイルツールは対象ファイルの種類によって選び方が異なり、JavaにはJD-GUI・CFR・Jadx、EXEやDLLにはGhidra・IDA Pro・dnSpyなどが代表的なツールです。
逆コンパイルは高水準言語へのソースコード復元を目指し、逆アセンブルはアセンブリ言語レベルへの変換にとどまるという違いを押さえておきましょう。
ツールを活用する際は著作権や利用規約を必ず確認し、正当な目的のもとで安全に使用することが重要です。
逆コンパイルツールの知識を深めて、セキュリティ解析やソフトウェア調査にぜひ役立てていただければ幸いです。