対象試験と出題頻度

リバースエンジニアリングは、ITパスポート・基本情報技術者・応用情報技術者の3区分すべてで出題されるテーマです。

ソフトウェア開発手法の比較問題として定番化しており、「フォワードエンジニアリング」「リファクタリング」「リエンジニアリング」との違いを正確に区別できるかが問われます。

詳細をクリックして確認
対象試験:
ITパスポート
基本情報技術者
応用情報技術者
出題頻度:
★★★☆☆
ランクB(標準)覚えておくと有利

用語の定義

情報処理試験を勉強していると、「リバースエンジニアリングって結局、何を逆にしているの?」と混乱しがちです。

リバースエンジニアリング(Reverse Engineering)とは、一言で言うと

 「完成した製品やソフトウェアを分解・解析し、その設計情報や仕様を抽出する技術

のことです。

イメージとしては、完成したケーキを一口ずつ味見してレシピを推測する作業です。

レシピ(設計書)が手元にないケーキ(完成品)を、味・食感・断面から「小麦粉はこのくらい、砂糖はこのくらい、焼成温度は…」と逆算して再現可能な形にまとめます。

ソフトウェア開発でも同じ発想で、実行可能ファイルやソースコードから「どんな設計でできているのか」を逆方向にたどります。

📊 リバースエンジニアリングの基本情報

項目 内容
英語名 Reverse Engineering
分野 ソフトウェア開発技術/保守
主な目的 既存システムの仕様把握、保守、移植、互換品開発
対義語 フォワードエンジニアリング(設計書→実装の通常方向)

解説

長く運用されているシステムの中には、設計書が紛失していたり、書かれた当時の担当者がすでに退職していたりするものが少なくありません。

こうした「動いているけれど中身が分からない」システムを保守・改修するには、現存する成果物(実行ファイルやソースコード)から仕様を読み解くしかありません。

これがリバースエンジニアリングが必要とされる背景です。

フォワードとリバースの方向性

通常の開発(フォワードエンジニアリング)とは矢印の向きが逆になります。

開発方向の対比図

同じ4つの成果物を、上から下へ作るのがフォワード/下から上へさかのぼるのがリバース

⬇ フォワード
作りたいもの → 動く製品
⬆ リバース
手元の製品 → 仕様の復元
①最初に決める ▶
要件定義
④最後に判明 ◀
②次に書く ▶
設計書
③構造を推定 ◀
③実装する ▶
ソースコード
②逆コンパイル ◀
④ビルドして完成 ▶
実行ファイル
①手元にあるのはこれだけ ◀

💡 中央の4つは共通の成果物
違いは「上から順に作るか」「下から順にたどるか」だけ。

主な手法

ソフトウェアを対象とする場合、代表的な手法は次の3つです。

手法 内容
逆コンパイル
(Decompile)
実行ファイル(バイナリ)から高水準言語のソースコードを復元する
逆アセンブル
(Disassemble)
機械語からアセンブリ言語への変換。逆コンパイルより低レベル
静的/動的解析 コードを読むだけ(静的)/実際に動かして挙動を観察する(動的)

具体的なコマンドのイメージとしては、Linux環境では次のように使われます。

# 実行ファイルを逆アセンブルして機械語の中身を確認
$ objdump -d ./sample.bin

# Javaのclassファイルから疑似ソースを復元(逆コンパイル)
$ javap -c SampleClass.class

関連用語との比較

混同しやすい3つの用語を、目的の違いで整理します。

用語 目的 見分けキーワード
リバースエンジニアリング 成果物から設計情報を抽出する 解析、抽出、復元
リエンジニアリング 既存システムを解析した上で再構築する(リバース+フォワード) 作り直し、再構築
リファクタリング 外部仕様を変えずに内部構造だけを改善する 機能維持、内部整理
マイグレーション 別環境・別プラットフォームへ移行する 移行、プラットフォーム変更

法的な注意点

リバースエンジニアリングは技術的に可能でも、法的にはグレーになる場合があります。

市販ソフトウェアの利用規約(EULA)で禁止されているケースが多く、無断で行うと著作権法違反や契約違反に問われます。

互換性確保や脆弱性研究など、一定の正当な目的に限り認められるのが一般的な扱いです。

💡 リバースエンジニアリングの核心を3行で

・成果物(実行ファイル等)から設計情報を逆算して取り出す技術
・主な手法は逆コンパイル・逆アセンブル・静的/動的解析
・リエンジニアリング、リファクタリングとは目的・範囲が異なる

では、この用語が試験でどのように出題されるか見ていきましょう。


試験ではこう出る!

IP・FE・APの午前問題で繰り返し登場します。出題パターンは2つです。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
IP R4
問42
「既存ソフトウェアを解析して仕様や構造を明らかにすること」を表す用語を選ぶ問題。 ・正解は「リバースエンジニアリング」
・リファクタリング・マイグレーションがひっかけ
FE H30秋
問47
既存プログラムから仕様を導き出し、新システム開発に役立てる手法を問う。 ・キーワード「既存」「仕様の抽出」
・フォワードエンジニアリングと真逆である点を狙う
AP R元秋
問46
リエンジニアリングとの違いを問う問題。 ・リバース=解析まで/リエンジニアリング=再構築まで
・範囲の違いがポイント

📝 IPA試験での出題パターン

パターン1:「用語の説明を選べ」
4つの開発手法の説明文が並び、リバースエンジニアリングに該当するものを選ぶ形式。キーワードは「既存の成果物」「解析」「仕様の抽出」。「内部構造を整理(リファクタリング)」「環境を移す(マイグレーション)」「再構築する(リエンジニアリング)」がひっかけとして頻出します。

 

パターン2:「目的・用途を選べ」
「設計書がない既存システムを保守するために行う作業は何か」のように、用途から逆引きさせる形式。ソースコードしか残っていない状況で仕様を取り戻す目的、と覚えておけば対応できます。

 

ここまででOKです。逆コンパイラの具体的なツール名や法的な細部までは問われないので、深追いは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. ソフトウェア開発における「リバースエンジニアリング」の説明として、最も適切なものはどれでしょうか?

  • A. プログラムの外部から見た振る舞いを変えずに、内部の構造だけを整理して可読性や保守性を高める作業のこと。
  • B. 既存のソフトウェアの実行ファイルやソースコードを解析し、その設計情報や仕様を抽出する技術のこと。
  • C. 稼働中のシステムを別のハードウェアやOS、クラウド環境などへ移行する作業のこと。

正解と解説を見る

正解:B

解説:
リバースエンジニアリングは、完成したソフトウェアから設計情報を逆方向にたどって取り出す技術です。「既存」「解析」「仕様の抽出」というキーワードが揃っている選択肢Bが正解になります。

選択肢Aはリファクタリングの説明です。外部仕様を保ったまま内部のコード構造を改善する作業であり、設計情報の抽出は目的としていません。選択肢Cはマイグレーションの説明です。システムを別環境へ移すことが主眼であり、解析や仕様の復元を主目的とする手法ではありません。


よくある質問(FAQ)

Q. リバースエンジニアリングは違法ですか?

行為自体が一律に違法というわけではありません。日本の著作権法では、互換性確保やセキュリティ脆弱性の調査など一定の目的に限り認められる方向で整備が進んでいます。一方、多くの市販ソフトのEULA(使用許諾契約)では明示的に禁止されており、契約違反に問われるリスクがあります。実務では「正当な業務目的か」「契約で禁止されていないか」を必ず確認してください。

Q. ハードウェア製品にもリバースエンジニアリングはありますか?

あります。ICチップを薬品で削って内部回路を撮影する、製品を分解して部品配置を調査するといった手法があり、半導体業界や自動車業界で競合分析や互換部品開発に使われます。IPA試験で扱われるのは主にソフトウェア領域ですが、語源としてはハードウェア解析が先です。

Q. マルウェア解析もリバースエンジニアリングに含まれますか?

含まれます。セキュリティアナリストは未知のマルウェアの実行ファイルを逆アセンブルし、通信先や攻撃手法を特定します。これは防御目的の代表的な活用例で、情報処理安全確保支援士の試験範囲でも触れられる領域です。攻撃者側もソフトの脆弱性を探すために同じ技術を使うため、「攻撃にも防御にも使える両刃の剣」と理解しておくと整理しやすくなります。

Q. 解析を防ぐ技術にはどんなものがありますか?

代表的なのが「コードの難読化(Obfuscation)」です。変数名を意味のない文字列に置き換えたり、制御フローを意図的に複雑化したりして、逆コンパイル後の可読性を著しく下げます。また実行ファイルを暗号化して動作時にだけ復号する「パッカー」、デバッガが接続されていることを検知する「アンチデバッグ」も同じ目的で使われます。