はじめに
組み込みデバイスやIoT機器には、多くの場合、内部にファームウェアや設定情報を保存するフラッシュメモリが搭載されています。
特に、**SPI(Serial Peripheral Interface)**という規格で接続されたフラッシュメモリは、小型かつ高速な通信を特徴とし、幅広い製品で採用されています。
本記事では、SPIフラッシュダンプとは何か、その目的、仕組み、活用される場面について、わかりやすく解説します。
SPIフラッシュダンプとは?
SPIフラッシュダンプとは、
SPI接続されたフラッシュメモリから保存されている全データを読み出してファイル化する作業を指します。
このダンプ(dump)作業によって、ファームウェア、設定情報、シリアル番号、暗号鍵など、
デバイスの動作に関わる内部データを丸ごと取得することが可能になります。
通常、データはバイナリ形式(.binファイルなど)で保存され、後から解析やバックアップに利用されます。
SPIとは?
**SPI(Serial Peripheral Interface)**は、
マイコンと周辺機器(フラッシュメモリ、センサーなど)を接続するためのシリアル通信プロトコルです。
特徴としては、
- 高速な通信速度
- フルデュプレックス通信(同時に送受信可能)
- シンプルな配線(4本:MOSI, MISO, SCLK, CS)
などがあり、組み込み機器に最適な規格となっています。
なぜSPIフラッシュダンプを行うのか?
SPIフラッシュダンプは、以下のような目的で実施されます。
目的 | 内容 |
---|---|
ファームウェア解析 | デバイス内部のソフトウェア動作やプロトコル仕様を調査するため |
バックアップ作成 | 破損やアップデート失敗時に備え、元の状態を保存しておくため |
デバイスのクローン作成 | 同じハードウェアを複製・再現するため |
セキュリティ調査 | ハッキングや脆弱性診断のため、内部データを抽出・分析するため |
近年では、セキュリティリサーチやリバースエンジニアリングの分野で、
ファームウェアレベルからの脆弱性発見に活用されるケースが増えています。
概要
SPI (Serial Peripheral Interface) からファームウェアを抽出できる可能性がある。 マスターとスレーブ間で通信を行い、4種類の信号線を使用する。

- SCLK / SCK (Serial Clock) 同期を取るための信号線。 通常はマスター→スレーブの一方向
- MISO (Master In Slave Out) スレーブからマスタにデータを転送する信号線
- MOSI (Master Out Slave In) マスタからスレーブにデータを転送する信号線
- SS / CS (Slave Select / Chip Select) マスタが通信相手のスレーブを選択するための信号線
使用するツール
手順
ピン配置確認
チップからデータシートを調べ、ピン配置を確認する。


Attify Badgeとの接続
確認した配列をもとにクリップとAttify Badgeを以下のように接続する。
Num | Flash Chip Pin | Attify Badge Pin |
---|---|---|
1 | CS | D3 |
2 | SI/SIO1 (MISO) | D1 |
3 | WP/SIO2 | 3.3V |
4 | GND | GND |
5 | SO/SIO0 (MOSI) | D2 |
6 | SCLK | D0 |
7 | RESET/SIO3 | 3.3V |
8 | VCC | 3.3V |

クリップとチップの接続
チップの横に丸マークがあるのが1番のCSになり、赤紫のケーブル部と接続する。


クリップとPCの接続
USBでPCと接続し、Attify Badgeが認識されていることを確認する。 下記では、「/dev/ttyUSB0」で認識されているのを確認したものになる。
% ls /dev/ttyUSB0
/dev/ttyUSB0
spiflash.pyのインストール
必要なライブラリをインストールする。
% sudo apt install swig libftdi-dev python-dev
ツールをgitからダウンロードし、インストールを行う。
% git clone https://github.com/devttys0/libmpsse.git
/opt/libmpsse
% cd /opt/libmpsse/src
% ./configure
% make
% make install
「spiflash.py」を実行しダンプを行う。
$ sudo spiflash.py -s 5120000 -r dump.bin
FT232H Future Technology Devices International, Ltd initialized at 15000000 hertz
Reading 5120000 bytes starting at address 0x0...saved to dump.bin.
binwalkを使用して、ファイルの中身を確認する。
$ binwalk dump.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
6800 0x1A90 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 56784 bytes
46932 0xB754 Unix path: /5/G/Y/k/
61348 0xEFA4 Unix path: /a/D/V/h/z/
63847 0xF967 Unix path: /N/6/H/Z/l/~/
65552 0x10010 bzip2 compressed data, block size = 900k
131088 0x20010 bzip2 compressed data, block size = 900k
272408 0x42818 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 3309448 bytes
1376256 0x150000 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 1762631 bytes, 500 inodes, blocksize: 131072 bytes, created: 1902-06-11 17:04:00
3145666 0x2FFFC2 LZMA compressed data, properties: 0x5D, dictionary size: 131072 bytes, uncompressed size: 125132 bytes
3198077 0x30CC7D LZMA compressed data, properties: 0x5D, dictionary size: 131072 bytes, uncompressed size: 87020 bytes
3222549 0x312C15 LZMA compressed data, properties: 0x5D, dictionary size: 131072 bytes, uncompressed size: 100817 bytes
3261608 0x31C4A8 LZMA compressed data, properties: 0x5D, dictionary size: 131072 bytes, uncompressed size: 125452 bytes
4201104 0x401A90 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 56784 bytes
4241236 0x40B754 Unix path: /5/G/Y/k/
4255652 0x40EFA4 Unix path: /a/D/V/h/z/
4258151 0x40F967 Unix path: /N/6/H/Z/l/~/
4259856 0x410010 bzip2 compressed data, block size = 900k
4325392 0x420010 bzip2 compressed data, block size = 900k
4466712 0x442818 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 3309448 bytes
ddコマンドを使用してファームウェアを抽出する。
$ dd if=dump.bin skip=1376256 bs=1 count=$((3145666-1376256)) of=firmware.sfs
1769410+0 レコード入力
1769410+0 レコード出力
1769410 bytes (1.8 MB, 1.7 MiB) copied, 3.21036 s, 551 kB/s
$ file firmware.sfs
firmware.sfs: Squashfs filesystem, little endian, version 4.0, 1762631 bytes, 500 inodes, blocksize: 131072 bytes, created: Sat Jul 17 23:32:16 2038
あとは抽出したファームウェアを煮るなり焼くなりすればOK!
まとめ
SPIフラッシュダンプは、デバイス内部の情報を直接取得し、解析・保護・再利用するための強力な手段です。
組み込み機器やIoTデバイスのファームウェア調査において、不可欠なスキルのひとつと言えるでしょう。
正しい知識と技術、そして倫理観を持って活用することが重要です。