dwgx@blog:~$dwgx
> cd ../posts

扒 VIVE Ultimate Tracker 的 dongle 固件

// created

Ultimate Tracker 的定位追踪靠一个 USB dongle 跟主机通信, dongle 里跑的是 nRF52840。这个项目是我对它 dongle 固件做的第三方离线逆向档案, 全程只碰 dump 出来的字节, 不碰真机、不分发任何厂商固件或驱动。跟 HTC、VIVE 没有关系, 名字只是指代研究对象, 商标归各自权利人, 觉得不妥提 issue 我删。

固件是两块拼的: img1 是 app, 落在 0x27000; img2 是 bootloader, 落在 0xEA000。逆向时立了一套证据分级, 每条结论都标等级——[P] 证实、[I] 行为看懂但缺命名、[U] 未知、[R] 需要真机。没证据就老实留 [U], 不瞎猜。

收尾时函数标注做到 999/999, img1 源码级重建 574/599, 也就是 95.8%; 剩下 35 个 peripheral/ABI 对不上官方 SDK 命名, 这是离线的天花板。重建结果重组成能直接 make 的标准 C 工程, 工具链 Arm GNU Toolchain 14.2。改的能力也验过: 原版 round-trip 做到 bit-identical, recovery gate 过 50/50。

流程用 Python 串起来。verify_campaign.py 跑离线验证, recovery_preservation_check.py 是防砖 gate, safe_modifiable_set.py 圈出能安全改的对象, make_flash_image.py 做包装。想升级成可刷候选, 先过 gate, 不过别想。但话得说死: 功能等价不等于原厂字节一致, 过了 gate 只是必要条件, 不是保证刷不坏。HID identity、live metadata、app hash、回滚这几件离了真机根本关不掉, 而这项目从头就不碰真机刷写。

纯离线静态逆向做到诚实边界: 能查的都查清, 可复现, 有据可查。再往下是真机刷写, 风险和授权都是另一码事。2026-06-30 主动停更。它是一份详尽图纸, 不是现成的刷写包。

仓库 https://github.com/dwgx/UltimateTracker_FirmWare