第二章:工控设备硬件基础
做固件逆向,第一件事不是拿IDA开干,而是先看板子。
我见过太多人,上来就对着二进制文件一顿分析,结果连Flash型号都没搞清楚。说白了,你连数据存在哪、怎么读都不知道,逆向个啥?
这一章,咱们聊聊工控设备的硬件基础。你不需要成为硬件设计专家,但得知道关键部件长什么样、怎么用。
2.1 常见工控主板架构
工控设备里,处理器架构就那么几种。我这些年拆过的板子,90%跑不出这三类:
- x86:老牌架构,性能强。常见于PLC、工控机。比如西门子S7系列、研华工控主板。
- ARM:低功耗、集成度高。现在新出的设备,尤其是IoT网关、RTU,清一色ARM。Cortex-A系列居多。
- MIPS:曾经很火,现在少了。但一些老设备、路由器、部分PLC还在用。比如龙芯、某些Broadcom方案。
怎么区分?看芯片丝印。Intel/AMD是x86,Qualcomm/MTK/Allwinner是ARM,MIPS的芯片上通常有「MIPS」字样或特定编号。
2.2 Flash与RAM的分布
固件存在哪?存在Flash里。程序跑在哪?跑在RAM里。就这么简单。
但工控设备有个特点:Flash和RAM的分布方式五花八门。我遇到过最坑的一次,是某个PLC把固件分成了三块,分别存在三个不同型号的Flash里,还用了不同的总线。
2.2.1 Flash类型
| 类型 | 特点 | 常见型号 |
|---|---|---|
| NOR Flash | 字节寻址,可XIP(原地执行),容量小(1MB-64MB) | Winbond W25Q系列、Macronix MX25系列 |
| NAND Flash | 页寻址,容量大(128MB-8GB),有坏块 | Samsung K9F系列、Toshiba TC58系列 |
| SPI Flash | 串行接口,引脚少,速度一般 | GD25Q系列、XT25F系列 |
| Parallel Flash | 并行接口,速度快,引脚多 | Intel StrataFlash、AMD MirrorBit |
我个人习惯:先看封装。8脚SOIC的基本是SPI Flash,48脚TSOP的可能是Parallel Flash。然后看丝印,查Datasheet确认。
2.2.2 RAM类型
RAM相对简单。工控设备常用:
- SDRAM:老设备,比如SDRAM 16MB
- DDR/DDR2/DDR3:现代设备,容量从64MB到2GB不等
- SRAM:小容量、高速缓存,比如某些MCU内部
嗯,这里要注意:有些设备会把RAM和Flash封装在一起,比如eMMC+RAM的PoP封装。这种你没法单独拆,得用编程器读整个包。
2.3 串口与JTAG调试接口识别
这是逆向的入口。没有调试接口,你只能拆Flash读固件。有了串口或JTAG,你可以直接交互、调试、甚至dump内存。
2.3.1 串口(UART)
串口是工控设备最常用的调试接口。三根线:TX、RX、GND。波特率常见115200、57600、9600。
怎么找?
- 看板子上有没有排针,通常标有「UART」「DEBUG」「CONSOLE」字样。
- 如果没有标注,找4个一排的焊盘,或者靠近处理器的小排针。
- 用万用表测电压:TX脚在空闲时通常是3.3V或1.8V,RX脚可能是0V或高阻。
- 用逻辑分析仪抓波形,看有没有UART信号。
我常用的方法:拿示波器探头点各个可疑焊盘,看有没有方波信号。有方波的地方,十有八九是串口。
2.3.2 JTAG接口
JTAG是更强大的调试接口。标准JTAG有5根线:TMS、TCK、TDI、TDO、TRST(可选)。
识别方法:
- 看板子上有没有10针或20针的排针,通常标有「JTAG」「SWD」「DEBUG」。
- ARM设备常用SWD接口(2根线:SWDIO、SWCLK),比JTAG更简洁。
- 用万用表测:TCK脚通常有周期性时钟信号,TMS脚在空闲时是高电平。
我曾经遇到一个设备,JTAG接口被厂家用胶封住了。我拿热风枪吹开,发现里面是标准的20针JTAG。嗯,这种掩耳盗铃的做法,其实防不住有心人。
2.4 知识体系结构图
下面这张图,帮你理清本章的核心逻辑:
这张图把本章内容串起来了。你从主板架构入手,确定处理器类型;然后找Flash和RAM,知道固件在哪;最后找调试接口,获取交互入口。三步走,稳得很。
公众号:蓝海资料掘金营,微信deep3321