浅谈基于UDX710的随身WiFi设备破解

最后更新于 15 天前 427 次阅读


1.设备概要

此类设备大多数长这样(R106):

温馨提示,一般所有的版本均为一样的设备。比如这个:

是的,他们都一样。虽然价格有时候会差的很大。R106的极限价格在七十元左右。其成本网传差异较大,不低于200。R106采用的模块为美格SRM810(好像是?记不清,懒得拆开看了)

本文将以R106新版本为例,简要探讨如何撬开这个设备的adb终端,以及干掉商家的远控。

温馨提示,大部分设备已经不带卡槽,如果想自插卡,对于R106来说,你需要自己焊接卡槽,焊接时注意需要取掉卡槽位附近的那个eSIM芯片,因为他俩共用一条线路,如不取掉,你的设备将不读卡。

此方法对于R210也适用(1.0.4及以下)。R210长这样:

该设备极限价格位于100出头,使用相同模块的设备(联通燕飞NU313)似乎售价为399。

2.提取设备分区

展锐设备的工厂下载模式可以通过某些按键组合进入,对于R106来说,方法是:设备完全关闭的时候,按住RESET键的同时插入电脑。如果你的电脑已经正确安装驱动,那么串口将多出一个如下图的端口:

由于大部分udx710设备已经开启FDL校验,故我们无法使用ResearchDownload等官方工具进入设备的工厂模式。但是udx710存在一个BootROM漏洞,允许我们绕过FDL的签名校验。

你可以在这里得到适用于R106的FDL、custom_exec_no_verify_3f28.bin和设备分区表(udx710-module.xml)。

custom_exec_no_verify_3f28.bin来自TomKing062大佬,非常感谢他的付出。

此处,我们采用来自TomKing大佬二改的spddump工具进行提取操作:

首先,按上面方法进入工厂模式后,打开spd_dump,不出意外,你将看到如下:

接下来,依次执行下面的命令,进入FDL2。请确保custom_exec_no_verify_3f28.bin存在于spd_dump相同目录下。请按需求更改下面fdl1和fdl2的路径。

exec_addr 0x3f28
fdl r106/fdl1.bin 0x28007000
fdl r106/fdl2.bin 0x9efffe00
exec

不出意外,你将看到下面的内容:

此时,你已成功进入FDL2。要备份设备全量分区,请在此处执行read_parts udx710-module.xml。该文件已在上文提到。

注意,userdata分区可能无法被备份。不过该分区通常并不要紧。

3.老版本

R106在老版本(wifi5居多)的设备不校验system分区,所以直接修改system分区中启动脚本即可撬开adb。这里作者采用如下方式:

首先,你可以依次执行如下命令,挂载设备的system分区。(system分区大小为42MiB,其他分区大小你可以在上面提到的分区表中找到),请按需配置你的路径。

这篇文章采用Debian12作为Linux环境。

下面命令中,block_size表示设备nand的擦写块大小,就R106而言,其WiFi5版本的该参数通常为129676,WiFi6版本的为139264请注意根据实际情况替换,否则将出现挂载错误。

modprobe mtd
modprobe mtdblock
modprobe ubi
modprobe ubifs
modprobe nandsim first_id_byte=0x98 second_id_byte=0xaa third_id_byte=0x90 fourth_id_byte=0x15 block_size=129676

mtdinfo /dev/mtd0
ubiformat -s 2048 -O 2048 /dev/mtd0
ubiattach -p /dev/mtd0 -O 2048

ubinfo /dev/ubi0 -a
ubimkvol -N volume1 -s 42MiB /dev/ubi0
ubiupdatevol /dev/ubi0_0 system.bin
mkdir /mnt/r106-sys
mount -t ubifs /dev/ubi0_0 /mnt/r106-sys/

之后,system将被挂载到/mnt/r106-sys

打开该目录,你将看到如下内容:

挂载成功。

接下来,我们打开etc/init.d/hostname.sh,在他脚本最后,加上 adbd &,如果你还想启动一个自己的脚本,可以加一个/home/root/loader.sh &,如下图:

保存,退出。之后,执行sync确保更改被写入。

接下来,执行dd if=/dev/ubi0_0 of=/home/danuonuo/Desktop/r106sys-test1.bin(请按需修改路径),你将得到system分区的镜像,接下来,拿着这个镜像使用spddump写回即可。

在刚刚的fdl2中,执行write_part system r106sys-test1.bin,即可写回。

接下来,你可以通过执行reset重启设备。

若设备能够正常启动,那么adb将位于设备的:5555端口,使用adb connect 192.168.1.1即可直接连接。

4.新设备

在新设备中(wifi6居多),厂家在内核启动时添加了校验,即校验设备system分区和m_webui(部分设备)的CRC32是否合法。若不合法,设备将无法启动,并且跳SPRD4模式。

还好,他只校验了LEB0的CRC是否合法。

对于这个问题,解决方法是用ubifs的日志特性卡掉他(ubifs为了减少对nand的磨损,在写入新更改的时候不会直接覆盖源文件,而是在分区后面空白区域写入,之后通过一个编号标记这个内容比源文件新,覆盖源文件)

实现的方法很多,我们这里采用一种简单易行的方法:

下面,假设原始提取的system分区文件名为system.bin,修改过后的system分区文件名为r106sys-test1.bin

我们只需要用源文件的开头到0x17FF的内容覆盖到新分区即可。

dd if=system.bin of=0x17ff.bin bs=1 count=$((0x1800))

得到0x17ff.bin,再

dd if=0x17ff.bin of=r106sys-test1.bin bs=1 count=$((0x1800)) conv=notrunc

将旧文件的对应部分还原到新分区。

再用这个新文件,写入设备,不出意外设备依然可以启动,并且adb已被撬开(链接方式同上文)。

注意,此时不可挂载根目录,只能保持只读,否则分区开头的CRC32将改变,设备将在下次开机时无法启动。

5.去控

控在/usr/bin/rc和web面板进程中均存在。注意rc进程为关键进程,不可删除,不可终止,不同型号、不同版本不可混用,否则网络、切卡等可能异常,且可能无法开机(开机跳下载模式)。

这里通过屏蔽域名实现。可能去控不彻底,若不彻底请自行以相同方式修改m_webui分区下的相关文件和手动patch rc。

下面是已知的部分商家远控域名,你可以在/etc/hosts中将他们解析全部指向127.0.0.1(注意,新版本修改需要按照上文方式修改,切不可在设备中挂载为读写修改)。

fota.redstone.net.cn
reportinfo.freewo.com.cn
cloud-m2m.com
freewo.com.cn

该列表不全,如果你没有去控成功,请自行发现你的域名(先咕一下怎么找)。欢迎补充。

6.其他

上文中,通过添加的/home/root/loader.sh,此时可以通过adb添加程序,并通过该脚本实现开机自启。

adb pulladb push均可用。依照此方法,你可以塞入8080后台、9527后台、ttyd等程序。

9527概览:

8080概览:

就这些。如有错误或者其他问题,欢迎在评论区讨论。

Nya~

Hey!
最后更新于 2025-03-19