# Hardware Hacking

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## 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引脚的一种更便宜但速度较慢的方法是使用加载在兼容Arduino微控制器上的[JTAGenum](https://github.com/cyphunk/JTAGenum/)。

使用**JTAGenum**，您首先需要**定义用于枚举的探测设备的引脚**。您需要参考设备的引脚图，然后将这些引脚与目标设备上的测试点连接起来。

通过**检查PCB**以找到其中一个引脚布局是识别JTAG引脚的第三种方法。在某些情况下，PCB可能会方便地提供**Tag-Connect接口**，这清楚地表明该板有一个JTAG连接器。您可以在<https://www.tag-connect.com/info/>上查看该接口的外观。此外，检查PCB上芯片组的**数据表**可能会显示指向JTAG接口的引脚布局图。

## SDW

SWD是一种专为ARM设计的调试协议。

SWD接口需要**两个引脚**：一个双向**SWDIO**信号，相当于JTAG的**TDI和TDO引脚和一个时钟**，即**SWCLK**，相当于JTAG中的**TCK**。许多设备支持**串行线或JTAG调试端口（SWJ-DP）**，这是一个结合了JTAG和SWD接口的接口，使您可以将SWD或JTAG探针连接到目标设备。

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/todo/hardware-hacking.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
