リバースエンジニアリングとは|ソフトの仕組みを解析する技術を解説
リバースエンジニアリングとは、既存のソフトウェアやハードウェアを分解・解析して動作原理や構造を解き明かす技術のこと。動的解析と静的解析の違い、GhidraやIDAといった定番ツール、合法性の考え方まで、レトロソフト解析が趣味の視点から解説します。
はじめに
リバースエンジニアリングとは、ひとことで言えば「既存のソフトウェアやハードウェアを分解・解析して、その仕組みを解き明かす技術」のことだ。
「このソフト、どういう仕組みで動いているんだろう」と思ったことはないだろうか。
私はよくある。
当然、いま手元で動くソフトウェアは、もともと誰かの手によってプログラムされ、コンパイルされたものである。特に古いソフトウェアは機械語やアセンブリ言語といった低水準の言語、あるいはC言語などの古典的な言語で書かれ、比較的最近のものになるとJavaやC++といった現代も第一線で活躍する言語で書かれていることが多い。しかし、どんな言語を使っていようと、コンピュータという仕組みの上では、最終的に機械語がプログラムを支配している。ゆえに、ソフトウェアの裏側にある機械語の命令を理解できれば、どんなソフトウェアであれその仕組みを解明することが可能なのである。
一般に、仕組みを解析する技術のことを「リバースエンジニアリング」と呼ぶ。 ソフトウェアの仕組みを解析することも立派なリバースエンジニアリングである。
本記事においては、主に私が趣味としている「リバースエンジニアリング」について解説していきたい。
リバースエンジニアリングとは何か?
辞書的な定義
「他社の開発した製品やソフトウェアを分解または解析することにより、そのアイデアなどを抜き出して、自社製品に利用する技術。」 ―デジタル大辞泉 より引用
といった感じで、ネットの辞書の上では、商業的な切り口から「リバースエンジニアリング」を説明している。
しかし、一般的に使用される「リバースエンジニアリング」とは必ずしも商業的側面に即していないため、誤解を避けるためにこの記事における「リバースエンジニアリング」の定義を定めておきたい。
この記事における「リバースエンジニアリング」定義
"既存のハードウェアやソフトウェアを分解・解析し、その動作原理、構造、仕様、設計情報などを解き明かす技術"
と定義させていただきたい。
すなわち、そこに商業的な意味合いはなく、ただただ個人的な趣味としてハードウェアやソフトウェアの仕組みを解明するための技術として認識していただきたい。
リバースエンジニアリングの合法性
リバースエンジニアリングの合法性についてはたびたび議論されるが、仮に製作者が規約として禁止していたとしても、個人利用や研究目的の範囲内においては認められるケースも多い。しかし、商業的理由からリバースエンジニアリングを施すことは違法性が高いため注意してほしい。
リバースエンジニアリングの合法性については、いずれ別記事で詳しく扱いたいと思っている。
ソフトウェアにおけるリバースエンジニアリングの手法
リバースエンジニアリングの手法は主に二つに分かれる。
法的な問題から、具体的なリバースエンジニアリングの手法を解説することはできないため、主に概念的な手段について説明していこうと思う。
動的解析
動作しているソフトウェアの動きを追跡し、その仕組みを解析していく手法を動的解析という。
動的解析に用いるツールの例として、
-
デバッガー
-
API・システムコールトレース
- プログラムがOSに対して「ファイルを書き換える」「ネット通信をする」「レジストリを変更する」といった要求(システムコール/API呼び出し)を出す瞬間をすべて記録・可視化するツール
- スマホアプリやデスクトップアプリはこれ
-
ネットワークトラフィック解析
- 対象のソフトが「どこのサーバーと、どんなデータを送受信しているか」をキャプチャして解析するツール
- Webアプリなどはこれ
といったツールを使用していくことが一般的である。
静的解析
プログラムを一切実行せずに、ファイルそのものを分解・可視化して、内部の構造やロジックを読み解く手法を静的解析という。
静的解析の手法は覇権的ツールが2つあるため、具体的なツール名で説明していく。 アーキテクチャの対応などはあるが、どちらを使ってもほとんど大差がない。
-
- NSA(アメリカ国家安全保障局)がサイバーセキュリティ業務のために長年自社開発していたツールで、2019年にオープンソースとして一般公開された
-
IDA
- Hex-Rays社(ベルギーの民間企業)が開発・販売するプロ・商用リバースエンジニアリングの業界標準的ツール
- 「IDA Pro」は非常に高額(年間数十万〜数百万円)であるが、機能を制限した無料版の「IDA Free」もある
Ghidraについては解説記事公開予定
実は、Stirlingなどのバイナリエディタも静的解析ツールの一端である。
Stirlingについての解説記事はこちら↓
Stirlingとは|定番の無料バイナリエディタを解説【Windows】
静的解析が9割
解析の方向性としては、静的解析→動的解析が一般的である。
しかも、静的解析だけで済む例も多く存在する。
動的解析に進むのは、暗号化・難読化などの防御機構がソフトウェアに施されている場合である。私自身は防御機構が施されたソフトウェアにはまだまだ手を出す予定がないので、そこは専門外である。
リバースエンジニアリングのすゝめ
私自身は、主にレトロゲームの解析や古いソフトウェアの解析としてリバースエンジニアリングをしている。
理由は純粋に古い情報技術やソフトが好きだからであるが、実は副次的な利点がある。
それは先ほど述べた防御機構がソフトに施されていない場合が多いことである。防御機構がないソフトは静的解析だけでかなり多くの情報を得ることが可能であるため、リバースエンジニアリングに最適だったりする。
リバースエンジニアリングは使い方を間違えると危ういが、合法的な範囲で行いさえすれば、なんら恐れることはない。なので、少しでも「仕組みが気になる、中身が気になる」と思うソフトがあるなら、ぜひ一度挑戦してみてほしい。