NationalSecurityAgency/ghidra
中身のわからない実行ファイルを、人が読める形に戻して調べる
どういうものか
配布されているソフトは、ほとんどがコンパイル済みの形で届く。人が書いた元のコードは手元になく、機械が実行するための並びだけがある。この状態から中身を読み解く作業をリバースエンジニアリングと呼ぶ。Ghidra は、その作業に必要な道具をひとまとめにした土台で、アメリカ国家安全保障局(NSA)の研究部門が作り、いまも手入れしている。Windows・macOS・Linux をはじめ、さまざまな環境向けにコンパイルされたコードを扱えると README にある。
できることは、逆アセンブル(機械語を命令の並びに戻す)、アセンブル、逆コンパイル(より高い水準のコードの形に起こす)、図として描く、スクリプトで動かす、ほか多数と README は並べている。対応している命令セットと実行ファイルの形式が幅広いことも特徴に挙がっている。使い方は2通りあり、画面を見ながら人が追っていく形と、自動で流す形の両方に対応する。利用者が自分で拡張機能やスクリプトを作ることもでき、その言語は Java と Python。
作られた背景も README に書かれている。規模が大きく、複数人で分担する解析でうまく回らなくなる問題を解くために作られ、研究の土台として手を入れやすいことを狙っている。NSA 自身は、悪意のあるコードの解析や、ネットワークや機器に潜む弱点を深く知るための道具として使ってきたとある。GitHub にこのリポジトリが置かれたのは2019年3月で、以来ずっと更新が続いている。
どんなときに使うか
手元の実行ファイルが何をしているのか確かめたいとき
出どころのはっきりしないファイル、仕様書の残っていない古いソフト、動きが説明と合わない実行ファイル。元のコードが手に入らない相手を調べるための入口になる。逆アセンブルから逆コンパイル、図示までが同じ土台にそろっていて、無償で使える。
同じ対象を複数人で分担して読み進めたいとき
README は、規模が大きく分担が必要な解析でつまずく問題を解くために作った、と書いている。ひとりで完結する読み解きよりも、複数人で進める場面を先に見ている作りだ、ということになる。
注意点
特定の版に既知の脆弱性がある、と README 自身が警告している。 「古いものだけ」とは書かれていない。使う前にリポジトリのセキュリティ勧告(Security Advisories)を読んで、自分が影響を受けるか確かめるように、と冒頭近くに書かれている。解析対象を読み込む道具なので、ここは飛ばさないほうがいい。
配布物のダウンロードを間違えやすい。 公式の配布ファイルは ghidra_<バージョン>_<リリース>_<日付>.zip という名前で、リリースページの「Assets」の中にある。「Source Code」と書かれたファイルはこれではないと README がわざわざ注意している。また、既にある導入先に上書きして展開してはいけないとも書かれている。
動かすのに Java が要る。 導入手順の1行目が「JDK 25 の64ビット版を入れる」になっている。自分でソースから組み立てる場合は、さらに Gradle(ネットにつながるなら同梱の wrapper で代えられる)・Python3・コンパイラ一式が要り、手順の重さが変わる。
スクリプトを書く環境は、組み上がった導入先が前提。 Eclipse 向けの GhidraDev と Visual Studio Code の連携は、リリースページから落として組み上がったものに対してのみ対応する、と README に明記されている。ライセンスは Apache-2.0。