53 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Хардварне Хакерство
{{#include ../../banners/hacktricks-training.md}}
## JTAG
JTAG дозволяє виконувати сканування меж. Сканування меж аналізує певні електронні схеми, включаючи вбудовані клітини та регістри сканування для кожного контакту.
Стандарт JTAG визначає **конкретні команди для проведення сканування меж**, включаючи наступні:
- **BYPASS** дозволяє тестувати конкретний чіп без накладних витрат на проходження через інші чіпи.
- **SAMPLE/PRELOAD** бере зразок даних, що входять і виходять з пристрою, коли він працює в нормальному режимі.
- **EXTEST** встановлює та читає стани контактів.
Він також може підтримувати інші команди, такі як:
- **IDCODE** для ідентифікації пристрою
- **INTEST** для внутрішнього тестування пристрою
Ви можете натрапити на ці інструкції, коли використовуєте інструмент, такий як JTAGulator.
### Порт доступу до тестування
Сканування меж включає тести чотирьохпровідного **Порту доступу до тестування (TAP)**, загального призначення, який забезпечує **доступ до функцій підтримки тестування JTAG**, вбудованих у компонент. TAP використовує наступні п'ять сигналів:
- Вхід тактового сигналу тестування (**TCK**) TCK є **тактовим сигналом**, який визначає, як часто контролер TAP буде виконувати одну дію (іншими словами, переходити до наступного стану в автоматі станів).
- Вхід вибору режиму тестування (**TMS**) TMS контролює **кінцевий автомат станів**. На кожному тактовому імпульсі контролер JTAG TAP пристрою перевіряє напругу на контакті TMS. Якщо напруга нижча за певний поріг, сигнал вважається низьким і інтерпретується як 0, тоді як якщо напруга вища за певний поріг, сигнал вважається високим і інтерпретується як 1.
- Вхід даних тестування (**TDI**) TDI є контактом, який надсилає **дані в чіп через клітини сканування**. Кожен виробник відповідає за визначення протоколу зв'язку через цей контакт, оскільки JTAG цього не визначає.
- Вихід даних тестування (**TDO**) TDO є контактом, який надсилає **дані з чіпа**.
- Вхід скидання тестування (**TRST**) Додатковий TRST скидає кінцевий автомат станів **в відомий хороший стан**. Альтернативно, якщо TMS утримується на 1 протягом п'яти послідовних тактових циклів, це викликає скидання, так само, як і контакт TRST, тому TRST є необов'язковим.
Іноді ви зможете знайти ці контакти, позначені на PCB. В інших випадках вам може знадобитися **знайти їх**.
### Ідентифікація контактів JTAG
Найшвидший, але найдорожчий спосіб виявлення портів JTAG - це використання **JTAGulator**, пристрою, створеного спеціально для цієї мети (хоча він **також може виявляти UART виводи**).
Він має **24 канали**, які ви можете підключити до контактів плат. Потім він виконує **BF-атаку** всіх можливих комбінацій, надсилаючи команди сканування меж **IDCODE** та **BYPASS**. Якщо він отримує відповідь, він відображає канал, що відповідає кожному сигналу JTAG.
Дешевший, але набагато повільніший спосіб ідентифікації виводів JTAG - це використання [**JTAGenum**](https://github.com/cyphunk/JTAGenum/), завантаженого на мікроконтролер, сумісний з Arduino.
Використовуючи **JTAGenum**, спочатку вам потрібно **визначити контакти пристрою для проби**, які ви будете використовувати для перерахунку. Вам потрібно буде посилатися на діаграму виводів пристрою, а потім підключити ці контакти до тестових точок на вашому цільовому пристрої.
**Третій спосіб** ідентифікації контактів JTAG - це **огляд PCB** на наявність одного з виводів. У деяких випадках PCB можуть зручно надавати **інтерфейс Tag-Connect**, що є чітким показником того, що плата також має роз'єм JTAG. Ви можете побачити, як виглядає цей інтерфейс на [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/). Крім того, огляд **технічних характеристик чіпсетів на PCB** може виявити діаграми виводів, які вказують на інтерфейси JTAG.
## SDW
SWD - це специфічний для ARM протокол, призначений для налагодження.
Інтерфейс SWD вимагає **два контакти**: двонаправлений **SWDIO** сигнал, який є еквівалентом контактів JTAG **TDI та TDO**, та тактовий сигнал **SWCLK**, який є еквівалентом **TCK** в JTAG. Багато пристроїв підтримують **Порт налагодження серійного проводу або JTAG (SWJ-DP)**, комбінований інтерфейс JTAG та SWD, який дозволяє підключати або SWD, або JTAG зонд до цілі.
{{#include ../../banners/hacktricks-training.md}}