リバースエンジニアリングは、製造業やソフトウェア開発において、既存の製品を分析してその背後にある技術や仕様書を導き出すアプローチです。ソフトウェア分野においては、プログラムの実行ファイル(バイナリコード)を解析し、人間が読める形式のプログラムコードに復元する作業を指します。具体的には、バイナリをアセンブリ言語に変換する「逆アセンブル(Disassemble)」や、C言語などの高水準言語に復元する「逆コンパイル(Decompile)」という手法が用いられます。この技術は、自社開発の古いシステムでソースコードが紛失してしまった場合の動作確認や、他社の特許侵害がないかの調査、またサイバーセキュリティにおいて、解析が難しい「コンピュータウイルス(マルウェア)」がどのような悪意ある挙動を行うかを特定する際などに不可欠な技術となっています。
基本情報技術者試験では、リバースエンジニアリングの定義と、その実施目的・法的な注意点が問われます。まず、「完成した製品やプログラムを解析し、設計書や仕様書、ソースコードなどを導き出すこと」という基本的な意味を捉えてください。また、試験での用途として「ドキュメントが残っていないレガシーシステムの再設計(保守・再構築)」や「セキュリティ解析」といった正当な目的が正解となります。一方で、著作権の侵害や不正競争防止法に抵触するような、他社製ソフトウェアの無断複製や技術の盗用(不正コピー、海賊版作成)は違法行為あるいは契約違反(EULAの禁止事項)に当たる点が出題のポイントです。
リバースエンジニアリングによって得られた設計情報をもとに、再びUMLなどを用いてシステムを綺麗に再設計して構築するプロセス(フォワードエンジニアリング)や、古いプログラムの内部を整理するリファクタリング、さらには開発工程における構成管理と関連があります。