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

This commit is contained in:
Translator 2025-08-18 20:16:24 +00:00
parent 80b1de60d1
commit 6c0a2433a6

View File

@ -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: підключіть цифрові піни D2D11 до до 10 підозрюваних JTAG pads/testpoints, а GND Arduino до GND цілі. Живіть ціль окремо, якщо ви не знаєте, що лінія безпечна. Вибирайте логіку 3.3 V (наприклад, Arduino Due) або використовуйте перетворювач рівнів/послідовні резистори при перевірці цілей 1.83.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
![](<../../images/image (939).png>)
![](<../../images/image (578).png>)
Налаштуйте **"No line ending" і 115200baud**.\
Надішліть команду s, щоб почати сканування:
![](<../../images/image (774).png>)
Якщо ви контактуєте з JTAG, ви знайдете одну або кілька **строк, що починаються з FOUND!**, які вказують на піни JTAG.
Якщо знайдено дійсний TAP, ви побачите рядки, що починаються з `FOUND!`, що вказують на виявлені піни.
Поради
- Завжди діліть землю і ніколи не підключайте невідомі піни вище Vtref цілі. Якщо сумніваєтеся, додайте послідовні резистори 100470 Ω на кандидатних пінах.
- Якщо пристрій використовує SWD/SWJ замість 4провідного JTAG, JTAGenum може його не виявити; спробуйте інструменти SWD або адаптер, що підтримує SWJDP.
## Безпечніше полювання за пінами та налаштування апаратного забезпечення
- Спочатку визначте Vtref і GND за допомогою мультиметра. Багато адаптерів потребують Vtref для встановлення напруги I/O.
- Перетворення рівнів: віддавайте перевагу двонаправленим перетворювачам рівнів, призначеним для сигналів pushpull (лінії JTAG не є відкритими). Уникайте автоматичних I2C перетворювачів для JTAG.
- Корисні адаптери: плати FT2232H/FT232H (наприклад, Tigard), CMSISDAP, JLink, STLINK (специфічні для постачальника), ESPUSBJTAG (на ESP32Sx). Підключайте принаймні TCK, TMS, TDI, TDO, GND і Vtref; за бажанням TRST і SRST.
## Перший контакт з OpenOCD (сканування та IDCODE)
OpenOCD - це де-факто OSS для JTAG/SWD. З підтримуваним адаптером ви можете сканувати ланцюг і читати IDCODEs:
- Загальний приклад з JLink:
```
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"
```
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"
```
- 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)
Навіть коли доступ до налагодження ЦП заблоковано, граничне сканування все ще може бути відкритим. З 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 пристрою, щоб знати порядок бітів регістра межі. Будьте обережні, деякі постачальники блокують клітини сканування межі в продукції.
## Сучасні цілі та примітки
- ESP32S3/C3 включає в себе рідний USBJTAG міст; OpenOCD може спілкуватися безпосередньо через USB без зовнішнього зонда. Дуже зручно для тріажу та дампів.
- Налагодження RISCV (v0.13+) широко підтримується OpenOCD; віддавайте перевагу SBA для доступу до пам'яті, коли ядро не можна безпечно зупинити.
- Багато МК реалізують аутентифікацію налагодження та стани життєвого циклу. Якщо JTAG виглядає мертвим, але живлення правильне, пристрій може бути злитий у закритий стан або вимагати аутентифікований зонд.
## Захист і зміцнення (чого очікувати на реальних пристроях)
- Постійно вимикайте або блокуйте JTAG/SWD у продукції (наприклад, STM32 RDP рівень 2, ESP eFuses, які вимикають PAD JTAG, NXP/Nordic APPROTECT/DPAP).
- Вимагайте аутентифіковане налагодження (ARMv8.2A ADIv6 Аутентифікація налагодження, управління OEM виклик-відповідь) при збереженні доступу до виробництва.
- Не прокладайте легкі тестові площадки; закопуйте тестові вії, видаляйте/заповнюйте резистори для ізоляції TAP, використовуйте роз'єми з ключами або конструкціями з пружинами.
- Блокування налагодження при увімкненні: закрийте TAP за раннім ROM, що забезпечує безпечний завантаження.
## Посилання
- OpenOCD Users Guide JTAG Commands and configuration. https://openocd.org/doc-release/html/JTAG-Commands.html
- Espressif ESP32S3 JTAG debugging (USBJTAG, OpenOCD usage). https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/
{{#include ../../banners/hacktricks-training.md}}