ネットワークスペシャリスト 2014年 午前2 問25
問題文
ソフトウェアのリバースエンジニアリングの説明はどれか。
選択肢
ア:開発支援ツールなどを用いて、設計情報からソースコードを自動生成する。
イ:外部から見たときの振る舞いを変えずに、ソフトウェアの内部構造を変える。
ウ:既存のソフトウェアを解析し、その仕様や構造を明らかにする。(正解)
エ:既存のソフトウェアを分析し理解した上で、ソフトウェア全体を新しく構築し直す。
ソフトウェアのリバースエンジニアリングとは何か【午前2 解説】
正解の理由
選択肢ウ「既存のソフトウェアを解析し、その仕様や構造を明らかにする。」が正解です。リバースエンジニアリングはソフトウェアの実行バイナリやコード、ドキュメントから設計意図や仕様、アルゴリズム、データ構造などを逆算して抽出する作業を指します。目的は理解・検証・互換性確保・セキュリティ解析など多岐にわたりますが、本質は「完成された成果物から設計情報を取り出す」点にあります。
解法ステップ
- 問題文で「リバース(逆向き)」の意味を確認する。
- 選択肢を「解析・理解」「生成」「構造変更」「再構築」に分類する。
- リバースエンジニアリングは「解析・理解」に該当する選択肢を選ぶ。
- 他選択肢が指す技術(自動生成、リファクタリング、再実装)との違いを論理的に除外する。
選択肢別の誤答解説
- ア: 「開発支援ツールなどを用いて、設計情報からソースコードを自動生成する。」
- 誤り。これはモデル駆動開発やコード生成であり、設計→実装の順で進むフォワード工程です。リバースとは逆方向です。
- イ: 「外部から見たときの振る舞いを変えずに、ソフトウェアの内部構造を変える。」
- 誤り。これはリファクタリング(またはリビルド時のリファクタ)に該当します。目的は保守性向上であり、解析そのものではありません。
- ウ: 「既存のソフトウェアを解析し、その仕様や構造を明らかにする。」
- 正解。リバースエンジニアリングの定義そのものです。ウ
- エ: 「既存のソフトウェアを分析し理解した上で、ソフトウェア全体を新しく構築し直す。」
- 誤り。これはリバースエンジニアリングの結果を踏まえた「再実装(リライト)」や「マイグレーション」に当たります。解析自体と混同しないようにします。
よくある誤解
- 「コードを自動生成すること」と混同する誤解:これはフォワード的な生成(設計→コード)でありリバースとは逆です。
- 「動作を変えずに構造だけ変える(リファクタリング)」と混同する誤解:リファクタリングはソースがある前提で可読性や保守性の改善を目的とする行為で、解析目的とは異なります。
- 「全体を作り直す(再実装)」もリバースとは別物:再実装は解析後の成果を基に新規に構築する行為で、リバース自体の定義とは区別されます。
補足コラム
リバースエンジニアリングは法的・倫理的な側面も重要です。ソフトウェアの著作権やライセンスにより解析行為が制限される場合があります。セキュリティ解析や互換性確保のために正当な理由で実施することが多いですが、実施前に契約や法令、社内ポリシーを確認することが必要です。また、解析手法は静的解析(バイナリ解析、ソース逆コンパイル)や動的解析(実行時トレース、デバッグ)などに分かれます。
FAQ
Q: リバースエンジニアリングとデコンパイルは同じですか?
A: 完全に同じではありません。デコンパイルはバイナリから高水準言語に変換する具体的な技術で、リバースエンジニアリングはそれを含む広い解析プロセスです。
A: 完全に同じではありません。デコンパイルはバイナリから高水準言語に変換する具体的な技術で、リバースエンジニアリングはそれを含む広い解析プロセスです。
Q: リバースエンジニアリングはいつ使うのですか?
A: 互換性確保、レガシー解析、セキュリティ脆弱性発見、盗用調査など目的が多岐にわたります。法的制約に注意が必要です。
A: 互換性確保、レガシー解析、セキュリティ脆弱性発見、盗用調査など目的が多岐にわたります。法的制約に注意が必要です。
Q: リファクタリングとリバースの違いは?
A: リファクタリングはソースが存在する状態で構造を改善すること、リバースは存在物から設計情報を抽出して理解することです。
A: リファクタリングはソースが存在する状態で構造を改善すること、リバースは存在物から設計情報を抽出して理解することです。
関連キーワード: リバースエンジニアリング、デコンパイル、静的解析、動的解析、リファクタリング、再実装、ソフトウェア解析

\ せっかくなら /
ネットワークスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

