前面一篇文章《小米路由mini折腾笔记》记录了拾肆刷入第三方固件、刷入bootloader以及刷回官方固件的方法。本文将介绍如何在路由内丢失了sn码及ssh权限的情况下,找回sn以及获取ssh权限。
一、丢失SN信息后获取SSH权限
如果你用编程器备份过Flash,那么直接编程器恢复吧!如果没有备份,那么下面这个是最后一个办法来救命了,需要按照以下步骤来操作。
1.安装小米官方旧版本的固件(新版本固件可能已经禁止了此方法),可以使用官方稳定版2.6.11或开发版2.7.11,至少这两个版本测试通过。
1.下载xiaomi-mini-py脚本包,下载密码eyaq,解压(解压密码www.ceniv.com),出现mini.py(这个用于小米路由mini版,硬盘版使用mi.py)和payload文件,文本编辑器打开payload修改默认密码admin为你自己设置一个密码。
2.电脑上安装系统相应版本的python软件,WIN64位https://www.python.org/ftp/python/3.5.0/python-3.5.0-amd64.exe,WIN32位https://www.python.org/ftp/python/3.5.0/python-3.5.0.exe,WinXP用户安装这个https://www.python.org/ftp/python/3.4.3/python-3.4.3.msi。如果难安装成功,据说XP这个版本也可以在win8.1正常安装。进入上一步解压出的mini.py文件所在目录下打开cmd,输入pip install requests安装python的requests模块。
3.小米mini路由器上插入一个FAT32格式的U盘,浏览器进入路由后台(建议之前先恢复出厂设置),找到地址栏的stok值(即stok=""这一段字符串,每次登陆不一样),复制下来,保持浏览器不关闭。
4.还是在mini.py所在目录进入命令提示符内运行mini.py,然后在弹出的Paste your session here后粘贴刚才复制的stok值,回车执行。(如果想有详细的执行过程回显信息,那么把mini.py脚本里#print (req.content)前面的#删掉即可,共4处;脚本里U盘位置写的是sda1,由于U盘分区不同或者多次插拔,挂载点名称可能会变成sdb1、sdc1或sda4、sdb4等会导致不成功,需自己修改py脚本,或者直接重启换U盘)
5.等待执行完毕,出现提示重启时,说明操作完成,这时手动重启系统就再次获得ssh权限了。
下面解释下这个mini.py脚本执行的操作,
a.上传payload到路由器可写目录;
b.把/etc/rc.local重命名备份为/etc/rc.local.bak;
c.复制payload到/etc/目录;
d.把payload重命名替换为/etc/rc.local;e.删除可写目录下的payload。
rc.local里面的命令开机后会自动执行,payload是原始rc.local增加了破解命令。
原始rc.local内容:
payload内容:
dropbear是一个小型的ssh服务器,启动方法:/etc/init.d/dropbear start,小米在dropbear启动脚本start段里增加了判断,稳定版不让启动直接退出,nvram参数 ssh_en不是1也退出。
这下就完美了,未通过官方方法获得SSH同时还使得MINI还在保修范围。
二、复原flash内丢失的SN信息
小米路由mini的Bdata分区内保存着SN等信息,Config分区里同样也有SN等信息,但Config分区里是通过读取Bdata分区而得到的,只修改Config分区的信息的话,是可以实现后台出现SN的,但也有可能还是被清空。
首先来看下Config分区内信息怎么改。
登录SSH,使用bdata show命令查看bdata信息,
增加&修改命令:(自己替换XXX)
bdata set model=R1CM bdata set color=101 bdata set CountryCode=CN bdata set SN=XXXXXXXXXXXX
设置默认ssid:(默认XXXX是网卡LAN口MAC地址后四位大写,输入getmac eth会显示lan口MAC)
bdata set wl0_ssid=Xiaomi_XXXX_5G bdata set wl1_ssid=Xiaomi_XXXX
保存:
bdata sync && bdata commit
其中model是型号;color=101是指路由器的颜色,随便改,定义为黑色100,白色101,橘色102,绿色103,蓝色104,粉色105;CountryCode是国家代码(CN HK TW EN);SN填写你路由背面的sn码。
另一篇文章说用另一个命令nvram,不知道是否起作用:
nvram set SN=XXXXXXXXXXXX nvram set wl0_ssid=Xiaomi_XXXX_5G nvram set wl1_ssid=Xiaomi_XXXX nvram commit 可以再输入命令bdata
show查看是否修改成功。
然后重启路由看看能不能绑定成功,如果成功,进入http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxx/api/xqsystem/init_info看看SN是不是自己的。
以上方法修改的是Config分区,如果不成功,那么还需要修改Bdata分区。
Bdata分区在官方固件下面是只读的,如果想要一起修改Bdata分区就需要刷第三方(比如pandorabox)固件,同时准备好一个Bdata.bin文件,这个文件可以用WinHex制作出来,这里有一个空白Bdata模板,密码jkau,解压密码www.ceniv.com
按照下面图片教程修改:
http://img08.mifile.cn/v1/MI_1031495CC30DA4/T151KvBvZv1R4n9VrK.gif
刷好改好后WinSCP登录,把修改好的Bdata.bin传到/tmp目录,使用mtd刷入:
mtd write /tmp/Bdata.bin culiang-Bdata
culiang-Bdata好像是潘多拉固件备份的官方bdata分区,如果是官方系统下修改,可能应该将culiang-Bdata改为Bdata。
只要没有显示错误就刷入成功了。然后再使用官方的方法用U盘刷入官方固件。重新打开路由后台,不出意外的话SN信息就又重现了。
重要提醒:不要随便刷别人备份的整个编程器固件,固件中包含eeprom信息,如果使用了非本机的eeprom,就把你本机原来的Factory(eeprom)分区覆盖了,里棉包含了路由对应的mac和无线校准数据,使用别人的参数你的芯片不能发挥最优性能,无线信号可能会变的非常糟糕!
如果因某些原因需要直接用编程器刷写flash或者用WinHex修改bin文件的,请再参照下一节。
三、编程器直接修改Bdata分区 或 WinHex修改备份bin文件
小米路由mini如果丢失了SN,可以尝试用编程器写入Bdata和Config分区,具体方法如下:
Bdata大小16384 字节,位置00FF0004到00FF3FFF
Config大小4096 字节,位置00030004到00030FFF
正常的Bdata:
丢失SN后的Bdata
按照格式填入,sn自己换,ssid那是lan口mac后4位,填完后剩下的用00填充一直到00FF3FFF
然后计算一下00FF0004到00FF3FFF的crc32,倒序填入前面00FF0000开始的八位
config是0030004到00030FFF,类似
至此,即恢复了小米路由mini内丢失的sn信息。
记录过程中难免有纰漏,如果有任何问题,请留言探讨。
好专业,配图更专业[呆]
[尴尬] 大部分是直接引用论坛的图...
不错了,这么专业的文章能看明白,对我来说像天书[大哭]
也是临用了才去恶补,其实我对linux也是一窍不通..哈哈
[涨姿势]
PUTTY登录 密码不对不知道为什
恢复sn的作用是什么? 能解决擦机亮红灯问题吗?
其实恢复sn还有一种方法,在breed中刷别人的已经获取SSH的编程器固件(还得有其root密码),然后用文中第二项中的命令修改即可。另外,本人认为,bdata命令是修改Bdata区,nvram命令是修改Config区,因为本人用此两条命令查看到的信息分别对应bdata 和Config。
谢谢,解决了我的大问题
You mentioned that fantastically!