基本情報技術者 2012年 春期 午前(科目A) 問50
問題文
ソフトウェアのリバースエンジニアリングの説明はどれか。
選択肢
ア:CASEツールなどを用いて、設計情報からソースコードを自動生成する。
イ:外部から見たときの振る舞いを変えずに、ソフトウェアの内部構造を変える。
ウ:既存のソフトウェアを解析し、その仕様や構造を明らかにする。(正解)
エ:既存のソフトウェアを分析し理解した上で、ソフトウェア全体を新しく構築し直す。
🔒 解説は解答すると表示されます
リバースエンジニアリング【午前解説】
正解の理由
正解:ウ
選択肢ウは「既存のソフトウェアを解析し、その仕様や構造を明らかにする」とあり、これはリバースエンジニアリングの本質的な定義に合致します。リバースエンジニアリングは製品やバイナリから内部設計やプロトコル、アルゴリズムを逆算する活動であり、仕様抽出や設計理解が主目的です。
選択肢ウは「既存のソフトウェアを解析し、その仕様や構造を明らかにする」とあり、これはリバースエンジニアリングの本質的な定義に合致します。リバースエンジニアリングは製品やバイナリから内部設計やプロトコル、アルゴリズムを逆算する活動であり、仕様抽出や設計理解が主目的です。
解法ステップ
- 設問の動詞と目的を確認する(解析する/設計から生成する/振る舞いを変えないなど)。
- 「解析して仕様や構造を明らかにする=逆方向の理解」がリバースの定義であることを思い出す。
- 各選択肢を「目的(解析か生成か再構築か)」「手法(自動生成か静的解析か)」で比較し、解析目的の選択肢を選ぶ。
選択肢別の誤答解説
- ア: CASEツールなどを用いて、設計情報からソースコードを自動生成する。
→ これはフォワードエンジニアリング(モデル駆動開発やコード生成)であり、リバースではありません。 - イ: 外部から見たときの振る舞いを変えずに、ソフトウェアの内部構造を変える。
→ これはリファクタリング(またはリライトの一部)に該当し、目的が「改善」であって解析ではありません。 - ウ: 既存のソフトウェアを解析し、その仕様や構造を明らかにする。
→ これはリバースエンジニアリングの定義そのものであり正解です。 - エ: 既存のソフトウェアを分析し理解した上で、ソフトウェア全体を新しく構築し直す。
→ これはリエンジニアリング(再構築・リプレース)に近く、解析の後の再開発でありリバースの定義とは異なります。
よくある誤解
- リバースエンジニアリング=ソースコードの自動生成と考える誤解:自動生成はフォワード(設計→コード)の工程でありリバースではありません。
- リバースとリファクタリング・再構築を混同する誤解:リファクタリングは内部構造を変えて保守性を高めるが挙動は変えない。一方リバースは「理解する」行為です。
- リバースは常に違法という誤解:目的や対象、ライセンスにより合法性は変わるため、法的・倫理的確認が必要です。
補足コラム
- 主な手法:静的解析(バイナリ解析、逆アセンブル、デコンパイル)、動的解析(実行時トレース、デバッガ)、プロトコル解析など。
- 用途例:互換性確保のための仕様抽出、セキュリティ脆弱性の調査、レガシー保守のための設計理解。
- 法的・倫理的留意点:ライセンスや著作権、契約で禁止されている場合があるため、実施前に法務確認が必須です。
- リバースとリエンジニアリングの関係:リバースは「理解」が目的、リエンジニアリングはその結果を基に「改修・再構築」する工程を含みます。
FAQ
Q1: リバースエンジニアリングとデコンパイルは同じですか?
A1: デコンパイルはリバースで使われる具体的手法の一つで、バイナリから疑似ソースを生成して解析を助けますが、リバースはもっと広い概念です。
A1: デコンパイルはリバースで使われる具体的手法の一つで、バイナリから疑似ソースを生成して解析を助けますが、リバースはもっと広い概念です。
Q2: リバースを行えば必ずコードが得られますか?
A2: いいえ。解析結果は設計ドキュメント、仕様、フロー、擬似コード、あるいは部分的なソース推定など多様で、完全な元ソースが得られるとは限りません。
A2: いいえ。解析結果は設計ドキュメント、仕様、フロー、擬似コード、あるいは部分的なソース推定など多様で、完全な元ソースが得られるとは限りません。
Q3: 会社やプロダクトでやっても良いか心配です。どうすべきですか?
A3: まず対象ソフトウェアのライセンスや契約を確認し、必要なら法務・管理者の許可を得てください。安全で合法的な範囲でのみ実施します。
A3: まず対象ソフトウェアのライセンスや契約を確認し、必要なら法務・管理者の許可を得てください。安全で合法的な範囲でのみ実施します。
関連キーワード: リバースエンジニアリング、デコンパイル、逆アセンブル、静的解析、動的解析、プロトコル解析、リファクタリング、リエンジニアリング、ソフトウェア保守、セキュリティ解析

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

