From 6c0a2433a61e715f3486251077cbc236ce24cd99 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 18 Aug 2025 20:16:24 +0000 Subject: [PATCH] Translated ['src/todo/hardware-hacking/jtag.md'] to uk --- src/todo/hardware-hacking/jtag.md | 112 +++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 9 deletions(-) diff --git a/src/todo/hardware-hacking/jtag.md b/src/todo/hardware-hacking/jtag.md index 01fe4491e..78f792f5b 100644 --- a/src/todo/hardware-hacking/jtag.md +++ b/src/todo/hardware-hacking/jtag.md @@ -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 ![](<../../images/image (939).png>) ![](<../../images/image (578).png>) -Налаштуйте **"No line ending" і 115200baud**.\ -Надішліть команду s, щоб почати сканування: - ![](<../../images/image (774).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 +``` +Вам потрібен 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}}