コンテンツにスキップ

【ハンズオン3】ファームウェアの解析(前半)

前提条件

  • 仮想環境の起動が完了していること
  • 【ハンズオン2】が完了していること
    • 取り出したsave.binを使用する

手順

1. Arduino IDEを起動する

仮想環境のデスクトップにある「ghidra」アイコンをダブルクリックして起動する。 alt text

Ghidra User Agreementが初回表示されるので、内容を確認してI Agreeを押下する。

2. プロジェクトの作成

起動すると、Ghidraのプロジェクト一覧画面が表示される。 ErrorやTipsが表示された場合は、無視して閉じる(OKやCloseを押下)。

FileメニューからNew Project...を選択、設定値は以下のようにする。

項目
Project Type Non-Shared Project
Project Name 任意のプロジェクト名 (例: rpi-pico

3. 解析対象のファームウェアをインポート

FileメニューからImport File...を選択し、先ほど取り出したsave.binを選択し、Select File To Importを押下。 以下の画面が表示される。 alt text

画面が表示されたら、Languageの横にある...を押下し、下記項目を参考の上、適切な言語を選択する。

  • binファイルではアーキテクチャが自動選択されない
  • RP2040はARMアーキテクチャである
  • データシートを参照し、適切なVariantを選択する
  • https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf (2.4.2.2を参照)
  • EndianessはLittle Endianである

次にOptionsを押下し、Base Addressを10000000に設定する。 alt text

note: Base Addressを設定する理由

RP2040のメモリマップにおいて、0x10000000はフラッシュ領域の開始アドレスであるため、これに設定することで正しいアドレス空間で解析が行われる。

設定が完了したら、OKを押下する。 その後、Import Result Summaryが表示されるので、OKを押下する。

プロジェクトの一覧画面に戻ったら、save.binをダブルクリックして開く。

4. ファームウェアの解析の準備

Ghidraの画面が表示される。save.bin has not been analyzed .と表示されるので、YesAnalyzeを押下して解析を開始する。

解析完了後、画面を最上にスクロールし、以下のような逆アセンブルされたコードが表示されることを確認。 alt text

注意
  • 上記の図の通りでない場合、アーキテクチャやBase Addressの設定が誤っている可能性があるので、作成したプロジェクトを削除し、再度手順をやり直してください。
  • 解決が難しい場合、講師・チューターにお声がけください

この後、Ghidraの基本的な使い方を講義で確認し、後半に進む。