hacktricks/todo/hardware-hacking/uart.md
2023-08-03 19:12:22 +00:00

7.5 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

基本信息

UART是一种串行协议意味着它以一位一次的方式在组件之间传输数据。相比之下并行通信协议通过多个通道同时传输数据。常见的串行协议包括RS-232、I2C、SPI、CAN、Ethernet、HDMI、PCI Express和USB。

通常情况下当UART处于空闲状态时线路保持高电平逻辑1。然后为了表示数据传输的开始发送器向接收器发送一个起始位此时信号保持低电平逻辑0。接下来发送器发送包含实际消息的五到八个数据位后跟一个可选的奇偶校验位和一个或两个停止位逻辑1具体取决于配置。奇偶校验位用于错误检查在实践中很少见。停止位或位表示传输的结束。

我们将最常见的配置称为8N1八个数据位无奇偶校验一个停止位。例如如果我们想要在8N1 UART配置中发送字符C或者在ASCII中表示为0x43我们将发送以下位0起始位0、1、0、0、0、0、1、10x43的二进制值0停止位

与UART通信的硬件工具

  • USB转串口适配器
  • 带有CP2102或PL2303芯片的适配器
  • 通用工具Bus Pirate、Adafruit FT232H、Shikra或Attify Badge

识别UART端口

UART有4个端口TX(发送)、RX(接收)、Vcc(电压)和GND地线。你可能能够在PCB上找到带有**TXRX**字样的4个端口。但如果没有指示你可能需要使用万用表或逻辑分析仪自己找到它们。

使用万用表和设备关闭电源:

  • 使用连续性测试模式来识别GND引脚将后导线放入地线并用红色导线进行测试直到听到万用表发出声音。PCB上可能有多个GND引脚所以你可能已经找到了UART引脚也可能没有找到。
  • 要识别VCC端口,设置直流电压模式并将其设置为20V电压。黑色探针接地红色探针接引脚。打开设备电源。如果万用表测量到恒定的3.3V或5V电压说明你找到了Vcc引脚。如果得到其他电压请尝试其他端口。
  • 要识别TX端口,将直流电压模式设置为20V电压黑色探针接地红色探针接引脚并打开设备电源。如果你发现电压在几秒钟内波动然后稳定在Vcc值上那么你很可能找到了TX端口。这是因为在上电时它会发送一些调试数据。
  • RX端口将是离其他3个端口最近的一个它的电压波动最小所有UART引脚中的总体值最低。

你可以混淆TX和RX端口不会发生任何事情但如果混淆GND和VCC端口可能会烧毁电路。

使用逻辑分析仪:

识别UART波特率

识别正确的波特率最简单的方法是查看TX引脚的输出并尝试读取数据。如果接收到的数据无法读取请切换到下一个可能的波特率直到数据可读为止。你可以使用USB转串口适配器或Bus Pirate等多功能设备配合辅助脚本例如baudrate.py来完成这个操作。最常见的波特率是9600、38400、19200、57600和115200。

{% hint style="danger" %} 重要提示在此协议中你需要将一个设备的TX连接到另一个设备的RX {% endhint %}

总线海盗

在这个场景中我们将嗅探Arduino的UART通信该通信将程序的所有打印信息发送到串行监视器。

# Check the modes
UART>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
10. PIC
11. DIO
x. exit(without change)

# Select UART
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value

# Select the speed the communication is occurring on (you BF all this until you find readable things)
# Or you could later use the macro (4) to try to find the speed
(1)>5
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE

# From now on pulse enter for default
(1)>
Stop bits:
1. 1 *default
2. 2
(1)>
Receive polarity:
1. Idle 1 *default
2. Idle 0
(1)>
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)

(1)>
Clutch disengaged!!!
To finish setup, start up the power supplies with command 'W'
Ready

# Start
UART>W
POWER SUPPLIES ON
Clutch engaged!!!

# Use macro (2) to read the data of the bus (live monitor)
UART>(2)
Raw UART input
Any key to exit
Escritura inicial completada:
AAA Hi Dreg! AAA
waiting a few secs to repeat....
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥