拾肆 - 小米
http://www.ceniv.com/tag/小米
-
拾肆 - 小米
http://www.ceniv.com/a/mi-router-mini-get-ssh-sn.html
2017-07-09T12:57:00+08:00
前面一篇文章《小米路由mini折腾笔记》记录了天博体育APP下载网页版刷入第三方固件、刷入bootloader以及刷回官方固件的方法。本文将介绍如何在路由内丢失了sn码及ssh权限的情况下,找回sn以及获取ssh权限。一、丢失SN信息后获取SSH权限如果你用编程器备份过Flash,那么直接编程器恢复吧!如果没有备份,那么下面这个是最后一个办法来救命了,需要按照以下步骤来操作。1.天博体育app下载链接小米官方旧版本的固件(新版本固件可能已经禁止了此方法),可以使用官方稳定版2.6.11或开发版2.7.11,至少这两个版本测试通过。1.下载xiaomi-mini-py脚本包,下载密码eyaq,解压(解压密码www.ceniv.com),出现mini.py(这个用于小米路由mini版,硬盘版使用mi.py)和payload文件,文本编辑器打开payload修改默认密码admin为你自己设置一个密码。2.电脑上天博体育app下载链接系统相应版本的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用户天博体育app下载链接这个https://www.python.org/ftp/python/3.4.3/python-3.4.3.msi。如果难天博体育app下载链接成功,据说XP这个版本也可以在win8.1正常天博体育app下载链接。进入上一步解压出的mini.py文件所在目录下打开cmd,输入pip install requests天博体育app下载链接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
可以再输入命令bdatashow查看是否修改成功。然后重启路由看看能不能绑定成功,如果成功,进入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-Bdataculiang-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到00FF3FFFConfig大小4096 字节,位置00030004到00030FFF正常的Bdata:丢失SN后的Bdata按照格式填入,sn自己换,ssid那是lan口mac后4位,填完后剩下的用00填充一直到00FF3FFF然后计算一下00FF0004到00FF3FFF的crc32,倒序填入前面00FF0000开始的八位config是0030004到00030FFF,类似至此,即恢复了小米路由mini内丢失的sn信息。记录过程中难免有纰漏,如果有任何问题,请留言探讨。
-
拾肆 - 小米
http://www.ceniv.com/a/mi-router-mini-operation.html
2017-07-09T11:17:00+08:00
小米路由器mini是一款性价比相当不错的机器,官方系统是基于Openwrt系统修改优化,可用性及稳定性都很高。但是毕竟系统并不如原版Openwrt那么开放,自由度那么高。天博体育APP下载网页版使用小米路由mini已经一年多了,一直用的官方固件,最近在收集第三方固件留作折腾备用之时,没忍住诱惑直接刷入了三方固件。下面天博体育APP下载网页版就将过程中的一些注意事项和心得介绍一下,包括小米路由mini获取SSH权限、刷入第三方固件、以及丢失SN后的恢复等情况,方便更多爱折腾人士。一、获取SSH权限SSH是Secure Shell的缩写,最初是UNIX系统上的一个程序,几乎所有类UNIX平台,都可以运行SSH,常接触Linux的朋友应该不会陌生。它是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。可以理解为windows下的3389远程登陆,只不过它默认是22端口,且不是图形界面。小米路由器mini的系统是基于OpenWrt系统开发的,而OpenWrt本身就是一个嵌入式的 Linux 发行版,所以小米路由mini可以用Linux系统通用的SSH登陆方式进行管理。小米路由mini默认并不开放SSH权限,需要依照以下步骤手动获取。1.路由器绑定小米账号,方法:手机天博体育app下载链接小米路由APP,在小米路由的WIFI下登陆小米账号按照提示绑定;或者电脑天博体育app下载链接小米路由器客户端,按照提示登陆、绑定。2.登陆小米官网页面http://d.miwifi.com/rom/ssh,登入与路由器绑定的小米账号,即可看到你路由器系统root用户的密码,记录下来,然后点击下载工具包。(开启SSH功能意味着放弃保修资格,所以请慎重,工具包使用方法:小米路由器mini需升级到开发版0.3.84及以上。稳定版不支持。)3.下载到一个名为miwifi_ssh.bin的文件,按照以下步骤即可刷入SSH。a.将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin;b.断开小米路由器的电源,将U盘插入USB接口;c.按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键;d.等待3-5秒后天博体育app下载链接完成之后,小米路由器会自动重启,然后就开启了SSH功能。4.有网友说这个方法只适合旧版的固件,新版固件因为更换了密钥,所以刷入会失败,经天博体育APP下载网页版实验,至少当前官网最新开发版2.15.78版本是可以的。如果你刷失败了那就先通过网页后台管理界面刷入一个旧版本开发版固件吧,有网友实验0.8.39版本可用。小米路由mini中SSH的使用方法:Windows中下载putty软件(或者其他的SSH管理软件),填入IP地址192.168.31.1,端口22,连接类型SSH。第一次登录会弹出Putty警告,点是即可。登陆,用户名root,密码为刚才网页上记录下的密码,输入密码时无回显。看到root@XiaoQiang:~#的时候,说明登陆成功了。下面是一些Linux系统常用命令,可以先简单了解一下,以后的操作可能会用到。天博体育app下载链接和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln; 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; 其它命令:passwd、tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode等等。如果觉得刚才获得的root密码太复杂难记,可以输入命令passwd或passwd root来为root用户更改密码,回车后提示输入新的密码,输入时同样无回显,回车后二次确认输入密码进行确认即可。二、备份原生系统因为小米路由mini内保存着路由器的SN信息(SN就是产品序列号,每个机器有一个唯一的SN码,小米路由mini反面的标签上,条形码的下面就可以看到本台路由器的SN码了)。在使用官方固件的时候通过APP绑定账号绑定路由器就是通过这个SN码来的,所以如果以后还想要刷回官方系统,那么有必要备份下原有的信息。如果你没有备份,并且刷回原生系统时丢失了sn码,可以按照《小米路由mini恢复sn及ssh权限》方法来恢复。强烈建议,在刷第三方固件前,有编程器的先用编程器备份整个16M的FLASH到bin文件,以备不时之需。若手头没有编程器,可以进入SSH用以下方法备份Bootloader、Config、Factory、Bdata等各分区数据到文件。输入命令cat /proc/mtd显示:dev: size erasesize name
mtd0: 01000000 00010000 "ALL"
mtd1: 00030000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 00c80000 00010000 "OS1"
mtd5: 00b1xxxx 00010000 "rootfs"
mtd6: 00200000 00010000 "OS2"
mtd7: 00100000 00010000 "overlay"
mtd8: 00010000 00010000 "crash"
mtd9: 00010000 00010000 "reserved"
mtd10: 00010000 00010000 "Bdata"运行df -h命令查看U盘挂载点,比如U盘挂载于/extdisks/sda1,那么用以下命令备份Bootloader分区到U盘dd if=/dev/mtd1 of=/extdisks/sda1/bootloader.bin或者直接用以下命令将分区备份到路由器内部tmp目录,然后用WinSCP等工具拖回电脑。dd if=/dev/mtd1 of=/tmp/bootloader.bin用上面类似的命令将各分区全部备份为文件。如果以后发现问题需要恢复备份的文件,用以下命令恢复,其中的路径及分区对应修改。mtd -r write /extdisks/sda1/Bootloader.bin Bootloader三、刷第三方固件小米原生系统可折腾性不大,但有个优点就是,可以绑定手机APP,远程管理方便。如果没有这方面的要求,那么完全可以刷入第三方固件,比如同样为OpenWrt的PandoraBox固件。下载地址http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/stable目录是稳定版,testing目录是开发版。下载下来的*.bin文件可以改名为pandora.bin等简单的名字。还需要一个工具WinSCP,它是一款在Windows环境下使用SSH的开源图形化SFTP客户端,支持SCP协议(scp就是secure copy,是通过ssh传输数据进行远程文件拷贝的,与ssh使用相同的认证方式)。打开WinSCP,在右侧点击新建,主机名192.168.31.1,端口22,用户名root,密码填你的root密码,文件协议SCP,点击保存然后登录,第一次登录也会弹出安全警告,点更新即可。登录后,左侧是本地资源管理器,右侧是路由器端资源管理器。可以看到右侧文件结构其实就是linux系统的文件结构。右侧双击tmp目录进入,/tmp目录是系统默认的公共临时文件存储点,一般被分配大一点的磁盘空间,这个目录的文件在路由器重启后会清空。在左侧找到刚才下载的第三方固件,拖进右侧/tmp目录里。接着需要继续用到ssh终端命令,可以继续打开Putty登录,也可以点击WinSCP的工具栏的控制台进入命令界面,不过这个界面会有诸多限制。SSH登录后输入cd /tmp命令,将当前路径切换到tmp目录,下面有两种方法刷入固件。1.使用mtd程序,输入命令mtd write /tmp/xxxx.bin OS1 -r (这种方法是常用的)(-r命令是指完成后自动重启)2.使用Sysupgrade命令,输入命令sysupgrade -v /tmp/xxxx.bin下载固件+WinSCP上传到路由器的步骤,可以直接登录SSH用以下命令代替:wget -O /tmp/pandorabox.bin http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/stable/你所选择的固件.bin
mtd -r write /tmp/pandorabox.bin OS1这两种方法刷完自动重启,固件就刷入成功了!如果是潘多拉固件的话,默认ip是192.168.1.1,用户名root密码admin四、刷回小米官方固件首先进入小米路由官网下载页面http://www1.miwifi.com/miwifi_download.html,点击右边的ROM后往下拉,找到小米路由mini的开发版或稳定版固件,下载下来按照官方刷机方法刷入即可。将固件改名为miwifi.bin,放入U盘根目录下,拔掉路由电源,U盘插入路由USB口,顶住路由reset键不放的同时插上电源开机,等到路由的指示灯连续闪烁的时候,松开reset键,等待5-10分钟即可恢复原版固件完成。刷机过程中切勿拔掉电源和U盘或做其他操作,耐心等待即可。刷完后路由的IP地址又变成了192.168.31.1,而且刷回官方固件后ssh就消失了,想要再获得ssh权限就需要到官网重新获取。理论上还有另一种方法,但未试验,即按照刷第三方固件时提到的mtd程序刷入,应该也可成功。五、刷入u-boot或Breed1.ubootu-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统(即刷入的固件)运行之前运行的一小段程序,相当于PC电脑的BIOS或者UEFI,用来引导操作系统。刷入u-boot即替换了小米路由原生的Bootloader,之后可以说路由器基本就刷不死了,因为通过uboot刷固件的话,会在刷入时自动去掉固件自带的Bootloader,保证uboot本身不变不死。如果通过固件系统内的升级固件等方式进行升级的话,还是可能冲掉uboot的。但刷入uboot后刷第三方固件有可能会覆盖掉flash中原厂的SN码信息区域,导致再刷回官方固件后绑定不了官方的APP及小米账号,也就无法再获取ssh权限。如果确实已经丢了SN信息,请按照《小米路由mini恢复sn及ssh权限》方法来操作试着恢复SN信息。确定要刷入u-boot,那么按照以下步骤操作。到OpenWrt官网http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/u-boot/下载小米路由mini对应的第三方uboot文件,据说uboot-xiaomi-mini-115200.bin可能会导致路由进入恢复模式,请慎重。刷第三方uboot之前最好先备份原有的uboot,以备以后无法刷回官方固件时有解决方案。使用Putty软件登录ssh,命令行输入以下命令:dd if=/dev/mtd1 of=/tmp/xiaomi_uboot.bin系统回显:384+0 records in 384+0 records out已经在tmp目录下生成了一个叫xiaomi_uboot.bin的原厂Bootloader备份。然后就可以登录WinSCP把该文件拷贝回电脑上作为备份。然后把刚才下载的潘多拉uboot.bin传入/tmp目录,准备刷入。按照刷入第三方固件的mtd方法稍微修改下,命令为mtd -r write /tmp/uboot.bin Bootloader输入后系统会自动重启,第三方uboot就刷入成功了。这时小米原生的Bootloader已经被uboot覆盖了,也就无法再用小米官方U盘方式刷入小米固件了。刷完uboot后小米路由mini的IP地址会变成192.168.1.1。如果想进入uboot界面,拔掉路由电源,将电脑的IP地址改为192.168.1.x网段,然后顶住小米路由mini的reset键插上电源开机,等到mini指示灯连续闪烁的时候松开reset键,电脑打开浏览器进入192.168.1.1就可以进入uboot的web界面了。2.breedbreed是另一个Bootloader程序,是用于取代uboot的选择,由恩山论坛的hackpascal开发,号称是全新的、独立的、跟u-boot平级的Bootloader,拥有以下新特性:实时刷机进度,进度条能准确反映刷机进度;Web 页面快速响应;最大固件备份速度,依 Flash 而定,一般能达到 1MB/s;免按复位键进入 Web 刷机模式;telnet 功能,免 TTL 进入 Breed 命令控制台;复位键定义测试功能;固件启动失败自动进入 Web 刷机模式;可自定义位置和大小的环境变量块。从介绍界面来看,与u-boot大同小异,所以就当做是另一个版本的u-boot来用即可。刷入及启用过程参照u-boot过程,一模一样。六、用Breed或u-boot刷入系统固件刷入uboot或breed后刷入第三方固件有可能会损坏flash内原厂系统的SN记录,导致再刷入小米原生固件后绑定不了app,不能再次获得ssh权限。这时只能再通过breed或uboot刷入其他支持ssh的固件了。这种情况下千万不要使用小米固件内的系统更新来更新固件,否则可能会连breed(uboot)都破坏掉,就再无法获取ssh了。下面是用breed刷入固件方法(uboot方法大同小异,参照即可),包括小米固件和第三方固件。1.进入Breed Web恢复控制台,左侧菜单栏点“固件启动设置”,如果刷小米固件选择“小米mini启动”,刷其他固件默认选择“常规固件”即可。2.选择“固件更新”,右侧根据需求选择相应固件。然后点击上传,系统读取固件信息,确认无误后点击下方的“更新”进行刷机。当然还是可以继续使用ssh命令行方式来刷入第三方固件的,但如果已刷回了官方固件就失去了ssh权限,无法使用命令行了。如果出现breed无法正常刷入刷回固件,那最终办法就是刷回小米原生的Bootloader,即在固件更新界面选择Bootloader更新,把之前备份的xiaomi_uboot.bin刷回去,就可以回到官方刷固件方法了。但这样官方的Bootloader不支持刷入第三方固件,而且丢失了sn信息,也无法再获取ssh权限,无法再折腾小米路由mini了。关于丢失了sn及ssh权限的解决办法,请参见另一篇文章《小米路由mini恢复sn及ssh权限》。