逆コンパイラ
逆コンパイラ(ぎゃくコンパイラ、英: Decompiler)とは、機械語で記述されたオブジェクトコードを解析し、人間にわかりやすいソースコードを作成するプログラムである。
概要
[編集]人間がプログラムを作成するときには C や Java といった高水準言語を用い、それをコンパイラによって機械語へ翻訳することで、コンピュータが理解できるオブジェクトコードが作成される(コンパイル)。逆コンパイルとは、オブジェクトコードを解析し、対応するソースコードを作成することである。コンパイルと逆の操作を行うため逆コンパイラと呼ばれる。
「逆-」という名称が用いられているが、一部の情報はコンパイルの過程で不可逆的に失われるため, バイナリを生成したオリジナルのソースコードを復元することは困難であり、コメントや変数名、一部の制御フロー等は復元されない。Java や .NET Framework を始めとした仮想マシンのバイトコードを高級言語に復元することはネイティブコードのそれに対して容易な傾向にあるものの、難読化されてる場合は困難となる。
2020年代後半には大規模言語モデル (LLM) の進化によって関数名や変数名の推測などの高度な逆コンパイルが可能となった。
逆コンパイルと法律
[編集]平成30年に著作権法改正により柔軟な権利制限規定がされ、ソフトウェアの開発元が定める利用規約等によって、公開されているプログラムに対して逆コンパイル等のリバースエンジニアリングを行うことを禁じている場合でも著作権侵害とならないと解される[1]、規約との関係については注意する必要がある。
EU では Directive on the legal protection of computer programs[2]の6条において、いくつかの条件のもとで逆コンパイルに権利者の許可が不要であると規定している。また9条の規定で、6条に反する契約条項は無効 (null and void) とされている。
主要な逆コンパイラ
[編集]汎用
[編集]- JEB decompiler - Android、Intel(x86/x86-64)、WebAssembly、Ethereum 等の逆コンパイラ
ネイティブコード向け
[編集]- 現行
- Ghidra
- IDA Pro
- Binary Ninja
- Hopper - MacOS向け
- LLM4Decompile - アセンブラからC言語への変換に特化した大規模言語モデル (LLM)
- 過去
- Boomerang Decompiler - オープンソースの逆コンパイラ
- REC Studio 4
.NET Framework 向け
[編集]- 現行
- ILSpy
- dotPeek
- 過去
Java 向け
[編集]- 現行
- Fernflower
- CFR
- 過去
- JAD
- Procyon
- JD Decompiler