リバースエンジニアリング
完成したソフトウェアや機器を解析して、その仕様や設計、仕組みを明らかにすること。ソフトウェアの保守では、ソースプログラムを解析して、仕様書や設計書を作るのに使う。
イマシルちゃんの解説
おもちゃの車を分解して、「中はこうなってたのか!」って調べたことはあるかな?
ふつうは、設計図を書いてから物を作るけど、
すでにある物から、逆向きに設計図を作り出すこともできるんだ。
説明書がなくなっちゃった古いプログラムを直すときなんかに、とても役に立つんだよ。
より深い解説
定義
リバースエンジニアリングは、通常の開発(仕様 → 設計 → プログラム)とは逆の方向に、既存のプログラムや製品から、設計や仕様の情報を取り出す技術である。
ソフトウェアの保守での使われ方
長く使われているシステムでは、仕様書が残っていなかったり、プログラムと食い違っていたりすることが多い。そこで、ソースプログラムを解析して、次のような情報を取り出す。
- プログラムの仕様書
- モジュールの構造図、呼出し関係
- データベースの構造(E-R図)
関連する用語
| 用語 | 内容 |
|---|---|
| リバースエンジニアリング | ソースプログラムを解析して、仕様書や設計書を作る |
| フォワードエンジニアリング | 仕様や設計から、プログラムを作る(通常の開発の方向) |
| リエンジニアリング | リバースエンジニアリングで得た仕様をもとに、改良したうえで、フォワードエンジニアリングで作り直す |
| リストラクチャリング | 機能を変えずに、プログラムを構造化されたものに変換する |
| リファクタリング | 外から見た動作を変えずに、プログラムの内部の構造を分かりやすく改善する |
| 影響分析 | ソースプログラムを探索して、修正する箇所や影響の範囲を調べる |
セキュリティでの使われ方
| 場面 | 内容 |
|---|---|
| マルウェアの解析 | 実行ファイルを逆アセンブル、逆コンパイルして、動きや通信先を明らかにする |
| 脆弱性の調査 | 製品の動作を解析して、弱点を探す |
| 互換性の確保 | 公開されていない通信の形式などを解析して、相互に接続できるようにする |
注意点
市販のソフトウェアの使用許諾契約で、リバースエンジニアリングが禁止されていることがある。また、解析して得た情報の使い方によっては、著作権や不正競争防止法などの問題になるおそれがある。