mcpField
R
re-hardware-io

re-hardware-io

github.com/dslsdzc開発20649 回インストール2 週間前に更新
リポジトリ

re-hardware-io について

re-hardware-ioは、ファームウェアのリバースエンジニア向けハードウェアインターフェース分析スキルです。UART、JTAG/SWD、フラッシュ、ロジックアナライザーを使った情報取得を扱い、ハードウェア操作前の電圧確認とソフトウェア分析を優先します。

主な機能

  1. 01UARTデバッグと起動ログ取得
  2. 02JTAG/SWD接続とフラッシュダンプ
  3. 03SPIフラッシュチップの読み取り
  4. 04ロジックアナライザーによる信号取得
  5. 05インターフェース特定と電圧確認

活用シーン

  1. 01実機からのファームウェアイメージ抽出
  2. 02システム分析用の起動ログ取得
  3. 03JTAG/SWD接続のデバッグ
  4. 04基板上の通信信号の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dslsdzc/rev-skills --skill re-hardware-io

インストール後、Claude Code で/re-hardware-ioを入力して読み込まれたか確認します。

同梱ファイルreferences/commands.mdreferences/gotchas.md

詳細

ハードウェアインターフェース(JTAG / UART / Flash 読み取り)

使用する場合/しない場合

  • 使用する:実物のボードがあり、ファームウェアの抽出、起動ログの取得、ハードウェアデバッグが必要な場合
  • 使用する:JTAG/SWD デバッグ、UART シリアル通信、Flash チップの直接読み取り、ロジックアナライザーによる信号の取得
  • 使用しない:ファームウェアファイルしかない場合([[re-fw-extract]] を使用します。ハードウェアからの抽出は最後の手段です)
  • 使用しない:rootfs の解凍が済んでおり、静的解析だけが必要な場合([[re-fw-rootfs]] を使用します)
  • 使用しない:ファームウェアの実行が必要な場合(より安全で低コストな [[re-fw-emulate]] を先に試します)

ツールの準備

すべてのツールは使用前に動作確認してください。ハードウェア操作には高いリスクがあります。電源を入れる前に、マルチメーターで電圧レベルと共通グラウンドを測定し、シルク印刷を確認してください(落とし穴 3/4 を参照)。[[re-analyze/platform-tips]] に従い、まず実行可能な最も簡単な方法を試してください。ソフトウェアの手段(ファイル→展開→エミュレーション)を使い切ってから、ハードウェアに移ります。

openocd —— JTAG/SWD デバッグ
  • Linux: apt install openocd / dnf install openocd / pacman -S openocd
  • macOS: brew install openocd
  • Windows: choco install openocd(または公式 Windows ビルド)
  • 確認: openocd --version
picocom / minicom —— シリアルターミナル
  • Linux: apt install picocom(または apt install minicom)/ dnf install picocom / pacman -S picocom
  • macOS: brew install picocom
  • Windows: choco install putty(PuTTY はシリアル通信に対応)または WSL 内の Linux 版
  • 確認: picocom --version
flashrom —— Flash チップの読み取り
  • Linux: apt install flashrom / dnf install flashrom / pacman -S flashrom
  • macOS: brew install flashrom
  • Windows: 公式ビルドまたは WSL(プログラマー ch341a は WSL 内で flashrom -p ch341a_spi を使用します)
  • 確認: flashrom --version
ロジックアナライザー(sigrok-cli / pulseview)
  • Linux: apt install sigrok-cli pulseview / dnf install sigrok-cli pulseview / pacman -S sigrok-cli pulseview
  • macOS: brew install sigrok-cli pulseview
  • Windows: sigrok 公式 Windows インストーラー(sigrok.org)
  • 確認: sigrok-cli --version / pulseview --version
JTAGulator —— ピン識別ボード(オープンソースハードウェア)
  • オープンソースハードウェアプロジェクト git clone https://github.com/grandideastudio/JTAGulator(ファームウェアとドキュメントを含む)。JTAGulator ボードは別途購入または製造を依頼する必要があります
  • 確認: シリアル接続後に help を送信すると、コマンド一覧が表示されます
  • 不明なボードの UART/JTAG ピンを自動列挙する際に使用します(手順 1/2 の有力なツールです)
ハードウェア購入ガイド(一般的な選択肢と電圧レベル)
  • USB-UART アダプター: CH340 / CP2102 / FTDI のいずれのチップ方式でも使用できます。3.3V TTL 電圧に対応したモデルを選んでください(3.3V/5V 切り替えジャンパー付きなら、より汎用的です)。3.3V のボードに 5V TTL を接続すると、インターフェースが焼損します(落とし穴 3 を参照)
  • デバッガー: ST-Link v2(STM32 系、SWD/JTAG の両方に対応)、J-Link(汎用、ライセンスは有料)、CMSIS-DAP/DAPLink(オープンソースファームウェア方式)。対象チップのメーカーに合わせて選びます
  • SPI Flash プログラマー: ch341a(最も安価な SOIC8 方式)+ クリップ/テストソケット。複数プロトコルが必要な場合は、RT809H クラスのプログラマーを使用します
  • ロジックアナライザー: 信号速度に応じてサンプリングレートを選びます。UART 115200 や低速 SPI には 8 チャンネル、24MHz クラスで十分です。高速 SPI(数十 MHz)には 100MHz 以上のサンプリングが必要です(経験則:サンプリングレートは信号速度の 4 倍以上)
  • 電圧レベル変換: 1.8V/2.5V のボードと 3.3V のツールを接続する場合は、TXS0108 クラスの双方向電圧レベル変換モジュールを使用します

操作手順

順番に実行し、各手順の結果を記録します。

  1. ボードの分解とインターフェースの特定:
    • ケースを開けて PCB を確認します。シルク印刷(TX/RX、VCC、GND、JTAG/SWD テストポイント)、ピンヘッダー、Flash チップの型番(W25Q128、MX25L、GD25Q など)を確認します
    • マルチメーターで電源電圧(一般的には 3.3V ですが、5V / 1.8V の場合もあります)を測定し、GND を特定します。UART TX ピンの特徴は、電源投入直後に論理 High まで立ち上がる方形波です
    • シルク印刷、ピン番号、Flash の型番を撮影して保存し、後で配線を確認する際に使用します
  2. UART シリアルデバッグ(ボーレートの列挙):
    picocom -b 115200 /dev/ttyUSB0        # 先试 115200
    # 乱码 → Ctrl+A Ctrl+X 退出,换 9600 / 57600 / 38400 / 19200 / 230400
    # 或 minicom -D /dev/ttyUSB0
    
    • TX/RX は交差して接続する必要があります(ボード TX ↔ アダプター RX)。共通グラウンドも必須です
    • 電源投入直後に起動ログを取得します。これはシステムを把握する最も手早い方法です(落とし穴 4 を参照)
  3. JTAG/SWD 接続(openocd):
    openocd -f interface/stlink.cfg -f target/stm32f1x.cfg   # ST-Link + SWD 示例
    # 其他适配器在 /usr/share/openocd/scripts/interface/ 下选对应 cfg
    
    • インターフェースの種類(JTAG 4/5 線または SWD 2 線)と電圧レベルを確認します(1.8V のボードには電圧レベル変換アダプターが必要です)
    • 接続後、halt で一時停止し、レジスターを読み取り、Flash をダンプします(flash read_bank 0 dump.bin)
    • 1 行コマンド形式(スクリプト化/非対話型): openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "init; halt; flash read_bank 0 dump.bin; exit"
  4. Flash チップの読み取り(flashrom/プログラマー):
    # 板载 SPI flash(linux_spi 需内核 spidev 支持):
    flashrom -p linux_spi:dev=/dev/spidev0.0 -r backup.bin
    # 离线读取(ch341a 编程器 + SOIC8 夹子,先断电):
    flashrom -p ch341a_spi -r backup.bin
    
    • チップの型番とパッケージ(SOIC8 クリップ/テストソケット)を確認し、ピンの向きを間違えないようにします
    • 読み取ったイメージを [[re-fw-extract]] に渡して展開します
  5. 起動ログの取得:
    • シリアル接続を確認 → ボードの電源を入れる → ログ全体を取得します(picocom の出力を tee log.txt に渡すか、minicom でキャプチャします)
    • ログには、ブートローダー、カーネルの起動、ファイルシステムのマウント、サービスの自動起動に関する情報が含まれます。[[re-fw-rootfs]] の起動スクリプトと照らし合わせて特定します
    • UART に出力がない場合は、手順 1 に戻って配線/ボーレートを再確認するか、ロジックアナライザーで TX ピンの波形を取得して検証します

分野横断の連携

  • [[re-firmware]]:実物のボードが必要な場合、ワークフローの手順 5 でこのスキルを使用します
  • 抽出した Flash イメージ → [[re-fw-extract]] で展開 → [[re-fw-rootfs]] で解析します。実行が必要な場合は [[re-fw-emulate]] を使用します
  • ハードウェアから取得した通信/プロトコル → [[re-protocol]]
  • ハードウェアからの抽出はファームウェア解析の最後の手段です。ソフトウェアの手段(ファイル → 展開 → エミュレーション)をすべて使い切ってから実施します
  • 物理層のチップ/PCB 解析(decap/ベアダイ/トロイの木馬検出)→ [[re-hw-chip]]

常见坑与陷阱

  • 波特率不对 → 乱码:现象——串口输出全是乱码或无输出;原因——波特率/数据位不匹配、TX/RX 接反;对策——按 9600 / 115200 优先枚举(57600 / 38400 / 230400 兜底),用逻辑分析仪看 TX 波形验证,共地必须
  • JTAG 被熔断/锁定:现象——openocd 连不上,IDCODE 全 0 或超时;原因——量产板熔断 JTAG、读保护(RDP)开启;对策——试 SWD、stm32f1x unlock 类解锁序列,或放弃 JTAG 改走 UART + flash 直读(步骤 4)
  • 5V/3.3V 电平误接烧板:现象——接线后板子发热/冒烟/永久损坏;原因——电平不匹配(3.3V 板上接 5V TTL)、供电接错、VCC/GND 反接;对策——先万用表测电平与 GND 再接线;3.3V 系统用 3.3V 适配器;绝不带电插拔
  • 先看启动日志再动手:现象——盲目拆焊 flash / 连 JTAG 导致损坏或数据丢失;原因——跳过低成本观察直接上硬件手段;对策——先 UART 抓启动日志了解系统(步骤 2/5),再决定是否硬件读取——这是 [[re-analyze/platform-tips]] 先给最轻可行方案在硬件域的执行
  • Intel DCI 调试工具链兼容性坑:现象——Intel System Studio 2019(System Debugger)在 Win10/11 安装/运行失败,DCI 线缆连不上 CPU;原因——该软件基于 Win7 开发且带环境检测与 License 校验:Win11 提示缺 Win7 安全补丁、公开 License 文件在 Windows 版无效;对策——安装用兼容模式;运行加 --noprereq 跳过环境检查;License 校验核心在 issa.dll 导出函数中(三个校验函数),patch 后替换即可;DCI 配置按平台选型(如 KBL=Kaby Lake、SPT=200 系主板、DBC=Debug Class 线缆),CLI 调试用 DAL 目录的 PythonConsole.cmd(Python 2.7 环境,itp.cores/itp.halt() 等命令);ME 端需 UTOK 解锁才响应调试命令(见 [[re-fw-extract]])
  • 命令族速查与操作序列见 [[commands]];工具特有坑与版本差异见 [[gotchas]]

コメント