mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/todo/hardware-hacking/jtag.md'] to uk
This commit is contained in:
parent
80b1de60d1
commit
6c0a2433a6
@ -2,25 +2,119 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
{{#ref}}
|
||||
README.md
|
||||
{{#endref}}
|
||||
|
||||
## JTAGenum
|
||||
|
||||
[**JTAGenum** ](https://github.com/cyphunk/JTAGenum) - це інструмент, який можна використовувати з Raspberry PI або Arduino для спроби знайти JTAG пін з невідомого чіпа.\
|
||||
В **Arduino** підключіть **пін з 2 по 11 до 10 пінів, які потенційно належать до JTAG**. Завантажте програму в Arduino, і вона спробує перебрати всі піни, щоб визначити, чи належить якийсь з них до JTAG і який саме.\
|
||||
В **Raspberry PI** ви можете використовувати лише **пін з 1 по 6** (6 пінів, тому ви будете повільніше тестувати кожен потенційний JTAG пін).
|
||||
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) - це інструмент, який ви можете завантажити на MCU, сумісний з Arduino, або (експериментально) на Raspberry Pi, щоб брутфорсити невідомі JTAG pinouts і навіть перераховувати регістри інструкцій.
|
||||
|
||||
### Arduino
|
||||
- Arduino: підключіть цифрові піни D2–D11 до до 10 підозрюваних JTAG pads/testpoints, а GND Arduino до GND цілі. Живіть ціль окремо, якщо ви не знаєте, що лінія безпечна. Вибирайте логіку 3.3 V (наприклад, Arduino Due) або використовуйте перетворювач рівнів/послідовні резистори при перевірці цілей 1.8–3.3 V.
|
||||
- Raspberry Pi: версія Pi має менше доступних GPIO (тому сканування повільніше); перевірте репозиторій для поточної карти пінів і обмежень.
|
||||
|
||||
В Arduino, після підключення кабелів (пін 2 до 11 до JTAG пінів і GND Arduino до GND базової плати), **завантажте програму JTAGenum в Arduino** і в Serial Monitor надішліть **`h`** (команда для допомоги), і ви повинні побачити допомогу:
|
||||
Після прошивки відкрийте серійний монітор на 115200 бод і надішліть `h` для отримання допомоги. Типовий потік:
|
||||
|
||||
- `l` знайти петлі, щоб уникнути хибнопозитивних результатів
|
||||
- `r` перемикати внутрішні підтягуючі резистори, якщо потрібно
|
||||
- `s` сканувати для TCK/TMS/TDI/TDO (і іноді TRST/SRST)
|
||||
- `y` брутфорсити IR для виявлення не задокументованих опкодів
|
||||
- `x` знімок станів пінів для boundary-scan
|
||||
|
||||
.png>)
|
||||
|
||||
.png>)
|
||||
|
||||
Налаштуйте **"No line ending" і 115200baud**.\
|
||||
Надішліть команду s, щоб почати сканування:
|
||||
|
||||
.png>)
|
||||
|
||||
Якщо ви контактуєте з JTAG, ви знайдете одну або кілька **строк, що починаються з FOUND!**, які вказують на піни JTAG.
|
||||
|
||||
|
||||
Якщо знайдено дійсний TAP, ви побачите рядки, що починаються з `FOUND!`, що вказують на виявлені піни.
|
||||
|
||||
Поради
|
||||
- Завжди діліть землю і ніколи не підключайте невідомі піни вище Vtref цілі. Якщо сумніваєтеся, додайте послідовні резистори 100–470 Ω на кандидатних пінах.
|
||||
- Якщо пристрій використовує SWD/SWJ замість 4‑провідного JTAG, JTAGenum може його не виявити; спробуйте інструменти SWD або адаптер, що підтримує SWJ‑DP.
|
||||
|
||||
## Безпечніше полювання за пінами та налаштування апаратного забезпечення
|
||||
|
||||
- Спочатку визначте Vtref і GND за допомогою мультиметра. Багато адаптерів потребують Vtref для встановлення напруги I/O.
|
||||
- Перетворення рівнів: віддавайте перевагу двонаправленим перетворювачам рівнів, призначеним для сигналів push‑pull (лінії JTAG не є відкритими). Уникайте автоматичних I2C перетворювачів для JTAG.
|
||||
- Корисні адаптери: плати FT2232H/FT232H (наприклад, Tigard), CMSIS‑DAP, J‑Link, ST‑LINK (специфічні для постачальника), ESP‑USB‑JTAG (на ESP32‑Sx). Підключайте принаймні TCK, TMS, TDI, TDO, GND і Vtref; за бажанням TRST і SRST.
|
||||
|
||||
## Перший контакт з OpenOCD (сканування та IDCODE)
|
||||
|
||||
OpenOCD - це де-факто OSS для JTAG/SWD. З підтримуваним адаптером ви можете сканувати ланцюг і читати IDCODEs:
|
||||
|
||||
- Загальний приклад з J‑Link:
|
||||
```
|
||||
openocd -f interface/jlink.cfg -c "transport select jtag; adapter speed 1000" \
|
||||
-c "init; scan_chain; shutdown"
|
||||
```
|
||||
- ESP32‑S3 вбудований USB‑JTAG (не потрібен зовнішній зонд):
|
||||
```
|
||||
openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
|
||||
```
|
||||
Notes
|
||||
- Якщо ви отримали "всі одиниці/нулі" IDCODE, перевірте з'єднання, живлення, Vtref та те, що порт не заблокований запобіжниками/опційними байтами.
|
||||
- Дивіться OpenOCD низькорівневий `irscan`/`drscan` для ручної взаємодії з TAP при підключенні невідомих ланцюгів.
|
||||
|
||||
## Зупинка ЦП та скидання пам'яті/флеш-пам'яті
|
||||
|
||||
Якщо TAP розпізнано і вибрано цільовий скрипт, ви можете зупинити ядро та скинути області пам'яті або внутрішню флеш-пам'ять. Приклади (налаштуйте ціль, базові адреси та розміри):
|
||||
|
||||
- Загальна ціль після ініціалізації:
|
||||
```
|
||||
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \
|
||||
-c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown"
|
||||
```
|
||||
- RISC‑V 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"
|
||||
```
|
||||
- ESP32‑S3, програмувати або читати через допоміжний засіб OpenOCD:
|
||||
```
|
||||
openocd -f board/esp32s3-builtin.cfg \
|
||||
-c "program_esp app.bin 0x10000 verify exit"
|
||||
```
|
||||
Tips
|
||||
- Використовуйте `mdw/mdh/mdb` для перевірки пам'яті перед тривалими дампами.
|
||||
- Для багатопристроєвих ланцюгів встановіть BYPASS на нецільових пристроях або використовуйте файл плати, який визначає всі TAP.
|
||||
|
||||
## Трюки з граничним скануванням (EXTEST/SAMPLE)
|
||||
|
||||
Навіть коли доступ до налагодження ЦП заблоковано, граничне сканування все ще може бути відкритим. З UrJTAG/OpenOCD ви можете:
|
||||
- SAMPLE для знімка станів контактів під час роботи системи (знайти активність шини, підтвердити відображення контактів).
|
||||
- EXTEST для управління контактами (наприклад, біт-банг зовнішніх SPI flash ліній через MCU для читання офлайн, якщо проводка плати це дозволяє).
|
||||
|
||||
Мінімальний потік UrJTAG з адаптером FT2232x:
|
||||
```
|
||||
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 пристрою, щоб знати порядок бітів регістра межі. Будьте обережні, деякі постачальники блокують клітини сканування межі в продукції.
|
||||
|
||||
## Сучасні цілі та примітки
|
||||
|
||||
- ESP32‑S3/C3 включає в себе рідний USB‑JTAG міст; OpenOCD може спілкуватися безпосередньо через USB без зовнішнього зонда. Дуже зручно для тріажу та дампів.
|
||||
- Налагодження RISC‑V (v0.13+) широко підтримується OpenOCD; віддавайте перевагу SBA для доступу до пам'яті, коли ядро не можна безпечно зупинити.
|
||||
- Багато МК реалізують аутентифікацію налагодження та стани життєвого циклу. Якщо JTAG виглядає мертвим, але живлення правильне, пристрій може бути злитий у закритий стан або вимагати аутентифікований зонд.
|
||||
|
||||
## Захист і зміцнення (чого очікувати на реальних пристроях)
|
||||
|
||||
- Постійно вимикайте або блокуйте JTAG/SWD у продукції (наприклад, STM32 RDP рівень 2, ESP eFuses, які вимикають PAD JTAG, NXP/Nordic APPROTECT/DPAP).
|
||||
- Вимагайте аутентифіковане налагодження (ARMv8.2‑A ADIv6 Аутентифікація налагодження, управління OEM виклик-відповідь) при збереженні доступу до виробництва.
|
||||
- Не прокладайте легкі тестові площадки; закопуйте тестові вії, видаляйте/заповнюйте резистори для ізоляції TAP, використовуйте роз'єми з ключами або конструкціями з пружинами.
|
||||
- Блокування налагодження при увімкненні: закрийте TAP за раннім ROM, що забезпечує безпечний завантаження.
|
||||
|
||||
## Посилання
|
||||
|
||||
- OpenOCD User’s Guide – JTAG Commands and configuration. https://openocd.org/doc-release/html/JTAG-Commands.html
|
||||
- Espressif ESP32‑S3 JTAG debugging (USB‑JTAG, OpenOCD usage). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user