beepometer/nexmon-bcm4389c1
GitHub: beepometer/nexmon-bcm4389c1
该项目是首个针对 Pixel 6 Broadcom BCM4389c1 芯片的 nexmon 监听模式移植,通过逆向工程补丁与配套工具实现手机内置 Wi-Fi 射频的帧捕获能力。
Stars: 0 | Forks: 0
# nexmon for BCM4389c1 (Pixel 6) — 正在进行中
一个逆向工程的 [nexmon](https://github.com/seemoo-lab/nexmon) 固件补丁
移植,目标是 **Google Pixel 6 (`oriole`)** 设备中搭载的 **Broadcom BCM4389c1** Wi-Fi 6E 组合芯片,固件版本为 **20.101.90 (r1098710, FWID 01-3f632e0d)**。
其目标是在手机的*内部*射频上实现监听模式(以及长期的帧注入)——无需外部 USB 网卡。据我们所知,这是首个针对 `4389` 级别芯片的公开 nexmon 研究工作。
## 为什么即使未完成也值得关注
- **一份完整的适用于 4389c1 的 `definitions.mk`** —— 包含了 nexmon 所需的每一个地址(RAM/ROM 布局、三个 D11 微代码 blob 及其指针池插槽、四个模板 RAM 区域、TCAM/flashpatch 配置表、reclaim-3 边界、版本指针),这些内容均通过反汇编恢复,并与原厂镜像进行了交叉验证。
- **针对只写 UCM 的微代码下载路径。** 在该芯片上,ucode 内存无法直接寻址;它是通过 D11 `objaddr`/`objdata` 后端窗口写入的。nexmon 原生的解压器假设 UCM 是字节可寻址的,因此本次移植提供了一个覆盖方案,通过 `objdata` 流式传输解压后的 ucode(`patches/common/ucode_compression_code.c`)。这里曾存在一个隐蔽的 bug:对 packed struct 字段进行 32 位寄存器存储时,被编译为四条 `strb` 指令,这会被后端拒绝——已通过强制执行单字存储修复。该修复清除了芯片的下载停滞问题。
- **RE 工具**(`tools/fw_re/`)—— 基于 capstone + radare2 的辅助工具,能够为*不同*的固件版本重新推导上述所有内容,从而实现移植的 rebase。
- **关于剩余阻碍的如实分析** —— 一个固定偏移的 DMA 地址错误 bug,已在 `docs/` 中提供了相关证据记录。
## 布局
```
firmwares/bcm4389c1/20_101_90_r1098710/ nexmon firmware defs (definitions.mk, structs.h, Makefile)
patches/bcm4389c1/20_101_90_r1098710/ the nexmon patch (patch.c, version, linker, Makefile)
patches/common/ucode_compression_code.c override: decompress ucode into the write-only UCM
tools/fw_re/ RE tooling: rebase the address map for another build
scripts/ on-device helpers (firmware swap, monitor gate, channel tune)
oot/mon_flip/ out-of-tree kernel module: flip the driver's monitor gate
docs/ RE writeup, current status, build notes
```
## 您必须自行提供固件
本仓库**不包含任何 Broadcom 固件**。`fw_bcmdhd.bin` 为专有内容,不可再分发。如需构建,请从**您自己**设备的 `/vendor/firmware/` 目录中提取 `fw_bcmdhd.bin`(如果用于 RE,还需生成 `.map` 文件),并将其放置在仓库根目录下。
此处的地址映射专门针对固件 `20.101.90 r1098710`;不同的构建版本需要进行 rebase(`tools/fw_re/`)。请参阅 [BUILD.md](BUILD.md)。
## 与 nexmon 的关系
这是一组芯片/固件定义、补丁和覆盖文件,旨在应用于上游 nexmon 代码库之上——而不是它的一个 fork。`patches/` 和 `firmwares/` 目录下源自 nexmon 的文件保留了 nexmon 的 **GPL-3.0-or-later** 头部信息;树外(out-of-tree)内核模块 `oot/mon_flip/` 按照内核惯例采用 **GPL-2.0** 协议。每个文件的 SPDX 标识符为权威来源——请参阅 [LICENSE](LICENSE)。感谢 SEEMOO Lab 的 nexmon 项目,本项目正是基于其框架和规范构建的。
## 安全性 / 适用范围
仅供您在自己的设备上进行研究使用。此处的监听模式工作**仅限接收(receive-only)**;未启用任何 TX 路径。设备上的所有更改都是可逆的(通过 bind-mount + `rmmod`/`insmod`;重启即可恢复原厂状态)。请遵守您所在地区关于监听和 6 GHz 频段的法律法规。
标签:Cutter, Monitor Mode, WiFi, 主机安全, 云资产清单, 固件补丁, 客户端加密, 嵌入式开发, 物联网, 逆向工程, 防御绕过