折腾必虎路由固件
最近折腾了回水系统,整套东西放在橱柜里面,WiFi似乎被金属的橱柜门挡住了,信号很弱,偶尔还掉线。
翻出了好多年前的1代小米WiFi放大器。中继后信号不错。然而,两周后反复出现了小米WiFi放大器自己也掉线的情况,黄灯一直闪,也不见它尝试重连,只有断电后在上电才恢复。
考虑到网上对小米的网络设备的稳定性评价不高。而且我自己还有一个比小米WiFi放大器年纪更大的TP-LINK TL-WR703N(5岁高龄),刷了openwrt为门外的摄像头中继,半年来从不重启一直很稳定,这使得我考虑是不是再去搞一个703N用作中继。
查看了TP-LINK官网,TL-WR703N早就停产了,在卖的是TL-WR802N。查了下配置,FLASH只有2M,刷openwrt是不可能了。虽然可以自己换FLASH,但是一套下来,购买FLASH、焊接、编程器读写固件,也蛮折腾的。我只想搞个小的、功耗低、上手就能刷openwrt的路由器而已。
自从用了ubnt的AP,家里网络覆盖的挺好的,好久没有关注现在新出的路由器了。发帖问了下V2EX,拿到了两个推荐的店铺,惊奇的发现,这么多年过去了,这类路由器还是TL-WR703N的那套方案。看来TL-WR703N还真是经典。
然而……新冠期间,是没有店铺发货的。作罢。
可是回水老是掉线,这问题得解决。
又翻出一个老路由——必虎路由,也就是这次的主角。
当年买它是被它的颜值、还有宣称的1949平米覆盖、还有poe供电。但是事实上,后面使用下来并不大理想。当然,如果将它作为一个repeater,覆盖、性能这些都不重要。只是,官方的固件功能做的太少了,只能作为一个AP或者PPPoe上网,中继什么的是不存在的。
先网上搜索下这个路由吧:
第一篇文章很有意思的,一个老外来中国买了这个路由器,回去一顿研究,惊奇的发现:
- 这个路由器的Web管理员密码是假的,可以通过构造cookies绕过。
- 这个路由器的ssh用户名和密码,是写死的。
- 这个路由可以通过POST的方式,用root权限远程执行任意命令。
第一个我没什么兴趣。
第二个的话,也许我可以通过ssh登录上这个路由器,通过命令行的方式开启中继模式。其用户名是bhuroot
,密码是hash值c050d85bc792583d9f6ae27b1d420786
。这个hash不容易反推,因此没什么利用价值。
第三个,或许我可以利用它运行useradd
命令添加一个用户。一波操作后,我发现这是徒劳的,这个漏洞应该已经被修复。
第二篇文章虽然是一次失败的尝试,但是可以看出,这个路由运行openwrt还是有希望的。
拆机吧!
撬开后壳后看到是这样的:
- 左上角有张tf卡。
- 右下角是ttl接口,并且贴心的焊接好了排针。
tf卡用胶粘在了PCB上。用刀刮下后,用读卡器读出,发现是fat32格式的。里面有一些日志文件,还有一个recovery.img文件。似乎recovery.img是固件,但是没能成功读取里面的内容。
ttl就有意思了。用万用表确认了左边是3.3V,右边是GND,剩下的就是tx、rx。用Black Magic Probe连接到电脑。终端选择115200的波特率连接。
启动后,打出了内核日志,其中包含了FLASH的地址信息:
Creating 7 MTD partitions on "ath-nor0":
0x000000000000-0x000000040000 : "u-boot"
0x000000040000-0x000000050000 : "u-boot-env"
0x000000050000-0x0000001b0000 : "kernel"
0x0000001b0000-0x0000009f0000 : "rootfs"
mtd: partition "rootfs" set to be root filesystem
mtd: partition "rootfs_data" created automatically, ofs=880000, len=170000
0x000000880000-0x0000009f0000 : "rootfs_data"
0x0000009f0000-0x000000b50000 : "kernel2"
0x000000b50000-0x000000cf0000 : "rescure"
0x000000cf0000-0x000000fd0000 : "Partition_006"
此外,开机时候按下任意键还可以进入U-Boot:
U-Boot 1.1.4 (Aug 19 2015 - 08:58:22)
BHU Urouter
...
Stack Pointer at: 83f6bf98
Now running in RAM - U-Boot at: 83fbc000
Flash Manuf Id 0xc8, DeviceId0 0x40, DeviceId1 0x18
flash size 16MB, sector count = 256
Flash: 16 MB
In: serial
Out: serial
Err: serial
______ _ _ _ _
|_____] |_____| | |
|_____] | | |_____| Networks Co'Ltd Inc.
...
Hit any key to stop autoboot: 1 0
##################################
# BHU Device bootloader menu #
##################################
[1(t)] Upgrade firmware with tftp
[2(h)] Upgrade firmware with httpd
[3(a)] Config device and server IP Address
[4(i)] Print device infomation
[5(d)] Device test
[6(l)] License manager
[0(r)] Reboot device
[ (c)] Enter to commad line
Please input cmd key:
通过它的Print device infomation
,我又拿到了更多信息:
boot_params = 0x83F6BFB0
memstart = 0x80000000
memsize = 0x04000000
flashstart = 0x9F000000
flashsize = 0x01000000
flashoffset = 0x00038FD8
ethaddr = 00:AA:BB:CC:DD:EE
ip_addr = 192.168.62.1
baudrate = 115200 bps
综合上面的信息,可以知道:
- 内存的起始地址是
0x80000000
,内存大小是0x04000000
(64M)。 - 闪存的起始地址是
0x9F000000
,闪存大小是0x01000000
(16M)。 - U-Boot的地址是
0x9F000000
~0x9F040000
。 按照openwrt官方的说明,19.07后,将不编译32M/8M的设备的image,因此必虎的配置(64M/16M)对openwrt来说是足够的。
下面尝试把U-boot区域换成breed。
必虎路由的CPU是Atheros AR9341。在breed下载页面,选择breed-ar934x-blank-r1163.bin
版本。
在U-Boot中,使用printenv
,拿到serverip
CMD> printenv
bootcmd=bootm 0x9f050000
bootdelay=1
baudrate=115200
ipaddr=192.168.62.1
serverip=192.168.62.10
用网线连接路由的Lan和电脑,将电脑IP改成192.168.62.10
。电脑上运行tftp server,选择刚刚下载的breed文件夹。将breed-ar934x-blank-r1163.bin
改名为breed.bin
。
然后开始刷入breed,如下图
在U-Boot中,首先将breed下载到内存中:
tftp 0x80000000 breed.bin
提示传输了0x16ad6
字节。接着在闪存的U-Boot区域,擦除0x16ad6
字节:
erase 0x9F000000 0x16ad6
最后,把内存中下载好的breed,复制到闪存中:
cp.b 0x80000000 0x9F000000 0x16ad6
完了断电重启,系统提示已经成功运行breed了,新的ip是192.168.1.1
,按任意键进入breed。把电脑的ip改成192.168.1.2
,打开浏览器访问192.168.1.1
,可以看到breed界面。
breed有两个命令用于测试gpio:btntst
和gpio
,前者用于测试reset按键,后者用于找到led灯。经过测试,分别是:
gpio 22 蓝色Led
gpio 12 红色Led
gpio 17 Reset按钮
在breed网页中,选择“环境变量设置”,点击”启用”。
选择“环境变量编辑”,添加gpio.customized.reset
为17H
,将gpio 17设定为reset按键,这样以后就可以通过长按reset进入breed,而不用ttl。
后面就是刷入openwrt了,这里选择的是openwrt官网上的TP-Link tl-wr842n的固件,它们硬件类似。在官网上下载openwrt-19.07.1-ath79-generic-tplink_tl-wr842n-v2-squashfs-factory.bin
,在breed上选择“固件更新”刷入就可以了。
重启后,就进入熟悉的openwrt了。
但是毕竟wr842n和必虎硬件是有些差别的,在openwrt中:
- “网络”->“交换机”有LAN1-LAN4四个接口,但是必虎只有一个LAN接口,测试实际对应于LAN4。
- “系统”->“LED配置“,只有
tp-link:green:lan4
对应于红色灯是有效的。蓝色led没有控制方式。
这些小问题,可以通过自己编译openwrt解决,不影响使用。
顺带还可以把左上角的tf卡挂载了,安装下面的包就行。
kmod-usb-storage block-mount block-hotplug kmod-fs-ext4 kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1
中继工作正常,完美!