Translated ['src/todo/hardware-hacking/jtag.md'] to ja

This commit is contained in:
Translator 2025-08-18 20:16:38 +00:00
parent 4fe24ac8df
commit 242bdb081c

View File

@ -2,25 +2,117 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
{{#ref}}
README.md
{{#endref}}
## JTAGenum ## JTAGenum
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum)は、Raspberry PIまたはArduinoを使用して、未知のチップからJTAGピンを探すために使用できるツールです。\ [**JTAGenum**](https://github.com/cyphunk/JTAGenum) は、Arduino互換のMCUまたは実験的にRaspberry Piにロードできるツールで、未知のJTAGピンアウトをブルートフォースし、命令レジスタを列挙することができます。
**Arduino**では、**2から11のピンをJTAGに属する可能性のある10ピンに接続します**。プログラムをArduinoにロードすると、すべてのピンをブルートフォースで試して、どのピンがJTAGに属するかを見つけます。\
**Raspberry PI**では、**1から6のピンのみを使用できます**6ピンなので、各潜在的なJTAGピンをテストするのが遅くなります
### Arduino - Arduino: デジタルピンD2D11を最大10の疑わしいJTAGパッド/テストポイントに接続し、Arduino GNDをターゲットGNDに接続します。レールが安全であることがわからない限り、ターゲットに別途電源を供給してください。3.3 Vロジック例: Arduino Dueを好むか、1.83.3 Vターゲットをプローブする際にはレベルシフタ/直列抵抗を使用してください。
- Raspberry Pi: Piビルドは使用可能なGPIOが少ないためスキャンが遅くなる、現在のピンマップと制約についてはリポジトリを確認してください。
Arduinoでは、ケーブルを接続した後ピン2から11をJTAGピンに、Arduino GNDをベースボードGNDに接続、**JTAGenumプログラムをArduinoにロード**し、シリアルモニターで**`h`**(ヘルプコマンド)を送信すると、ヘルプが表示されます: フラッシュが完了したら、115200ボーでシリアルモニターを開き、ヘルプのために `h` を送信します。典型的なフロー:
- `l` 偽陽性を避けるためにループバックを見つける
- `r` 必要に応じて内部プルアップを切り替える
- `s` TCK/TMS/TDI/TDO時にはTRST/SRSTをスキャンする
- `y` 文書化されていないオペコードを発見するためにIRをブルートフォースする
- `x` ピン状態の境界スキャンスナップショット
![](<../../images/image (939).png>) ![](<../../images/image (939).png>)
![](<../../images/image (578).png>) ![](<../../images/image (578).png>)
**「No line ending」と115200baudを設定します**。\
スキャンを開始するためにコマンドsを送信します
![](<../../images/image (774).png>) ![](<../../images/image (774).png>)
JTAGに接続している場合、**FOUND!**で始まる1つまたは複数の**行が表示され、JTAGのピンを示します**。 有効なTAPが見つかると、発見されたピンを示す `FOUND!` で始まる行が表示されます。
ヒント
- 常にグラウンドを共有し、未知のピンをターゲットVtref以上に駆動しないでください。疑わしい場合は、候補ピンに100470 Ωの直列抵抗を追加してください。
- デバイスが4線JTAGの代わりにSWD/SWJを使用している場合、JTAGenumはそれを検出できないことがあります。SWDツールまたはSWJ-DPをサポートするアダプタを試してください。
## Safer pin hunting and hardware setup
- まずマルチメーターでVtrefとGNDを特定します。多くのアダプタはI/O電圧を設定するためにVtrefを必要とします。
- レベルシフティング: プッシュプル信号用に設計された双方向レベルシフタを好みますJTAGラインはオープンドレインではありません。JTAG用の自動方向I2Cシフタは避けてください。
- 有用なアダプタ: FT2232H/FT232Hボード例: Tigard、CMSIS-DAP、J-Link、ST-LINKベンダー特有、ESP-USB-JTAGESP32-Sx上。最低限TCK、TMS、TDI、TDO、GNDおよびVtrefを接続します; オプションでTRSTとSRSTも接続します。
## First contact with OpenOCD (scan and IDCODE)
OpenOCDはJTAG/SWDの事実上のOSSです。サポートされているアダプタを使用すると、チェーンをスキャンしてIDCODEを読み取ることができます。
- J-Linkを使用した一般的な例:
```
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
-c "init; scan_chain; shutdown"
```
- ESP32S3 内蔵 USBJTAG外部プローブは不要
```
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
```
ノート
- "すべての1/0" IDCODEが表示された場合は、配線、電源、Vtref、およびポートがヒューズ/オプションバイトによってロックされていないことを確認してください。
- 不明なチェーンを立ち上げる際の手動TAPインタラクションについては、OpenOCDの低レベル`irscan`/`drscan`を参照してください。
## CPUの停止とメモリ/フラッシュのダンプ
TAPが認識され、ターゲットスクリプトが選択されると、コアを停止し、メモリ領域または内部フラッシュをダンプできます。例ターゲット、ベースアドレス、サイズを調整してください
- 初期化後の一般的なターゲット:
```
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \
-c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown"
```
- RISCV SoC利用可能な場合はSBAを優先
```
openocd -f interface/ftdi/ft232h.cfg -f target/riscv.cfg \
-c "init; riscv set_prefer_sba on; halt; dump_image sram.bin 0x80000000 0x20000; shutdown"
```
- ESP32S3、OpenOCDヘルパーを介してプログラムまたは読み取る:
```
openocd -f board/esp32s3-builtin.cfg \
-c "program_esp app.bin 0x10000 verify exit"
```
Tips
- `mdw/mdh/mdb`を使用して、長いダンプの前にメモリをサニティチェックします。
- 複数デバイスのチェーンの場合、ターゲットでないデバイスにBYPASSを設定するか、すべてのTAPを定義するボードファイルを使用します。
## バウンダリスキャンのトリック (EXTEST/SAMPLE)
CPUのデバッグアクセスがロックされていても、バウンダリスキャンが露出している場合があります。UrJTAG/OpenOCDを使用すると、次のことができます
- SAMPLEを使用して、システムが動作している間にピンの状態をスナップショットしますバスのアクティビティを見つけ、ピンのマッピングを確認します
- EXTESTを使用してピンを駆動しますボードの配線が許可されている場合、MCUを介して外部SPIフラッシュラインをビットバンギングしてオフラインで読み取ります
FT2232xアダプタを使用した最小限のUrJTAGフロー
```
jtag> cable ft2232 vid=0x0403 pid=0x6010 interface=1
jtag> frequency 100000
jtag> detect
jtag> bsdl path /path/to/bsdl/files
jtag> instruction EXTEST
jtag> shift ir
jtag> dr <bit pattern for boundary register>
```
デバイスのBSDLが必要で、境界レジスタのビット順序を知る必要があります。いくつかのベンダーは、製造時に境界スキャンセルをロックすることに注意してください。
## 現代のターゲットと注意事項
- ESP32S3/C3はネイティブUSBJTAGブリッジを含んでおり、OpenOCDは外部プローブなしでUSB経由で直接通信できます。トリアージやダンプに非常に便利です。
- RISCVデバッグv0.13+はOpenOCDによって広くサポートされています。コアを安全に停止できない場合は、メモリアクセスにはSBAを優先してください。
- 多くのMCUはデバッグ認証とライフサイクル状態を実装しています。JTAGが死んでいるように見えるが電源が正しい場合、デバイスは閉じた状態にフューズされているか、認証されたプローブが必要です。
## 防御と強化(実際のデバイスで期待されること)
- 製造時にJTAG/SWDを永久に無効にするかロックしますSTM32 RDPレベル2、PAD JTAGを無効にするESP eFuses、NXP/Nordic APPROTECT/DPAP
- 製造アクセスを維持しながら、認証されたデバッグを要求しますARMv8.2A ADIv6デバッグ認証、OEM管理のチャレンジレスポンス
- 簡単なテストパッドを配線しないでくださいテストビアを埋め、TAPを隔離するために抵抗を取り除く/配置し、キー付きコネクタやポゴピンフィクスチャを使用します。
- 電源オンデバッグロック初期ROMの背後にTAPをゲートし、安全なブートを強制します。
## 参考文献
- OpenOCDユーザーガイド JTAGコマンドと設定。 https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 JTAGデバッグUSBJTAG、OpenOCDの使用。 https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}