2018年11月

乐视路由器LBA-047-CH免拆机原厂系统开启SSH、备份固件、刷入breed

乐视路由器LBA-047-CH免拆机原厂系统开启SSH、备份固件、刷入breed

前言

这款乐视路由器虽然配置很低,处理器为QCA9531,RAM为128M,ROM为16M,2.4G频段300M无线,没有5G,1WAN口,2LAN口。但是今年双十一,乐视官网活动价19.9元,价格超级低,而且据说买五个可以包邮,看到好多网友们都买了,于是我也买了一只用于研究。虽说经历过斐讯的各位网友可能觉得没什么购买欲,但这个路由器性价比还是蛮高的。本文主要讲该路由器如何开启SSH。

读懂并实践本文,你可能需要在技能树中点亮以下技能:

1:基本的Windows系统与Linux系统操作;
2:基本的路由器组网知识;

操作警告:

修改路由器的设置,尤其是原厂固件设置界面未显示的设置项,可能会因此损坏您的路由器系统,甚至损坏设备硬件,所以请务必小心操作!学习本文需要您自担风险,本人不对您路由器可能发生的损坏负责。

软件和硬件准备:

学习本文体验这个工具需要做如下准备:
1:LBA-047-CH路由器一台(废话),本人手里这台固件版本为5.0.016S,其他版本未测试,请自行测试。
2:网线*2,不连接上级网络,1根网线就够。机器原包装只有电源适配器,没网线。
3:电脑一台,我的电脑上用的是Windows系统。
4:SSH客户端,我用的是Putty.
5:网页浏览器软件。
6: 可能需要Internet. 其实无Internet也可以。

开启SSH:

1:使用一根网线连接路由器WAN口到上级网络,上级网络要有Internet连接。如果你只是开启SSH,Internet不是必要的,另一根网线连接路由器LAN口与电脑,路由器接通电源。
2:打开浏览器,登陆管理页面,IP地址如果没修改过应该是:192.168.67.1,如果路由器之前没设置过,应该会引导设置路由器。
3:按照引导设置上网方式、无线ID、无线密码与管理密码等信息,进入管理页面后路由器就可以正常使用了。

4:点击‘更多功能’设置按钮,进入更多功能设置页。

008.JPG

此时浏览器地址栏中的地址类似为
http://192.168.67.1/cgi-bin/luci/;stok=********************************/admin/more/
5:对此进行修改,admin斜杠后面内容删除,添加部分内容。改为类似以下内容并回车进入Openwrt启动脚本设置页面,如下图:
***/admin/system/startup

006.JPG

006-2.JPG

6:对本地启动脚本进行编辑,按其要求将以下命令插入到'exit 0'前面
/usr/sbin/dropbear -p 0.0.0.0:22

点击‘/sbin/letvaccount 6’一行结尾处以将光标置于此,然后按回车键换行,插入一个新行,将上面一行代码填入。如果你想备注,行注以#标示。最后不要忘了点击提交按钮保存。

007.JPG

7:再次点击‘更多功能’设置按钮,进入更多功能设置页,点击重启路由,会询问是否确认重启,确认后路由器开始重启。

008.JPG

大约等待一分钟后确认路由器启动,前置彩色LED指示灯亮蓝色或绿色。尝试使用SSH客户端进行连接,连接成功。
Putty界面参考以下填写:

009.JPG

连接成功

010.JPG

输入用户名root,之前配置页面设置的密码,登陆成功。

012.JPG

至此,成功打开此路由器的SSH。

备份路由器分区

我们折腾路由器,最常做的就是为路由器刷入第三方固件,再刷固件之前,我们一般都会对原厂固件进行备份。一般我们两种备份方式,一种是将存储器拆下使用编程器对整个Flash制作镜像,一种是在打开Telnet或SSH的前提下使用命令行备份分区。

1:拆下Flash备份

拆下Flash备份需要有足够的焊接技术,要用到编程器,运气不好极易损坏设备。路由器常见的Flash有两种,一种是SPI Flash,另一种是NAND Flash。SPI Flash使用SPI接口存取数据,编程器实现简单,价格较低,大约三十元左右即可搞到;但NAND Flash较复杂,专业的编程器非常昂贵,价格几百到几千,业余玩家是没有财力购买这种设备的。曾有网友自购IC座与某些型号路由器自行DIY编程器,若读者有兴趣具体资料可使用搜索引擎搜索,本文暂不讨论硬件备份技术。

2:SSH登录使用命令行配合WinSCP备份分区

使用SSH登录路由器通过命令行备份分区需要有root权限。当您打开了路由器的SSH登录功能,且获取到了root账号的登录权限,您可以通过cat命令将分区备份到/tmp下,该位置在RAM中,因为路由器的RAM一般情况都是比ROM大的,所以我们可以把RAM的镜像存储在内存中。比如我们这次的乐视超级路由器,RAM大小为128M,ROM为16M。这个机器我已经成功备份了mtd0~mtd6的所有分区,以下是操作步骤。
首先确保网路连接正常,通过SSH终端连接路由器并登录,输入cat /proc/mtd 命令以列出所有分区,不同机型可能分区方案不同,我们看一下乐视这款路由器的分区:
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00e30000 00010000 "rootfs"
mtd3: 005b0000 00010000 "rootfs_data"
mtd4: 00170000 00010000 "kernel"
mtd5: 00010000 00010000 "art"
mtd6: 00fa0000 00010000 "firmware"
我们可以看出,名字为"u-boot"的mtd0分区明显是存储Bootloader的,Kernel可能表示的系统内核,art是机器的工厂数据,firmware就表示固件。
假如我们想要备份u-boot的分区数据,我们可以使用cat命令来创建备份并将其存储到/tmp。
root@OpenWrt:~# cat /dev/mtd0 > /tmp/mtd0
这条命令是没有回显信息的,当我们再次看到以下信息时,表示命令已经执行完毕。
root@OpenWrt:~#
这时我们就可以在/tmp目录下看到一个名为mtd0的文件,大小为256KB,我们可以使用WinSCP下载文件到本地,然后删除/tmp下的文件,以释放存储空间。
重复以上步骤,把mtd0改为mtd1,我们尝试运行以下命令,就可以将mtd1的数据备份到/tmp中。
root@OpenWrt:~# cat /dev/mtd1 > /tmp/mtd1
我们依然可以使用SCP客户端将文件下载到本地,然后删除/tmp下的mtd1文件。
如果我们需要,如此重复操作,可将mtd0~mtd6全部备份。我们发现,所有的文件的总大小超过了Flash的大小16M,分析文件大小可知,mtd3:rootfs_data是属于mtd2:rootfs的,mtd2:rootfs和mtd4:kernel构成了mtd6:firmware最终我们会发现,Firmware + u-boot + u-boot-env + art合起来正好是16384KB等于16M。如此看来,其实我们备份mtd0,1,5,6,即可对整个Flash空间进行了备份。

为机器刷入新的Bootloader

将机器原厂系统备份后我们就可以随意刷固件了么?别急,我们在开始随意刷入固件之前可以先为其刷入一个称之为Breed的Bootloader,通过这个Bootloader我们可以更方便安全的为路由器刷入新的固件。
看到这可能有人会问,什么是Bootloader?简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。如果想详细了解相关知识,具体参考:嵌入式系统 Boot Loader 技术内幕
为本机刷入Breed,我们需要找到与本机对应的Breed,我们可以访问作者提供的下载网站查找下载对应机器型号的的breed,下载后将文件改名为breed.bin后使用WinSCP上传至路由器/tmp目录,然后我们尝试运行mtd write /tmp/breed.bin u-boot,这时我们会发现如下提示:
root@OpenWrt:/tmp# mtd write breed.bin u-boot
Could not open mtd device: u-boot
Can't open device for writing!
这是因为当前运行的原厂固件不支持对Bootloader区写入,不仅如此,Openwrt编译时默认的配置都是不支持写Bootloader区的,如果需要Openwrt正常运行此命令,需要在编译openwrt时设置好配置文件,Openwrt的编译不在本文讨论范围。幸运的是,我在网上找到了其他网友分享的解锁u-boot临时固件,我们将此固件刷入,然后就可以正常运行写入命令了。
首先,我们下载这个临时固件ap147.bin,将其通过WinSCP上传至路由器/tmp目录,只保留与电脑连接的LAN口网线,断开路由器其他网线。然后使用sysupgrade命令刷入固件。
root@OpenWrt:/tmp# sysupgrade -F -n ap147.bin
Sending TERM to remaining processes ... netifd sleep sleep mcproxy miniupnpd zebra watchquagga ifplugd led-monitor nginx uhttpd dnsmasq monit letvremotecontr xl2tpd privoxy letvreport letvlogreport ntpd crond rcS logger syslogd klogd hotplug2 ubusd log_monitor
Sending KILL to remaining processes ... sleep sleep uhttpd letvlogreport crond
killall: led-monitor: no process killed
killall: wan_probe: no process killed
setting up led super_router:blue:wan
setting up led super_router:red:wan
setting up led super_router:green:wan
Switching to ramdisk...
Performing system upgrade...
Warning: Bad CRC, using default environment
ash: invalid number 'bootcmd=bootp;'
ash: invalid number 'setenv'
ash: invalid number 'bootargs'
ash: invalid number 'root=/dev/nfs'
ash: invalid number 'nfsroot=${serverip}:${rootpath}'
ash: invalid number 'ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;'
ash: invalid number 'bootm'
ash: 0x0: unknown operand
Unlocking firmware ...

Writing from <stdin> to firmware ...
Upgrade completed
Rebooting system...

显示Rebooting后,我们会发现路由器的IP地址变成了192.168.1.20,我们登录管理页面,使用密码password登录路由器,修改密码。然后WinSCP和SSH终端使用修改后的密码通过IP192.168.1.20登录。将之前下载的breed文件改名为breed.bin后使用WinSCP上传至路由器/tmp目录,输入以下命令成功刷入。
root@Gargoyle:/tmp# mtd write /tmp/breed.bin u-boot
Unlocking u-boot ...

Writing from /tmp/breed.bin to u-boot ...
root@Gargoyle:/tmp#

然后我们输入reboot命令重启路由器。
按住复位键接通电源大约10秒左右,机器指示灯会不断闪烁,浏览器访问192.168.1.1进入Breed界面。然后我们就可以愉快的刷入固件了。

参考:

本文思路参考自:

1:(更新)解锁uboot,刷入breed,乐视路由已破解(非拆机)附官方固件+art备份64k文件
https://www.right.com.cn/forum/thread-172877-1-1.html

其他搞机参考资料:

1:乐视路由器抢先全网开箱+首拆+评价 多图(增补润色版)
http://bbs.mydigit.cn/read.php?tid=1327297
2:乐视路由器刷OpenWrt(LEDE)教程
https://www.right.com.cn/forum/thread-195788-1-1.html
3:[10-09更新]LETV 路由器刷openwrt固件---QCA高通原厂无线驱动
https://www.right.com.cn/forum/thread-194485-1-1.html
4:乐视超级路由器刷LEDE,安装SS插件
https://www.right.com.cn/forum/thread-261787-1-1.html
5:嵌入式系统 Boot Loader 技术内幕
https://www.ibm.com/developerworks/cn/linux/l-btloader/index.html
6:Breed下载页
https://breed.hackpascal.net/