メモ書きです。また、ソフトウェアとハードウェア、製造業で意味が異なるので、内容はソフトウェアに絞っています。
リバースエンジニアリング
リバースエンジニアリングとは、すでに開発されたプロダクトを調査して、設計方法、ソースコード、データ定義などの仕様を明らかにすること。
真逆方向で開発をするので、日本語では「逆行工学」ともいう。
リバースエンジニアリングの目的
リバースエンジニアリングの目的としては以下のことが挙げられるでしょう。
改良や改善のための分析
他人の既存プロダクトをもとに、その構造や動作原理を分析することで、使われている技術やノウハウを学ぶことができる。
ドキュメント編集
開発から時間が経過していると、ドキュメントが更新されていない場合がある。そのため、リバースエンジニアリングを行い、共有可能なドキュメントを作成する。
脆弱性・バグ・技術的負債の発見
プロダクトの挙動や仕組みを把握することで、技術的負債を解消する手助けとなる。
また、レガシーシステムの修正にも役立つ。
リバースエンジニアリングの方法
主な手法は以下の通り。
情報収集
解析対象のソフトウェアがどのようなプラットフォームやアーキテクチャで作られているかを確認する。
そして、公開されているドキュメントがあれば確認し、ソフトウェアの基本的な動作や機能を理解する。
静的確認
バイナリファイルの解析や、コードの構造、関数の呼び出し関係、ファイル構造を把握する。
動的解析
ソフトウェアを実行し、デバッガを用いて実行中のプロセスを監視する。
Break Point を設定し、特定の関数やコードパスを詳細に解析する。
また、どのようなAPIが呼ばれているかを追跡する。
ドキュメント化
解析結果を文書化して、発見した内容をまとめる。
最後に
間違ってたら優しくコメントか編集リクエストしてください。
参考文献