Roborock Local Server 逆向工程揭秘:如何让扫地机把云端请求打到你的本地服务器
【免费下载链接】local_roborock_serverLocal HTTPS and MQTT cloud emulator for Roborock vacuums without rooting or hardware modifications项目地址https://gitcode.com/gh_mirrors/lo/local_roborock_server点击查看免费下载一、为什么扫地机离不开云端Roborock Local Server 是一个开源的本地 HTTPS 和 MQTT 云端模拟器它能把 Roborock石头科技扫地机的所有云端请求重定向到你局域网里的服务器无需 root、无需拆解硬件即可让扫地机、实时地图和本地控制完全脱离官方云。要理解它怎么做到这一点先要知道扫地机与官方云之间的三条通信链路协议用途REST (HTTPS)配对、登录、地图数据等主要发生在 onboarding配对阶段MQTT (TLS)云端与扫地机之间的命令/状态通道TCP (本地)手机 App 与扫地机在局域网内的直连通信 过去的两个枷锁地图被云锁定—— 尽管地图数据就存在扫地机本地但 Roborock 强制所有地图请求走官方云服务器云端健康检查—— 一旦扫地机连不上官方服务器它会反复重启自己的网络接口本地通信随之中断。Local Server 的思路就是在配对阶段接管扫地机让它把 REST 和 MQTT 的目的地都指到你的本地服务器。二、逆向工程全链路从抓包到公钥恢复下面按项目 docs/technical_writeup.md 中作者本人的逆向笔记还原整条技术路线。1. 抓包逆向摸清 onboarding 协议最初团队使用 mitmproxy 抓取全部 REST 报文和加密的 MQTT 消息再用 Wireshark rvictl 让 iPhone 流量经过 Mac观察本地 TCP 连接上部分明文消息。这条路线搞清了基础流程但当不同机型的参数、方法各不相同时就触及了天花板。随后转向App 逆向用 jadx 反编译 Roborock APK 得到 onboarding 与 REST 请求的基础逻辑再用 python-roborock 的函数下载任意机型的 React Native bundleHermes 字节码用 hermes-dec 反编译后拆分成约 3000 个可读的 JS 文件拿到各机型的命令、属性和状态码。 关键洞察配对流程是控制一切的入口。作者用自己的电脑模拟手机/扫地机两端反复往返抓包最终完整复现了 onboarding 流程手机生成密钥对向扫地机发送hello和自己的公钥扫地机用该公钥加密返回会话密钥手机用会话密钥AES 加密下发 Wi-Fi 配置和token含地区码r扫地机把地区码注入模板api-%s.roborock.com然后请求/region端点附带设备 ID、产品 ID、nonce 和一个RSA 签名signature。2. 关键转折向扫地机注入自定义 URL配对报文中的地区码会被注入 URL 模板而扫地机对注入内容没有长度限制、也不做任何净化。作者把token.r设为myserver.domain.com/扫地机请求的地址就变成了自己控制的服务器 —— 域名注入成功但当时的死胡同在于官方服务器返回的 region 信息是用存放在 Roborock 服务器上的公钥加密的本地没有这把公钥扫地机就不认你的响应。而私钥又锁在扫地机固件里root 刷自定义固件才能拿到。这条路在 2025 年初被判了死刑。3. 神来之笔用 GCD 从签名里恢复公钥2026 年作者借助 AI Agent 重新出发给 Agent 提供 root 后的 S7 SSH 权限、固件文件、python-roborock 库、APK 反编译结果以及把固件跑进 QEMU ARM chroot 的模拟器让 Agent 可以在本地反复验证假设。Agent 最终指出突破口就在/region请求里的那个signature参数。数学原理其实很巧妙RSA PKCS#1 v1.5 签名是确定性的sig pad(SHA256(msg))^d mod n其中pad()是固定的 ASN.1 前缀 哈希验证等式为sig^e mod n pad(SHA256(msg))公开指数e 65537已知sig、可自行计算pad(SHA256(msg))唯一的未知数是模数n即公钥本体变形得sig^e - pad(SHA256(msg)) k * n也就是差值是n的整数倍收集两条不同查询串带签名的请求各算一次差值再取最大公约数GCD剔除小素因子后就是n。一句话总结不需要私钥不需要破解 RSA只需要两条带签名的请求和一次 GCD。拿到模数后用n e65537重建完整公钥就能像官方服务器一样加密 bootstrap 响应扫地机完全无法分辨。这部分实现位于 device_key_recovery.py使用 gmpy2 处理 2048 位大数运算。4. MQTT 桥接最简单的一环TLS 证书问题因为域名是自己注入的而变得平凡。真正有意思的是 MQTT 消息路由。每台设备有 4 类主题rr/d/i/{did}/{mqtt_user}—— 扫地机 → 服务器rr/d/o/{did}/{mqtt_user}—— 服务器 → 扫地机rr/m/i/{...}/{userid}/{duid}—— 用户App→ 服务器rr/m/o/{...}/{userid}/{duid}—— 服务器 → 用户所谓云端做的核心事情就是把rr/m/i上的消息转发到对应的rr/d/o把rr/d/i上的消息转发到rr/m/o。这个桥接逻辑实现在 topic_bridge.py用两条正则分别匹配两类主题即可完成转发。5. 官方 App 重定向最后让手机端也入伙用 MITM 抓取 App 登录时返回的 user data内含所有 Roborock 服务器 URL把 URL 全部改写成你的本地服务器地址App 后续所有 API 调用就都打向本地了之后可以关掉 MITM。项目提供 mitm_redirect.py 脚本完成这一步详见 docs/roborock_app.md。三、项目结构每个机关在哪里如果你想对照源码理解整套机制这几个位置最值得看bootstrap 路由扫地机配对时请求的/region、/nc、/time等端点routes/bootstrap/其中 region.py 和 nc_prepare.py 就是 URL 注入后扫地机最先打到的接口响应会用恢复出的公钥加密。公钥恢复算法device_key_recovery.py签名采样、GCD 求模数、公钥验证都在这里。MQTT Broker 与主题桥mqtt_broker_server/ 提供 TLS MQTT 服务topic_bridge.py 负责rr/d/*与rr/m/*的双向转发。本地 API 路由表endpoint_rules.py 集中注册了 v1~v5 的登录、用户、设备、场景等全部端点相当于迷你 Roborock 云的路由索引。配对脚本在第二台电脑上运行start_onboarding.py 与 Web 版 start_onboarding_gui.py。四、快速上手从克隆到配对完成⚠️ 前置要求一个你拥有的域名子域名需以api-开头如api-rr.example.com、能改写本地 DNS 的网络Pi-hole / AdGuard Home / 路由器、以及一台用于配对的辅助电脑。安装—— 按 docs/installation.md 用 Docker Compose 或 Home Assistant 插件方式部署并先用 admin 面板完成云端数据导入家庭、房间、已知设备清单。注意主机名去掉api-前缀后加:端口/不能超过 32 字符短域名更安全。选择证书路径—— 不同机型信任不同的证书链先查 docs/tested_vacuums.md多数用户选 ZeroSSL老机型可考虑 Actalis。运行配对—— 在第二台电脑上执行引导脚本详见 docs/onboarding.mduv run start_onboarding.py --server api-rr.example.com脚本会提示你重置扫地机 Wi-Fi、切到扫地机热点、再切回家用 Wi-Fi然后轮询服务器等待签名样本增加、公钥恢复完成。观察结果—— 首次配对通常会增加签名采样数若公钥尚未确定再跑 1~3 个配对周期直到提示 Public Key determined 且扫地机显示已连接本地服务器。手机 App 接入—— 按 docs/roborock_app.md 完成官方 App 重定向或改用开源的 LocalRock 直连。✅ 至此扫地机的 REST、MQTT 流量全部落在你的局域网里。想撤回重置扫地机 Wi-Fi 即可回到出厂配对模式整个过程可逆且风险极低。五、已知限制与兼容性暂不支持入门级 Q 系列如 Q7注意不是 QRevo因为证书校验方式不同固件更新、定时任务Schedules暂不可用场景Routines/Scenes正常国行机型在境外使用会被固件rrcheck区域校验拒绝相机直播流需配合 TURN 中继仅验证过 Saros 10R 和 Qrevo MaxV。完整清单见 docs/known_limitations.md。写在最后这套方案最精妙之处在于它是一个零风险利用攻击面需要物理接触扫地机和你的局域网且几秒即可撤销。作者也坦承——Roborock 本可以让地图请求走本地连接让设备 100% 离线工作。Local Server 用一次教科书级的协议逆向确定性签名 GCD 公钥恢复把这件事变成了现实。如果你想动手从 docs/index.md 的文档索引开始即可。赞分享【免费下载链接】local_roborock_serverLocal HTTPS and MQTT cloud emulator for Roborock vacuums without rooting or hardware modifications项目地址https://gitcode.com/gh_mirrors/lo/local_roborock_server点击查看免费下载相关推荐如何让Roborock扫地机器人真正融入你的智能家居系统你是否曾经遇到过这样的困扰想要远程控制扫地机器人却不得不在手机App和HomeAssistant之间来回切换现在通过homeassistant robo物联网智能家居推荐本地Web服务器——local-web-server推荐本地Web服务器——local web server 在开发过程中一个强大且灵活的本地Web服务器是必不可少的工具今天我们要向你推荐的就是这样一个利器开发工具后端如何免密钥激活 Windows 11 与 OfficeMAS 脚本 3 种方式一条命令搞定如何免密钥激活 Windows 11 与 OfficeMAS 脚本 3 种方式一条命令搞定 MAS 激活脚本Microsoft Activation Scr运维上一篇MoviePilot终极指南如何实现NAS媒体库的智能洗版与自动化升级下一篇Nintendo Switch大气层系统5步掌握最稳定的破解方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考