astuder/Inside-EZRadioPRO
GitHub: astuder/Inside-EZRadioPRO
对Silicon Labs EZRadioPRO系列子GHz射频芯片进行逆向工程,解析其固件与寄存器并支持自定义补丁开发。
Stars: 70 | Forks: 8
# Silicon Labs EZRadioPRO 内部
逆向工程 SiLabs EZRadioPRO 系列 RF 集成电路,目标是编写自定义固件补丁。
为避免版权问题,本仓库不包含固件镜像或从 SiLabs 二进制文件自动生成的文档。请使用提供的 Python 脚本提取固件镜像或生成文档。
欢迎提交拉取请求,尤其是能补充文档的[逆向工程笔记](docs/regs)。
## 进展
- 转储所有内存地址空间,包括 CODE 和 NVM
- Si4362-B1B、Si4362-C2A、Si4460-C2A、Si4463-B1B、Si4467-A2A、Si4438-C2A
- 在无线电 IC 上运行自定义代码
- 逆向工程[补丁机制](docs/boot.md#patch-process)并创建[工具](tools/README.md#patchcryptopy)用于自定义固件补丁
- 使用 radare2 分析和标注固件的大部分内容
- Si4362-C2A:引导加载程序、主应用程序镜像(FUNC1)
- 在 WDS 中发现[内部文档](docs/wds-xml-docs.md)用于 API 和寄存器
- 创建用于固件分析的[工具](ghidra),基于 Ghidra
## 文档
- [寄存器与 API 文档](docs/wds-xml-docs.md),从 WDS 中隐藏的数据生成,并结合逆向工程笔记增强
- [不同模式下的 API 命令列表](docs/api-cmd.md),包括未记录的命令
- [内存映射](docs/memory-map.md)
- [引导加载程序与补丁机制](docs/boot.md)
- [技术分享](talks)
## 工具
- [tools/ezradiopro.py](tools/README.md#ezradiopropy):用于与无线电通信、转储内存和上传自定义代码的 Python 库和命令行工具
- [docs/generate-docs.py](docs/generate-docs.py):从 SiLabs WDS 可执行文件中隐藏的信息生成 HTML 文档的 Python 脚本
- [tools/wds-xml-extract.py](tools/README.md#wds-xml-extractpy):提取包含 SiLabs WDS 中隐藏的内部文档的 XML 文件的 Python 脚本
- [tools/patchcrypto.py](tools/README.md#patchcryptopy):用于解密和加密固件补丁的 Python 脚本
- [tools/ihex2patch.py](tools#ihex2patchpy):从 Intel 十六进制文件创建补丁文件的 Python 脚本
- [ghidra](ghidra):用于分析转储固件的工具,包含用于 8051 内核的自定义处理器定义以及导入 EZRadioPRO 寄存器的插件
- [radare2](radare2):用于分析转储固件的工具,包含固件注释
## 发现
无线电的数字部分由一个 8051 内核运行,其实现了:
- [启动与上电流程](docs/boot.md)
- 多数 SPI API(例外:CTS、FIFO 读/写、FRR 访问)
- 设备状态机与中断、看门狗定时器、IRCAL、信道跳频
- 大多数数据包处理功能
剩余功能由硬件实现:
- SPI 通信由一个[专用外设](docs/regs/mod-spi.md)通过 [DMA](docs/regs/mod-spi_dma.md) 与 8051 地址空间交互。
- GPIO 似由多路复用器控制,8051 MCU 与引脚交互仅能通过间接方式。
- 根据[专利](https://patents.google.com/patent/US8050313B2),射频调制解调器采用 DSP 实现。尚未找到访问 DSP RAM 或固件的方法(目前)。
EZRadio 与 EZRadioPRO 产品家族共享相同的硅片,仅通过非易失性存储器(NVM)的工厂编程(OTP)进行区分。参见[本专利](https://patents.google.com/patent/US7613913B2/en)。
支持这一结论的证据包括:
- 相同修订版本(如 B1B、C2A/A2A)的寄存器映射和固件 ROM 相同,但旧版 B1B 与新版 C2A/A2A 之间存在显著差异。
- 所研究的 C2A 部分的 RAM 代码相同,与 A2A 部分存在细微差异。
- RAM 中的代码、硬件预设值和校准数据在启动和上电时从 NVM 复制。
- C2A 与 A2A 的 NVM 内容存在显著差异。
- NVM 组织与锁定方式与应用笔记 [AN518 Si4010 Memory Overlay Technique](https://www.silabs.com/documents/public/application-notes/AN518.pdf) 描述相似。
- EZRadioPRO 固件的代码包含 EZConfig 命令,这些命令仅在 Si4355、Si4455 等 EZRadio 系列文档中有说明。
- 固件 ROM 末尾发现的字符串 `si4440` 与[Si4362-C2A](https://github.com/astuder/Inside-EZRadioPRO/blob/master/img/Si4362-C2A-marking.jpg) 的芯片标记相符;该字符串也曾被 [TechInsights](http://www.techinsights.com/reports-and-subscriptions/open-market-reports/Report-Profile/?ReportKey=FAR-1606-804) 在 Si4355 中发现。
- [高分辨率芯片照片](https://github.com/astuder/Inside-EZRadioPRO/blob/master/img/Si4362-C2A-top20x-goodspeed.jpg) 显示,Travis Goodspeed 提供的 Si4362-C2A 芯片上大部分数字部分被金属层遮盖。
- Si4440 芯片同样[出现在 Si1062](http://www.siliconpr0n.org/archive/doku.php?id=infosecdj:silabs:si1602) 中。该芯片为 B1B 修订版,与 C2A 相比仅存在细微差异。
- Si4440 C2A 芯片同样[出现在 EZR32HG220](https://electronupdate.blogspot.com/2026/04/amazon-blink-gen3-outdoor-camera.html) 中([YouTube 视频](https://youtu.be/BPvyd_3hW0g?t=288))。这很可能适用于短命的 EZR32 系列的所有成员。
标签:API 命令, EZRadioPRO, Ghidra, Python, radare2, Ruby on Rails, Silabs, Waymore结果处理, 内存映射, 内存转储, 反向工程, 固件分析, 固件加密, 子GHz, 寄存器文档, 射频芯片, 引导加载程序, 无后门, 物联网安全, 硬件逆向, 自定义固件, 补丁机制, 逆向工具