前言です。事情的起因是作者最近在折腾手机当 CPE(就是那种拿 5G 手机插 USB 给全家供网的骚操作),测着测着速突然盯着 MIUI 的 Wi-Fi 列表发呆——为什么「黑可实验室」旁边有个专属的小米标,而隔壁 OpenWrt 的「小猫看世界」就只有个光秃秃的 Wi-Fi 图标?
作者一开始信誓旦旦地跟朋友说:「肯定是看 BSSID 的 OUI 啦,小米给自家路由注册了一堆 MAC 段,手机端维护一张白名单就完事了」。
然后作者把 HyperOS 的 Settings 拆了,发现判定逻辑压根不看 BSSID,当场被打脸。🤡 不仅被打脸,这个判定还宽松得离谱——宽松到任何路由器都能白嫖。不改白不改,开整!
测试环境
| 项目 | 配置详情 |
|---|---|
| 被反编译对象 | HyperOS Settings(小米手机系统设置,Wi-Fi 列表的徽标就是它画的) |
| 小米路由 | 小米路由器 BE3600(内部型号 RD16,WPA2-PSK,5G 信道 44) |
| 对照组 | CMCC RAX3000M 刷 ImmortalWrt(SSID「小猫看世界」,sae-mixed) |
| 逆向工具 | adb + jadx 1.5.6(字符串定位 → 单 dex 反编译,两分钟出人话) |
| 抓包工具 | iw scan(Linux,MT7922 网卡) |
准备材料
- 一部小米手机(HyperOS,型号随意,能连 adb 就行)
- 一台电脑(我不到啊,我就喜欢 Linux)
- jadx 一位(推荐 jadx,别的反编译器都玩不明白 r8 的 lambda 命名,截止 2026 年 9 月 9 日)
- 良好的网络环境(GitHub 直连不动,你知道我在说什么👁)
- 极强的动手 / 思考 / 搜索能力
适用人群
会用 Linux 和 adb,此教程并不适合小白。
先把判定逻辑挖出来
思路很清晰:Wi-Fi 列表的图标是 Settings 画的,那就从它下手。把 Settings.apk 拉下来,先 strings 撒网找关键词 XiaoMiRouter、xiaomi_router,锁到 classes4.dex(Wi-Fi 相关的代码都住这),再丢给 jadx 单文件反编译——然后就看到了 com.android.settings.wifi.XiaomiRouterUtils,判定函数 isXiaomiRouter() 明明白白:
// 遍历扫描结果里的每个 Vendor Specific IE(ID 221 = 0xDD):
if (IE长度 > 3 && OUI == 00:17:92) → 小米路由
if (IE长度 > 6 && OUI == 80:AD:16 && 后3字节 == 01 01 01) → 小米路由
if (IE原始字节转小写后包含 "xiaomi") → 小米路由
什么?!就这么点?就这么点。判定只看广播帧里的 Vendor Specific 信息元素,SSID 什么都不看,BSSID 的 OUI 什么都不看。作者那个「小米维护 OUI 白名单」的推测直接卒。
三条规则逐个考证
| 规则 | OUI 归属 | 考据结果 |
|---|---|---|
| 00:17:92 | Falcom Wireless Comunications GmbH(德国,2006-04 注册) | 和小米毫无关系,纯历史遗留。疑似早期某批小米硬件用了这家的模块,或者是写代码时抄来的老列表 |
| 80:AD:16 + 01 01 01 | Xiaomi Communications(2017-12-11 注册) | 小米自家的路由私有 IE 格式,货真价实 |
| 字节流包含 “xiaomi” | —— | 小米官方路由命中的就是这条!BE3600 的 WPS IE(OUI 00:50:F2)里写着 Manufacturer: xiaomi 和 Device name: XiaoMiRouter,整段字节一转小写就中招 |
我嘞个豆,小米路由靠的是「WPS 字段里恰好有小米俩字」这种巧合式匹配,而不是什么专门的识别协议。那普通路由器白嫖起来就是改一个字符串的事。
实操:hostapd / OpenWrt
规则 3 是子串匹配,那最短路径就是广播一个内容为 xiaomi 的 221 号 IE。xiaomi 的 ASCII 十六进制是 78 69 61 6f 6d 69,整个 IE 长这样:
dd 06 78 69 61 6f 6d 69
│ │ └── "xiaomi" 的 ASCII
│ └── IE 长度 = 6
└── IE 类型 = 0xDD(221,Vendor Specific)
hostapd 配置(Padavan / 梅林 / OpenWrt 底层都是它):
# /etc/hostapd/hostapd.conf
vendor_elements=dd067869616f6d69
OpenWrt 一条命令:
uci set wireless.default_radio1.vendor_elements='dd067869616f6d69'
uci commit wireless
wifi reload
验证(主机上扫一下):
$ iw dev wlan0 scan | grep -A1 'Vendor specific'
Vendor specific: OUI 00:00:00, data: 78 69 61 6f 6d 69
然后掏出小米手机刷新 Wi-Fi 列表——小米标就这么白嫖到手了😋。
⚠️Tips
- IE 长度(
06)要和 payload 对得上,算错了整段 IE 直接被驱动丢掉,白忙活; - 这是纯显示层标记:米家绑定、远程管理、路由器 App 配网统统不生效,别指望白嫖出个小家;
- 两个 BSSID(2.4G/5G)最好都加,因为判定是对整组扫描结果做的,漏一个频段偶尔会翻车。
彩蛋
- 同一个文件里还躺着
wx / dp / mt / nm四个指示器——微信连Wi-Fi、大众点评、美团、糯米的门户标,老网民的青春回来了(这段历史见下节,考证过是真的); - Wi-Fi 详情页里的「管理路由器」按钮,逻辑是打开
http://<当前网关>,取不到网关就回落http://192.168.31.1(小米默认地址),抄作业的时候顺手把 WPS 的 UUID 写成了87654321-9abc-def0-1234-<MAC后6位>,确实好笑。
感谢名单
- 感谢 @skylot(jadx 作者),字符串定位 → 单 dex 反编译的工作流纯属他赏饭;
- 感谢 maclookup.app 和 uic.io,OUI 归属查证全靠这俩;
- 感谢 miot-spec(小米米家产品库),
xiaomi.router.rd16→ BE3600 的型号对号入座就是在这查的。 - 感谢 opencode 的 Omen Alpha 模型——「字符串定位 → 单 dex 反编译」的活儿是它干的,HyperOS 判定逻辑的定位、OUI 考证、商户 Wi-Fi 历史考据和本文初稿,也全是它操刀,作者本人主要负责说「干得好」和「重写一版」。
历史小故事:商户 Wi-Fi 大战(2014–2018)
wx / dp / mt / nm 这四个化石不是小米瞎画的,它们对应一场真实存在过的商战——「商户 Wi-Fi」大战。查证过雷锋网 2014–2015 年的报道和界面新闻的回顾,时间线大致如下:
- 2014-11:「微信连 Wi-Fi」悄然上线(雷锋网原话「图穷匕现」),玩法是商家买微信认证路由 → 顾客扫码关注公众号 → 免密上网,商家涨粉、微信拿走线下入口;2015-03 申请入口全量开放。张小龙亲手定的方向,首批服务商有迈外迪、潮 WiFi 这些名字。
- 巨头站队:阿里 1 亿元投树熊网络(2014-08);腾讯和大众点评 3 亿元投迈外迪(2014-12);百度领投 16WiFi;360 领投聚玩网络 1.2 亿。半年内 20 多家创业团队拿到融资,跟共享单车一个剧本。美团、大众点评、百度糯米(nm 就是谁)也都推出过自家的商户 Wi-Fi 门户。
- 其实小米也下过场:迈外迪的 B 轮就是小米投的,2014-03 的 MIUI 更新里就内置过「免费 Wi-Fi」功能,到迈外迪网点自动连。所以 MIUI 的 Wi-Fi 徽标文化不是 2014 年才有的,是本身就出身这个行业。
- 死亡:2018 年初 iOS 11.3 砍掉了 Portal 页唤起微信的能力——苹果用户连上商户 Wi-Fi 后既不能唤起微信认证也不能扫码,微信连 Wi-Fi 的核心链路当场断气。再加上《网络安全法》要求公共场所上网实名(微信 API 只能拿 openid,给不了实名)、流量资费跳水,整个行业卒。2017-11 迈外迪转型新零售,16WiFi 砍掉 11 座城市,80% 的从业者消失。
- 幸存者:这场大战唯一活着走出废墟的徽标就是「小米标」——因为它不掺和商业变现,就是个纯装饰,反而活得最久,久到今天我们还能拿 OpenWrt 白嫖。
所以严格来说,你今天在 OpenWrt 上广播 dd067869616f6d69 干的事,和 2015 年商家广播「微信连 Wi-Fi」IE 干的事是同一件事:在 Wi-Fi 列表里骗一个 logo。只不过他们骗来的是流量,我们骗来的是乐子。
参考来源
- 雷锋网:《图穷匕现,微信连WI-FI悄然上线》(2014-11-20)——leiphone.com
- 雷锋网:《微信来了,商用WiFi的日子是更好了还是更坏了?》(2014-11-20)——leiphone.com
- 雷锋网:《“微信连WiFi”申请入口正式开放,扫码即可上网》(2015-03-06)——leiphone.com
- 界面新闻 · JMedia(锌财经):《Wi-Fi的前生后世:致敬永不停歇的商业探索》——jiemian.com
- 晰数塔:《你还记得商业Wi-Fi吗?》(2019-11-30)——xishuta.cn
- 笨驴信息:《微信WiFi还能走多久?微信Wi-Fi功能最新测试结果分析》(2018)——imfirewall.com
- 驱动中国:《“微信连Wi-Fi”蕴含商机》(2014-11-26)——qudong.com
判定逻辑与 IE 抓包为本文作者逆向实测;OUI 归属查证自 maclookup.app 与 uic.io,机型与认证信息查证自 miot-spec 与 CMIIT ID 2024-5036。
授权
本文(含逆向结论、配置片段与历史考据)以 CC BY-SA 4.0 授权发布:转载请署名「新毛知识库 / Hakudesu」,并以相同方式共享。所引新闻报道版权归原作者所有。
声明
本文仅为逆向研究记录。标识骗得来,功能骗不来,米家绑定该失败还是失败。另外这匹配宽松到什么程度呢——你甚至可以在 IE 里写「不是小米」然后它也中招,因为 contains(“xiaomi”)……哦不对,「不是小米」里确实有小米。行了,就写到这。
已严肃在Asus Router和OpenWRT上复现😋