硬件探针与接口识别:从电路板废墟中寻找生命信号

拿到一块陌生的电路板,第一件事是什么?不是急着上电,也不是翻 datasheet。我个人的习惯是——先找接口,再找测试点。这就像医生看病,先看脉搏在哪,再决定怎么下针。

嵌入式接口其实就那几种:UART、JTAG、SWD、SPI、I²C。你只要认得它们,就拿到了固件逆向的入场券。今天咱们就聊聊,怎么在电路板上把这些接口揪出来。

UART:最亲民的调试后门

UART 是串口,三根线:TX、RX、GND。很多设备出厂时,工程师会故意留一个 UART 接口做调试。说白了,这就是一个后门。

怎么找?看电路板上的排针。如果看到 3 根或 4 根排针挨在一起,而且旁边有丝印标注,比如 TX、RX、GND、VCC,那八九不离十就是 UART。

我的经验: 有些厂商会把 UART 藏在看似普通的排针里。我曾经遇到过一块路由器主板,丝印上写着 "J4",旁边只有三个孔。用万用表一量,GND 对地导通,TX 在空闲时是 3.3V 高电平——典型的 UART 特征。

UART 的电压电平有两种:3.3V 和 1.8V。别直接用 5V 的 USB 转串口去怼,会烧芯片。我建议先用示波器或逻辑分析仪抓一下波形,确认电平后再接线。

接口 信号线 典型电压 空闲电平
UART TX, RX, GND 3.3V / 1.8V TX 为高电平
JTAG TMS, TCK, TDI, TDO, nTRST 3.3V / 1.8V TCK 有脉冲
SWD SWDIO, SWCLK, GND 3.3V / 1.8V SWCLK 有脉冲
SPI MOSI, MISO, SCLK, CS 3.3V / 1.8V CS 高电平

JTAG 与 SWD:调试接口的王者

JTAG 是 5 线接口,SWD 是 2 线接口。SWD 是 ARM 公司搞出来的简化版,说白了就是 JTAG 的阉割版,但够用。

怎么区分?看排针数量。JTAG 通常是 10 针或 20 针的排座,SWD 一般是 4 针或 5 针。但有个坑——很多厂商会把 SWD 和 UART 混在一起,比如 STM32 的调试口就是 SWD + UART 共用一组排针。

注意: 我曾经遇到过一块板子,丝印标的是 "UART",结果用逻辑分析仪一抓,发现 TCK 和 TMS 的波形。原来厂商故意把 JTAG 伪装成 UART,防止别人调试。所以别只看丝印,要相信仪器。

识别 JTAG/SWD 的方法很简单:用逻辑分析仪抓排针上的信号。如果看到一组有规律的脉冲,而且频率固定,那大概率是 TCK 或 SWCLK。TMS 和 SWDIO 的信号会随着 CPU 状态变化,波形看起来更随机。

逻辑分析仪与示波器:你的电子眼

没有逻辑分析仪,逆向就是盲人摸象。我建议入门买个 8 通道、100MHz 采样率的逻辑分析仪,几百块钱的就行。示波器嘛,至少 100MHz 带宽,双通道起步。

逻辑分析仪看数字信号,示波器看模拟信号。举个例子:你想看 UART 的波特率,逻辑分析仪直接解码;你想看 SPI 的信号质量,示波器看上升沿和下降沿。

核心技巧: 抓信号时,先把 GND 夹子夹到电路板的地线上。不夹 GND,你看到的全是噪声。我见过太多新手拿着示波器探头乱戳,结果波形乱跳,还以为是设备坏了。

逻辑分析仪的采样率怎么选?简单算一下:如果信号频率是 10MHz,采样率至少 50MHz,也就是 5 倍过采样。低于这个数,你抓到的波形会失真。

识别电路板上的测试点

测试点(Test Point)是工程师留下的后门。它们通常是小圆点或小方点,表面镀金或镀锡。怎么找?

  • 看丝印: 标有 TP、TEST、J 的,基本都是测试点。
  • 看位置: 靠近 CPU 或主控芯片的排针,大概率是调试接口。
  • 看走线: 用万用表蜂鸣档,测排针到 CPU 引脚的导通性。如果通,那就是调试口。

我个人的习惯是,先用万用表测所有排针对地的电阻。GND 对地是 0Ω,VCC 对地是几百 Ω 到几 kΩ。TX 和 RX 对地通常是高阻,但上电后会有电压变化。

避坑指南: 我曾经在一块工业控制板上找 UART,测了所有排针都没找到。后来发现,厂商把 UART 的 TX 和 RX 接到了两个看似无关的电阻上。用示波器一量,电阻一端有 3.3V 脉冲——原来他们用 0Ω 电阻做了跳线。所以,别只看排针,电阻两端也要测。

知识结构图:接口识别流程

下面这张图,是我自己总结的接口识别流程。你照着走一遍,基本不会漏。

嵌入式接口识别流程 拿到电路板 1. 目视检查:找排针、测试点、丝印 2. 万用表测:GND、VCC、对地电阻 3. 上电测电压:空闲电平判断 4. 逻辑分析仪抓波形 5. 确认接口类型与电平 提示:如果波形杂乱,先检查 GND 是否夹好,再检查探头是否接触良好

实战案例:从零开始识别一块路由器主板

去年我拿到一块 TP-Link 路由器主板,上面有 4 个排针,丝印写着 "J1"。我用万用表测了一下:

  • 第 1 脚:对地 0Ω → GND
  • 第 2 脚:对地 3.3V → VCC
  • 第 3 脚:对地高阻,上电后 3.3V → 可能是 TX
  • 第 4 脚:对地高阻,上电后 0V → 可能是 RX

然后用逻辑分析仪抓第 3 脚,看到一串 115200 波特率的 UART 数据。接上 USB 转串口,putty 一开,直接拿到 root shell。整个过程不到 10 分钟。

警告: 别一上来就接 TX 和 RX。先确认 GND,再确认 VCC。接反了不会烧设备,但接错 VCC 到 GND 会短路。我见过有人把 3.3V 接到 GND 上,板子直接冒烟。

常用工具清单

工具 用途 推荐型号
万用表 测通断、电压、电阻 Fluke 17B+
逻辑分析仪 抓数字信号、解码协议 Saleae Logic 8
示波器 看模拟信号、时序 Rigol DS1054Z
USB 转串口 连接 UART FT232RL
JTAG/SWD 调试器 连接调试接口 J-Link EDU

嗯,接口识别这块,说白了就是多练。你拆的板子越多,看丝印的速度就越快。我刚开始做逆向时,一块板子要研究半天。现在拿到手,扫一眼就知道接口在哪。

记住一句话:电路板上的每一个排针,都是工程师留给你的线索。 别放过它们。