👁 2936

之前那篇 Nokia Beacon 10 WIFI6E BE 另类emmc 主要是写拆机和找 eMMC 的过程。那时候资料少,官方页面也只是贴了一堆规格,真正有用的内部结构还没展开。

这次把 UserData.bin 读出来之后,事情就清楚多了:这台 Nokia Beacon 10 不是普通路由器那种“一个 kernel、一个 rootfs、几个配置区”的简单布局,而是 Qualcomm IPQ9574 平台上比较完整的一套 eMMC GPT 分区方案(同平台的还有 Xfinity XER5,那边拆得更细,GPT 44 分区表都整理出来了),启动链、Wi-Fi 固件、A/B 系统、Nokia 出厂信息区、密码安全区全都在 user area 里。

本文已经做脱敏处理。后台明文密码、启动密码、完整哈希、完整 MAC、序列号、随机种子这些能直接复用的信息不公开,只讲结构和算法。

Nokia Beacon 10 官方产品图

先说硬件:这机器不是小玩具

Nokia Beacon 10 官方定位是 Wi-Fi 6E 三频 Mesh 网关,规格看着确实挺高。原文里复制的英文官方介绍就不放了,压成能看懂的硬件信息大概是这样:

项目 信息
机型 Nokia WiFi Beacon 10
定位 Wi-Fi 6E 三频家庭网关 / Mesh Beacon
无线规格 AX10200 / AXE10200 级别
SoC / 平台 Qualcomm IPQ9574LA / IPQ9574
系统架构 OpenWrt ipq95xx/generic,aarch64
2.4 GHz 802.11b/g/n/ax,2×2 MIMO
5 GHz 802.11a/n/ac/ax,4×4 MIMO
6 GHz 802.11a/n/ac/ax,4×4 MIMO
信道宽度 支持 160 MHz
WAN 1 个 1G/2.5G/5G/10G Base-T RJ45
LAN 1 个 2.5G LAN + 2 个千兆 LAN
Mesh Nokia WiFi / EasyMesh 体系,最多可扩展多台 Beacon
管理方式 Nokia WiFi App、本地 Web、内部 API
存储 eMMC,启动和系统分区在 user area GPT 内
机身尺寸 约 220 x 101 x 188 mm
重量 约 1.66 kg

这规格放在家用 Mesh 里不算低:10G WAN、2.5G LAN、三频 Wi-Fi 6E、6GHz 4×4,再加上 IPQ9574LA 这种平台,明显是运营商高端网关那一路,不是低端 AP 换壳。

原文里折腾最大的问题其实是 eMMC 封装。它不是常见那种一眼就能套上读卡座的尺寸,拆屏蔽罩找半天,焊下来还得想办法适配编程器。现在镜像读出来之后,反而能解释为什么它不像普通 SPI NAND/NOR 路由器那样简单:整个系统就是按 eMMC + GPT 的方式组织的。

读出来的不是普通数据盘

这次主要分析对象是:

UserData.bin

基础信息:

image_size = 1954545664 bytes
sectors    = 3817472
sector     = 512 bytes
partition  = GPT
disk_guid  = 98101b32-bbe2-4bf2-a06e-2bb33d000c20

它不是 Windows 可以直接双击打开的 FAT/NTFS 数据盘,而是 eMMC user area 的完整镜像。里面有 GPT 分区表,分区内容包括 Qualcomm 启动链、U-Boot、Wi-Fi 固件、A/B rootfs、Nokia RI 出厂信息、EXTFS 安全 KV、日志和配置区。

顺手也看了 boot1.bin 和 boot2.bin:

boot1.bin: size=4194304, nonzero=0, 全部为 0x00
boot2.bin: size=4194304, nonzero=0, 全部为 0x00

也就是说,这台机器的启动内容并不放在 eMMC boot partition 里,而是放在 user area 的 GPT 分区中。真正该看的,是 0:SBL1、0:QSEE、0:APPSBL、0:HLOS、rootfs 这些分区。

系统底子:OpenWrt 19.07,但外面套 Nokia 管理体系

从启动链、U-Boot 环境、rootfs 字符串里能确认这些信息:

SoC/platform: Qualcomm IPQ9574LA / IPQ9574
OpenWrt target: ipq95xx/generic
Architecture: aarch64_cortex-a73_neon-vfpv4
Device mnemonic: Beacon 10
Vendor prompt: NOKIA >

A/B 两套 rootfs 版本也能看到:

rootfs:
  OpenWrt 19.07-SNAPSHOT r90-16bba972a
  target ipq95xx/generic

rootfs_1:
  OpenWrt 19.07-SNAPSHOT r156-b956684dd
  target ipq95xx/generic

所以它底层还是 OpenWrt,外面再套 Nokia 自己的 Web、App、Corteca 管理体系。固件里能看到旧 CGI 和新 Web 前端同时存在:

/webs/login_web_app.cgi
/webs/login_app.cgi
/webs/web_whw/index.html
/webs/web_whw/*.js

日志里还有这种内部 API 访问痕迹:

nginx -> http://127.0.0.1:81/api/v1.0/public/device

这类结构挺典型:底层 OpenWrt 负责系统和驱动,Nokia 再做一层运营商设备管理、App 管理、本地 Web 和云端能力。

U-Boot 环境里能看到什么

U-Boot 环境变量里有串口、恢复网络、启动槽和安全启动相关字段。敏感字段这里打码:

baudrate=115200
bootcmd=bootipq
bootdelay=2
bootargs=console=ttyMSM0,115200n8
ethaddr=48:41:7B:**:**:**
eth1addr=48:41:7B:**:**:**
ipaddr=192.168.10.10
serverip=192.168.10.1
netmask=255.255.255.0
machid=8050101
secboot=2
factory_reset_flag=0
boot_fail_count=1
mount_backup_fail=0
mount_configs_fail=0
mount_logs_fail=1
mount_opt_fail=1
img_version0=3TN00367IJKL03
img_version1=3TN00367HJLL96

secboot=2 说明安全启动相关机制是开着的;img_version0 和 img_version1 则对应双系统槽。恢复 IP 是 192.168.10.10 / 192.168.10.1 这一组,后面如果做串口或 U-Boot 网络恢复,这些字段有参考价值。

分区表:一眼就是 Qualcomm + Nokia 风格

完整 GPT 分区表如下:

# 分区名 容量 类型 作用说明
01 0:SBL1 1.00 MiB ELF Qualcomm 一级启动链
02 0:SBL1_1 1.00 MiB ELF SBL1 备份槽
03 0:BOOTCONFIG 0.25 MiB data 启动配置
04 0:BOOTCONFIG1 0.25 MiB data 启动配置备份
05 0:QSEE 1.75 MiB ELF Qualcomm 安全执行环境
06 0:QSEE_1 1.75 MiB ELF QSEE 备份槽
07 0:DEVCFG 0.25 MiB ELF 设备配置
08 0:DEVCFG_1 0.25 MiB ELF DEVCFG 备份槽
09 0:APDP 0.25 MiB ELF Qualcomm 调试/策略组件
10 0:APDP_1 0.25 MiB ELF APDP 备份槽
11 0:TME 0.50 MiB ELF Qualcomm 安全/管理组件
12 0:TME_1 0.50 MiB ELF TME 备份槽
13 0:RPM 0.25 MiB ELF Resource Power Manager 固件
14 0:RPM_1 0.25 MiB ELF RPM 备份槽
15 0:CDT 0.25 MiB CDT 配置数据表
16 0:CDT_1 0.25 MiB CDT CDT 备份槽
17 0:APPSBLENV 0.25 MiB U-Boot env U-Boot 环境变量
18 0:APPSBL 2.00 MiB U-Boot ELF U-Boot 主槽
19 0:APPSBL_1 2.00 MiB U-Boot ELF U-Boot 备份槽
20 0:ART 0.50 MiB calibration/data 无线校准 / 出厂数据
21 0:ETHPHYFW 0.50 MiB zero sample 以太网 PHY 固件区,样本显示全零
22 0:WIFIFW 5.00 MiB squashfs Wi-Fi 固件主槽
23 0:WIFIFW_1 5.00 MiB squashfs Wi-Fi 固件备份槽
24 0:HLOS 10.00 MiB ELF/kernel Linux kernel / HLOS 主槽
25 0:HLOS_1 10.00 MiB ELF/kernel HLOS 备份槽
26 rootfs 128.00 MiB squashfs OpenWrt rootfs 主槽
27 rootfs_1 128.00 MiB squashfs OpenWrt rootfs 备份槽
28 RI 1.00 MiB Nokia RI KV 出厂标签、型号、地区、LabelCode
29 EXTFS 6.00 MiB Nokia security KV Web 密码哈希、随机变量、安全 KV
30 log 64.00 MiB ext filesystem 日志分区
31 cfg 64.00 MiB ext filesystem 配置主分区
32 cfg_1 64.00 MiB ext filesystem 配置备份分区
33 0:APPSBLENV_1 0.25 MiB U-Boot env backup U-Boot 环境变量备份
34 opt 512.00 MiB ext filesystem 扩展应用 / opt 数据区

这个表里最值得看的有几组:

0:SBL1 到 0:RPM_1 是 Qualcomm 启动链和安全组件,基本都是双份。0:APPSBL 是 U-Boot,0:APPSBLENV 是环境变量。0:HLOS + rootfs 是 A 槽系统,0:HLOS_1 + rootfs_1 是 B 槽系统,升级失败还能回滚。

RI 和 EXTFS 是 Nokia 自己的重点。RI 里放出厂身份,EXTFS 里放安全 KV、Web 密码哈希、随机变量、Wi-Fi 密码相关值。后面密码算法就是从这两个分区串起来的。

opt 分区有 512MiB,是整个表里最大的数据分区。结合 Nokia 官方强调 Corteca 和应用能力,这个分区很可能和扩展应用、运营商功能、日志/插件数据有关。

RI 分区:出厂信息不只是贴纸

RI 分区偏移是:

0x12c44400

里面能提取到这些字段,敏感项已打码:

Format          = 01
FactoryCode     = 22
HardwareVersion = 3TN00200CAAA
ICS             = 01
G984Serial      = eb44****
CleiCode        = 00000
Mnemonic        = Beacon 10
ProgDate        = 240322
MACAddress      = 48:41:7B:**:**:**
PartNumber      = 3TN00201ABAA
Variant         = AA
OperatorID      = NKBU
CountryID       = eu
LabelCode       = U********d
GroupID         = 00000000

这里最关键的是 LabelCode。它不是单纯给人看的标签字段,本次验证确认它会参与默认 Web 登录密码。

也就是说,这台机器的普通后台密码不是随便写死在某个配置文件里,而是出厂信息区和安全区一起配合:RI 里有候选明文,EXTFS 里有哈希,系统启动或登录校验时按规则验证。

EXTFS:安全 KV 和密码哈希都在这里

EXTFS 分区偏移是:

0x12d44400

里面能看到这些安全 KV 字段:

EXT_OPID           = NKBU
EXT_BOOT_PWD       = <redacted>
EXT_WEB_PWD        = $5$<salt>$<sha256crypt_hash>
EXT_WEB_MGNT_PWD   = $5$<salt>$<sha256crypt_hash>
EXT_MD5_VAR        = <base64-like redacted>
EXT_SHA256_VAR     = <base64-like redacted>
EXT_SHA256CUS_VAR  = <base64-like redacted>
EXT_RANDOM_VAR     = <base64-like redacted>
EXT_SSID1_PWD      = <base64-like redacted>
EXT_SSID5_PWD      = <base64-like redacted>
EXT_SSID9_PWD      = <base64-like redacted>

大概可以这么理解:

字段 作用判断
EXT_OPID 运营商 / profile 标识
EXT_BOOT_PWD 启动或底层管理相关口令
EXT_WEB_PWD 普通 Web 后台密码哈希
EXT_WEB_MGNT_PWD 管理级 Web / superadmin 相关密码哈希
EXT_MD5_VAR 派生算法变量之一
EXT_SHA256_VAR SHA256 派生变量之一
EXT_SHA256CUS_VAR 定制化 SHA256 派生变量之一
EXT_RANDOM_VAR 随机变量 / 设备级种子
EXT_SSID*_PWD 多个 SSID 的 Wi-Fi 密码相关值

这块的价值很高。单看 rootfs 可能只能看到程序和默认模板,看不到每台机器真正的出厂值;EXTFS 才是设备个体化数据的集中区。

普通后台密码:算法其实不复杂

固件里的 login_web_app.cgi / login_app.cgi 字符串显示,默认 Web 用户是:

admin

普通 Web 密码存在 EXTFS 的 EXT_WEB_PWD 里,格式是标准 sha256crypt:

$5$salt$hash

验证逻辑可以简化成这样:

crypt(RI.LabelCode, "$5$<salt>") == EXT_WEB_PWD

如果计算出来的 sha256crypt 结果和 EXTFS 里保存的完整哈希一致,就说明 RI.LabelCode 就是普通后台密码。

本次已经验证匹配,所以结论是:

普通 Web 后台用户:admin
普通 Web 后台密码:RI 分区里的 LabelCode

明文 LabelCode 和完整哈希不放出来。知道这个关系就够了:以后遇到同类 Nokia 设备,重点不是去翻网页 JS 里有没有默认密码,而是先看 RI 和 EXTFS 这两个分区。

日志里曾出现过一个 Web 访问地址:

http://192.168.18.3/

这个只代表镜像里记录过的访问环境,不一定是你手上这台机器当前 IP。

superadmin 还没完全逆出来

镜像里确实存在 superadmin 用户和管理密码痕迹。

固件默认 /usr/etc/passwd 里有:

superadmin:x:0:102:Linux User,,,:/root:/bin/ash

/usr/etc/shadow 里也有 root 和 superadmin 的 sha256crypt 哈希。运行日志里还出现过动态创建 superadmin 的命令,说明这个账号在某些场景下会被系统或配置管理进程启用。

不过 EXT_WEB_MGNT_PWD 目前没有被已知候选匹配。测试过的方向包括 LabelCode、序列号、PartNumber、HardwareVersion、MAC、OperatorID、启动密码字段,以及一些常见默认组合,都没撞上。

固件二进制里能看到这些生成函数痕迹:

gen_varlen_mgntpw
gen_varlen_mgntpw_customize
gen_mgntlongpw_and_wanpw
gen_mgntlongpwd_for_mgrtn
generate_customized_password
SIGH_genpwd_longpasswd
genpwd_sha256_customized

这说明管理长密码大概率是定制派生的,不是简单“某个字段直接当密码”。可能参与的输入包括:

LabelCode
G984Serial
PartNumber
HardwareVersion
MACAddress
OperatorID / CountryID
EXT_SHA256_VAR
EXT_SHA256CUS_VAR
EXT_RANDOM_VAR
运营商定制规则

也就是说,普通 Web 密码这次已经确认了;superadmin 还得继续逆 cfgmgr 和相关依赖库,把拼接顺序、profile 分支、随机变量用法弄明白。

这次最有用的结论

第一,Beacon 10 的 eMMC user area 就是关键,boot1.bin / boot2.bin 为空不代表没读完整,启动链本来就在 GPT 分区里。

第二,它是标准 Qualcomm IPQ9574LA + OpenWrt ipq95xx/generic 的底子,上层套 Nokia WiFi / Corteca / Web 管理体系。

第三,分区布局是完整 A/B 冗余:启动链、Wi-Fi 固件、HLOS、rootfs 基本都有主备槽,升级回滚设计比较完整。

第四,RI 和 EXTFS 是最值得备份的两个小分区。一个管出厂身份,一个管安全 KV 和密码哈希。真要研究默认密码、恢复配置、迁移出厂信息,这两个比 rootfs 更关键。

第五,普通后台密码已经确认来自 RI 的 LabelCode,再用 EXTFS 的 sha256crypt 哈希验证;管理长密码目前只确认了哈希和生成函数痕迹,还没逆出明文。

所以这台机器后续要继续折腾,方向不是再复制官方英文规格,而是继续拆 cfgmgr:把 Nokia 这套管理长密码派生规则弄明白,才算真正把 Beacon 10 的出厂安全逻辑看透。

拆机图补几张

原文最后放过几张拆机图,这里也保留。官方英文介绍就不重复贴了,真正有用的信息已经整理到上面的硬件表和分区表里。