小米路由mini恢复sn及ssh权限
拾肆July 9, 2017

前面一篇文章《小米路由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信息。

记录过程中难免有纰漏,如果有任何问题,请留言探讨。


评论一句
  • [点个赞]
  • [这真是极好的]
  • [朕知道了]
  • [不明觉厉]
  • [涨姿势]
  • [贱人就是矫情]
  • [也真是醉了]
  • [人艰不拆]
  • [你那么萌你家人造吗]
  1. Lopwon

    好专业,配图更专业[呆]

    1. 拾肆

      [尴尬] 大部分是直接引用论坛的图...

      1. Lopwon

        不错了,这么专业的文章能看明白,对我来说像天书[大哭]

      2. 拾肆

        也是临用了才去恶补,其实我对linux也是一窍不通..哈哈

  2. sean
    sean

    [涨姿势]

  3. mabchine
    mabchine

    PUTTY登录 密码不对不知道为什

  4. takeshit
    takeshit

    恢复sn的作用是什么? 能解决擦机亮红灯问题吗?

  5. wintersun
    wintersun

    其实恢复sn还有一种方法,在breed中刷别人的已经获取SSH的编程器固件(还得有其root密码),然后用文中第二项中的命令修改即可。另外,本人认为,bdata命令是修改Bdata区,nvram命令是修改Config区,因为本人用此两条命令查看到的信息分别对应bdata 和Config。

  6. whitestar
    whitestar

    谢谢,解决了我的大问题

  7. You mentioned that fantastically!

  • [点个赞]
  • [这真是极好的]
  • [朕知道了]
  • [不明觉厉]
  • [涨姿势]
  • [贱人就是矫情]
  • [也真是醉了]
  • [人艰不拆]
  • [你那么萌你家人造吗]
[微笑][大笑][撇嘴][酷][吐舌][眨眼][阴险][脸红][呆][尴尬][流汗][白眼][难过][生气][折磨][大哭][哭泣][叹气][举手][傲慢][惊恐][惊讶][震惊][拜托][闭嘴][恶魔][亲亲][飞吻][困][睡觉]