
433MHz遥控信号逆向工程实战从示波器波形到数据帧解析1. 认识433MHz无线通信系统在智能家居和物联网设备中433MHz频段因其穿透性强、传输距离远的特点成为遥控系统的首选。不同于2.4GHz频段的复杂协议栈433MHz通信通常采用简单的ASK/OOK调制方式通过高低电平的持续时间来编码数据。典型的433MHz遥控系统由发射器和接收器组成发射端按键输入 → 编码芯片(如EV1527) → 射频发射电路接收端射频接收模块 → 解码电路 → 执行机构关键参数对比表参数典型值范围说明载波频率433.92MHz ± 1%ISM免许可频段调制方式ASK/OOK振幅键控/开关调制数据速率2-10kbps取决于编码方案发射功率≤10dBm法规限制值传输距离30-100米视环境而定2. 硬件准备与信号捕获2.1 所需设备清单数字示波器带宽≥100MHz采样率≥1GS/s如Rigol DS1104Z逻辑分析仪24MHz带宽足够Saleae Logic Pro 8433MHz接收模块超外差式如XY-MK-5V待测遥控器拆解后引出DATA测试点衰减器/天线防止信号过载2.2 连接方案遥控器DATA引脚 → 示波器CH1 接收模块OUT引脚 → 示波器CH2 逻辑分析仪通道0 → 同步触发信号提示确保所有设备共地使用10:1探头防止电路负载效应2.3 波形捕获技巧设置示波器触发模式为下降沿触发时间基准调整到1ms/div开启单次触发模式按下遥控器按键捕获完整信号帧典型波形特征______|¯¯|____|¯¯¯|___|¯|____ (高低电平交替) SYNC BIT0 BIT1 ... BITN3. 协议逆向分析方法论3.1 同步头识别通过测量首个低电平持续时间识别同步信号# 伪代码示例同步头检测 def is_sync_pulse(width): return 9000 width 14000 # 单位微秒常见同步模式长低电平9-14ms脉冲串如1ms高4ms低曼彻斯特编码前导码3.2 逻辑电平判定建立时间阈值字典解析数据位// 时间阈值定义单位us #define THRESHOLD_0_MIN 750 #define THRESHOLD_0_MAX 1500 #define THRESHOLD_1_MIN 0 #define THRESHOLD_1_MAX 5003.3 数据帧结构解析典型帧结构示例[同步头][24位地址][4位按键数据][校验位]位解析算法测量每个低电平脉冲宽度根据阈值判断逻辑值按MSB或LSB顺序组合数据位4. 实战解码0x55AAFF信号4.1 波形测量数据脉冲序号低电平宽度(us)逻辑值112000SYNC23501311000.........4.2 数据重组过程01010101 10101010 11111111 → 0x55 0xAA 0xFF位时序分析表位位置实测宽度标准范围判定结果BIT0380us0-500us1BIT11020us750-15000............4.3 校验机制验证常见校验方式奇偶校验统计1的个数CRC8多项式校验反码校验如0x55与0xAA互为反码5. 单片机解码实现5.1 STM32硬件配置// GPIO初始化接收模块连接PB8 GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin GPIO_PIN_8; GPIO_InitStruct.Mode GPIO_MODE_INPUT; GPIO_InitStruct.Pull GPIO_PULLDOWN; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); // 定时器配置1us分辨率 TIM_HandleTypeDef htim3; htim3.Instance TIM3; htim3.Init.Prescaler 72-1; // 72MHz/72 1MHz htim3.Init.CounterMode TIM_COUNTERMODE_UP; htim3.Init.Period 0xFFFF; HAL_TIM_Base_Start(htim3);5.2 中断服务程序void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static uint32_t last_fall 0; if(GPIO_Pin GPIO_PIN_8) { if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) GPIO_PIN_RESET) { // 下降沿捕获 last_fall TIM3-CNT; } else { // 上升沿计算脉宽 uint32_t width TIM3-CNT - last_fall; decode_pulse(width); } } }5.3 解码状态机stateDiagram [*] -- IDLE IDLE -- SYNC_DETECT: 长低电平 SYNC_DETECT -- DATA_READ: 同步确认 DATA_READ -- DATA_READ: 接收数据位 DATA_READ -- FRAME_END: 收满24位 FRAME_END -- IDLE: 重置状态6. 进阶技巧与异常处理6.1 抗干扰措施软件滤波连续3次采样一致才确认动态阈值根据信号强度自动调整白名单机制只响应已知地址码6.2 协议模拟发射# 使用RPi.GPIO模拟发射示例 import RPi.GPIO as GPIO import time TX_PIN 17 def send_pulse(width_us, state): GPIO.output(TX_PIN, state) time.sleep(width_us / 1e6) def send_433(data): GPIO.setup(TX_PIN, GPIO.OUT) # 发送同步头 send_pulse(10000, GPIO.LOW) # 发送数据位 for bit in format(data, 024b): if bit 1: send_pulse(400, GPIO.LOW) else: send_pulse(1000, GPIO.LOW) send_pulse(500, GPIO.HIGH) # 高电平间隔6.3 常见问题排查无信号检查电源电压、天线连接解码错误调整时间阈值、检查时钟精度距离短更换电池、优化PCB天线设计7. 安全与合规要点频段合规确保工作在433.92±0.2%MHz范围内发射限值功率不超过10mW中国标准数据加密建议增加滚动码等安全机制干扰避免采用随机延时重传策略在智能车库门改造项目中通过这种逆向方法成功将旧遥控器协议移植到ESP32-C3实现了手机APP控制。关键发现是原厂使用0x55AAFF作为固定地址码存在安全隐患改进后采用AES-128动态加密。