Hardware Hacking

支持 HackTricks

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 攻击,发送 IDCODEBYPASS 边界扫描命令。如果收到响应,它会显示每个 JTAG 信号对应的通道。

识别 JTAG 引脚的更便宜但速度较慢的方法是使用 JTAGenum 加载在 Arduino 兼容的微控制器上。

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

识别 JTAG 引脚的 第三种方法 是通过 检查 PCB 中的引脚图。在某些情况下,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 探头连接到目标。

支持 HackTricks

Last updated