辞書へ戻る概念の一覧

リバースエンジニアリング

りばーすえんじにありんぐ概念

完成した製品やプログラムを分解・解析して、その仕組みや設計を読み解く行為。ソフトウェアでは逆アセンブルなどで内部の動きを追う。古いソフトやゲームの「痕跡」を読む作業の中核であり、この営みの最大の武器。

年表

2019NSAが開発したGhidraオープンソースとして一般公開される(初回タグ Ghidra_9.0.1_build のコミット日時は2019年3月26日)

概要

既存のソフトウェアやハードウェアを分解・解析し、動作原理や構造、設計情報を解き明かす技術。商業的な模倣を指す場合もあるが、このブログでは「古いソフトの仕組みを個人的な好奇心から解明する趣味」として扱う。ソフトウェアの場合、最終的には機械語の命令を読み解く作業に行き着く。

種類・系譜

手法は大きく2つに分かれる。

  • 動的解析:動作しているソフトウェアの動きを追跡する。デバッガレジスタやメモリの変化を追う、API/システムコールの呼び出しを記録する、通信内容をキャプチャするなど
  • 静的解析:プログラムを実行せずファイル自体を分解・可視化して構造を読む。代表的ツールはGhidraとIDA

解析の順序は静的解析動的解析が一般的で、暗号化や難読化などの防御機構がない対象なら静的解析だけで多くの情報が得られる。

実例

静的解析の定番ツールは2つ。

  • Ghidra:NSA(アメリカ国家安全保障局)が長年自社開発し、2019年にオープンソースとして一般公開
  • IDA:ベルギーのHex-Rays社が開発・販売する商用ツール。「IDA Pro」は高額だが機能を絞った無料版「IDA Free」もある

Stirlingのようなバイナリエディタも、広い意味では静的解析ツールの一端である。

現在

防御機構が施されていない古いソフトウェアやレトロゲームは、静的解析だけで多くの情報が得られるため、今なお個人の解析対象として現役。Ghidraが無料で公開されたことで、商用のIDAに迫る解析環境を誰でも手にできるようになった。

分野解析
手法逆アセンブルほか

関連項目

  • アセンブリ言語機械語の命令を人が読める記号に置き換えた、最も低水準に近い言語。CPUの動きをそのまま書くため習得は難しいが、限界まで速度や容量を絞れる。レトロゲーム解析やROMハックでは、逆アセンブルした先で必ず出会う言語。
  • GhidraアメリカのNSA(国家安全保障局)が長年自社開発し、2019年にオープンソースとして一般公開したリバースエンジニアリングツール。コンパイル済みの実行ファイルを逆アセンブル・逆コンパイルし、機械語の塊からプログラムの構造を読み解ける。無料でありながら商用のIDAに匹敵する機能を持ち、静的解析の定番として一気に普及した。
  • IDA(IDA Pro)ベルギーのHex-Rays社が開発・販売する、商用リバースエンジニアリングの業界標準ツール。実行ファイルを逆アセンブルして解析する分野で長く事実上の定番だった。原型は1991年にIlfak Guilfanovが書いたDOS用ツールで、後に商用の「IDA Pro」へと育った。高機能版は年間数十万〜数百万円と高額だが、機能を絞った無料版「IDA Free」も提供されている。
  • Stirling世紀末に広く使われた、定番のバイナリエディタ。ファイルの中身を16進数で直接眺めて書き換えられる。並んだ数字の中に文字列やパスといった「人間が読める痕跡」が浮かび上がる瞬間に、低レイヤの面白さが詰まっている。
  • エミュレーションあるハードウェアの動きを別の機械の上でソフトウェアとして再現する技術。古いゲーム機やPCを今の環境で動かし、失われゆく作品やソフトを保存する役割も果たす。レトロゲーム解析にとっては欠かせない土台技術。
  • 静的解析プログラムを一切実行せずに、ファイルそのものを分解・可視化して内部の構造やロジックを読み解く手法。逆アセンブラやデコンパイラ(Ghidra・IDAなど)で機械語を読む。防御機構のない古いソフトはこれだけで多くの情報が得られ、リバースエンジニアリングの入口になる。
  • 動的解析実際に動いているプログラムの挙動を追いかけて仕組みを解き明かす手法。デバッガでCPUのレジスタやメモリを1ステップずつ追う、システムコールやネットワーク通信を記録するなど。暗号化・難読化で静的解析が阻まれる場合の次の一手になる。
  • デバッガプログラムを1ステップずつ実行しながら、CPUのレジスタやメモリ、アセンブリコードの動きを直接追跡・変更できるツール。本来はバグ取りの道具だが、動的解析やレトロゲームの解析でも中核的に使われる。
  • Tera Term日本発のターミナルエミュレータ。telnet/SSH接続やマクロ機能を備え、サーバ管理や組み込み開発の現場で長く定番として使われている。
  • マジコンゲーム機のカートリッジスロットに挿し、メモリーカード等に入れたデータを読み込ませる周辺機器の俗称。本来は自作プログラムやバックアップ用途の文脈で生まれた仕組みだが、市販ソフトの不正コピー実行に使われたことで社会問題化し、各国で法規制や裁判の対象となった。技術と権利・違法利用の関係を考える上で象徴的な存在。
  • Lunar Magic『スーパーマリオワールド』のステージ改造に特化した、海外発の定番ツール。ROMの内部データを読み解いてマップやグラフィックを編集でき、長年にわたり世界中のマリオ改造(ハック)文化を支えてきた。特定の一作に深く根を張った、解析ツールの一つの到達点。
  • 六角大王線画を描くだけで立体を作れる、独自の発想で知られた国産3Dモデリングソフト。2次元のドローツールと同じ要領で描いた絵から、左右対称性をもとに奥行きを自動計算して3D形状を起こす。1990年の雑誌掲載BASICプログラムに始まり、PC-9801版・Macintosh版を経てWindows版・製品版「六角大王Super」へ発展。人体モデリングに強く、キオ式初音ミクなどMMDのモデル作成にも使われ、後のVTuber文化の土台を下支えした。
  • YY-CHRレトロゲームのROMに入っているドット絵(キャラクタデータ)を直接見て編集できるツール。8ビット・16ビット機のグラフィック形式を扱え、ROM解析や改造の定番道具として親しまれている。

関連技術

この用語を扱った記事

リバースエンジニアリングとは|ソフトの仕組みを解析する技術を解説Stirlingの使い方|バイナリエディタでファイルを書き換えてみる「古さ」に宿るロマンと「古い情報技術」

出典