轶哥

妄图改变世界的全栈程序员。

小米路由器4免拆机刷OpenWrt教程

小米路由器4

小米路由器4 LAN口全千兆+5G Wifi,当时顺手买了这货,性价比蛮高。后面由于路由器升级,这货一直在吃灰。最近偶然看到它,发现网上的教程都是需要TTL线刷😂。其实不用线刷也能刷入Openwrt,特地记录下刷机过程。

Root路由器

使用网友开源方案OpenWRTInvasion进行Root

理论上此方案兼容:

  • 小米路由器4
  • 小米路由器4A 千兆版
  • 小米路由器4A 100M版
  • 小米路由器4C
  • 小米路由器4Q(R4C)
  • 小米路由器3Gv2
  • 小米路由器3C

不同型号需要的版本号可能不同,详细情况请自行查阅OpenWRTInvasion

先决条件

  1. 安装好gitpython3pip3
  2. 安装好telnet(Mac下:brew install telnet)。
  3. 路由器和电脑都已经连接上网络。

Root Shell

git clone https://github.com/acecilia/OpenWRTInvasion
cd OpenWRTInvasion
pip3 install -r requirements.txt
python3 remote_command_execution_vulnerability.py

获取stock

执行脚本后,会要求输入Route IPstok。路由器地址就不解释了,stok的获取方法很简单,访问路由器管理地址,例如http://192.168.1.1,然后登录管理后台,再查看当前的路由器管理后台的URL,在URL中某个参数就是stok。执行过程需要联网。

脚本执行成功后,执行:

telnet <router_ip_address>

用户是root,不需要密码,回车即可进入。

刷入OpenWRT

注意: 此步骤刷入的固件仅支持小米路由器4红米AC2100,其它机型请自行查找固件。

感谢ioiotor大佬提供的固件:https://github.com/ioiotor/mir4-ss。可以参考原作者写的小米路由器4刷openwrt 19.07.2 教程

我也只是使用别人做好的固件,使用过程有什么问题,请联系原作者。

由于Mac下我没有找到怎么通过telnet直接传文件,记录一下我的解决办法:

下载release页面大佬编译好的固件,并将openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.binopenwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin这两个文件上传到你的七牛或者别的对象存储中,方便路由器直接wget

参考原作者的命令:

cd /tmp
wget http://你的七牛或者别的对象存储地址/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin
wget http://你的七牛或者别的对象存储地址/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin
mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin kernel1
mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin rootfs0
nvram set flag_try_sys1_failed=1
nvram commit
reboot

重启后,打开浏览器,输入http://192.168.1.1,用户名是root,密码为空或password

进入系统-备份/升级页面(/cgi-bin/luci/admin/system/flash),将带sysupgrade的固件文件上传到刷写新固件(取消勾选保存配置)。刷入后等待重启,刷机完成。

小米路由器4OpenWRT

路由器内存够用,性能也不错,截止发稿,稳定运行两个周。再次感谢提供Root Shell方案的相关大佬和ioiotor大佬的固件。

打赏
交流区(45)
劉青楓

已刷机成功

2020年7月21日 10:11回复
轶哥

恭喜

2020年7月21日 10:16回复
轶哥

在交流区开放前,收到一些小伙伴邮件告诉我刷机成功的喜讯。感谢大家的支持!

image.png

image.png

2020年7月21日 15:55回复
小刚哥啊帅到掉渣

你好,我前面的命令行执行都是成功的,但是telnet失败了,请问你知道原因吗?image.png

2020年8月8日 20:10回复
轶哥

哥们,看上去貌似没有问题,你的路由器型号是什么?试一下当前是否能ping通路由器。

2020年8月8日 20:28回复
细水长流

哥们,看上去貌似没有问题,你的路由器型号是什么?试一下当前是否能ping通路由器。

我也发生了同样的错误,请问这个怎么解决的,万分感谢

2020年8月28日 22:29回复
轶哥

我也发生了同样的错误,请问这个怎么解决的,万分感谢

貌似再次执行就好了。

2020年8月28日 23:46回复
细水长流

貌似再次执行就好了。

使用telnet 10.10.120.1 -l root可以连接

但是遇到另外一个问题:reboot之后,半天没反应,是否已经砖了?

2020年8月29日 11:10回复
轶哥

但是遇到另外一个问题:reboot之后,半天没反应,是否已经砖了?

这不一定。甚至这已经是普遍现象。断电,再上电,观察是否能正常进入系统。

2020年8月30日 00:15回复
故里

执行这条命令的时候提示有语法错误

pip3 install -r requirements.txt

C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(26): error C2061: syntax error: identifier 'intmax_t' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(27): error C2061: syntax error: identifier 'rem' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(27): error C2059: syntax error: ';' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(28): error C2059: syntax error: '}' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(30): error C2061: syntax error: identifier 'imaxdiv_t' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(30): error C2059: syntax error: ';' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(40): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2146: syntax error: missing ')' before identifier '_Number' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2061: syntax error: identifier '_Number' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(41): error C2059: syntax error: ';' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(42): error C2059: syntax error: ')' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(45): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2146: syntax error: missing ')' before identifier '_Numerator' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2061: syntax error: identifier '_Numerator' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2059: syntax error: ';' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(46): error C2059: syntax error: ',' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(48): error C2059: syntax error: ')' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(50): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(56): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(63): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(69): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(76): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(82): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(89): error C2143: syntax error: missing '{' before 'cdecl' C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.h(95): error C2143: syntax error: missing '{' before 'cdecl'

error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe' failed with exit status 2
ERROR: Command errored out with exit status 1: 'c:\users\administrator\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Administrator\AppData\Local\Temp\pip-install-lna6x3bj\pycrypto\setup.py'"'"'; file='"'"'C:\Users\Administrator\AppData\Local\Temp\pip-install-lna6x3bj\pycrypto\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Administrator\AppData\Local\Temp\pip-record-48ixpmdn\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\administrator\appdata\local\programs\python\python38\Include\pycrypto' Check the logs for full command output.
2020年8月21日 15:49回复
轶哥

这是安装依赖的时候报错了。请尝试更换python版本。

2020年8月21日 16:11回复
故里

这是安装依赖的时候报错了。请尝试更换python版本。

谢谢

2020年8月22日 08:32回复
故里

我安装的是3.8.5版本,请问有推荐版本吗

2020年8月22日 08:36回复
轶哥

我安装的是3.8.5版本,请问有推荐版本吗

可以尝试一下2.7版本,多试几次

2020年8月22日 14:20回复
LX

你好 我这里同样的telnet不通 我用的linux ,请问一下该怎么解决呢?

[LX@MiWiFi-R4-srv ~]$ telnet 192.168.31.1 Trying 192.168.31.1... telnet: connect to address 192.168.31.1: Connection refused

2020年8月21日 16:06回复
LX

ping 192.168.31.1的话是可以的

2020年8月21日 16:07回复
轶哥

ping 192.168.31.1的话是可以的

这个情况有可能是之前的步骤有报错。之前步骤是否都正常呢?

2020年8月21日 16:13回复
szz19960815

ping 192.168.31.1的话是可以的

再试一次,或许就能成功

2020年8月21日 19:37回复
轶哥

再试一次,或许就能成功

是呢,他就是这样成功了!

2020年8月21日 20:33回复
故里

Running setup.py install for pycrypto ... error ERROR: Command errored out with exit status 1: command: 'c:\python\python36\python3.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\hzt\AppData\Local\Temp\pip-install-veo0d704\pycrypto\setup.py'"'"'; file='"'"'C:\Users\hzt\AppData\Local\Temp\pip-install-veo0d704\pycrypto\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\hzt\AppData\Local\Temp\pip-record-6q0tu156\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\python\python36\Include\pycrypto' cwd: C:\Users\hzt\AppData\Local\Temp\pip-install-veo0d704\pycrypto\

error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe' failed with exit status 2
ERROR: Command errored out with exit status 1: 'c:\python\python36\python3.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\hzt\AppData\Local\Temp\pip-install-veo0d704\pycrypto\setup.py'"'"'; file='"'"'C:\Users\hzt\AppData\Local\Temp\pip-install-veo0d704\pycrypto\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\hzt\AppData\Local\Temp\pip-record-6q0tu156\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\python\python36\Include\pycrypto' Check the logs for full command output.

这是我得到最新的报错,请问我该怎么继续呢

2020年8月22日 12:22回复
轶哥

可以尝试下载git windows,借助git bash再试试

2020年8月22日 14:22回复
故里

之前的问题已经解决,更换python的版本解决的。我终于进行下一步,但是还是遇到问题。

Administrator@HZT MINGW64 /h/openwrt/OpenWRTInvasion (master) $ python remote_command_execution_vulnerability.py File "remote_command_execution_vulnerability.py", line 22 router_ip_address = input(f"Router IP address [press enter for using the default {router_ip_address}]: ") or router_ip_address ^ SyntaxError: invalid syntax

2020年8月22日 17:13回复
轶哥

再试一次,这是哪一步报错的?

2020年8月22日 17:24回复
故里

再试一次,这是哪一步报错的?

运行

python3 remote_command_execution_vulnerability.py时报错

2020年8月22日 17:49回复
轶哥

好像说的是路由器ip地址不对

2020年8月22日 17:55回复
故里

好像说的是路由器ip地址不对

image.png

2020年8月22日 18:06回复
故里

image.png

上面是我运行remote_command_execution_vulnerability.py这个文件时的报错,代码是不是要改

2020年8月23日 09:34回复
轶哥

正常来说是不需要修改代码的。这个报错可能跟python版本有关。

2020年8月23日 21:03回复
故里

image.png

然后又遇到下面这个问题image.png

image.png

没有提示这个GBK报错了,接下来有报错了

image.png

对于这个报错我看不懂,因为我没有学习过python编程,实在难搞。请大哥们帮我看看。

2020年8月23日 09:47回复
故里

image.png

虽然我想尽办法,最后还是失败了。

2020年8月23日 12:29回复
轶哥

抱歉,你的回复我已经收到短信提示的。今天有点忙。

你的路由器型号是多少?

2020年8月23日 21:03回复
故里

抱歉,你的回复我已经收到短信提示的。今天有点忙。

你的路由器型号是多少?

路由器型号是小米4

2020年8月24日 09:30回复
轶哥

你的路由器型号是多少?

路由器型号是小米4

小米4应该是没问题的。要不在wsl或者linux环境试一下。

2020年8月24日 09:37回复
故里

你的路由器型号是多少?

路由器型号是小米4

我查询到Python3.6版本才有字符串前加F的用法,在脚本里输入IP的这一行就是用的这种格式,而我用的是python3.5,我将会装3.6 版本的再尝试。

2020年8月24日 09:43回复
轶哥

我查询到Python3.6版本才有字符串前加F的用法,在脚本里输入IP的这一行就是用的这种格式,而我用的是python3.5,我将会装3.6 版本的再尝试。

嗯嗯,可以直接尝试3.8

2020年8月24日 09:45回复
沫墨千叶草

哥,有联系方式吗,我的米4出了点问题,有线连接正常速度,峰值11M每秒,但是无线连接始终只有500K,就好像被限速了,无论如何调试都无效,更改无线频段有所改散,2.4G现在用11信道40M可达3.5M每秒,5G干脆直接无法用,只有100K每秒,如何调试都是无效的,虽然说勉强可用2.4G,但是很难受,现在想刷固件看看能不能改善这个问提,可是我完全是爬虫小白,你提的先决条件我都下载好了工具,但是你所展示的代码这些,看不懂。可以要一个联系方式吗

2020年8月25日 18:49回复
轶哥

哥,有联系方式吗,我的米4出了点问题,有线连接正常速度,峰值11M每秒,但是无线连接始终只有500K,就好像被限速了,无论如何调试都无效,更改无线频段有所改散,2.4G现在用11信道40M可达3.5M每秒,5G干脆直接无法用,只有100K每秒,如何调试都是无效的,虽然说勉强可用2.4G,但是很难受,现在想刷固件看看能不能改善这个问提,可是我完全是爬虫小白,你提的先决条件我都下载好了工具,但是你所展示的代码这些,看不懂。可以要一个联系方式吗

可以加我微信,在博客首页头像下方哈

2020年8月25日 19:00回复
QaQ

root@XiaoQiang:~# cd /tmp root@XiaoQiang:/tmp# wget http://10.10.10.5/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin Connecting to 10.10.10.5 (10.10.10.5:80) openwrt-ramips-mt762 100% |****| 1874k 0:00:00 ETA root@XiaoQiang:/tmp# wget http://10.10.10.5/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin Connecting to 10.10.10.5 (10.10.10.5:80) openwrt-ramips-mt762 100% |****| 15616k 0:00:00 ETA root@XiaoQiang:/tmp# mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin kernel1 Could not open mtd device: kernel1 Can't open device for writing! root@XiaoQiang:/tmp# mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin rootfs0 Could not open mtd device: rootfs0 Can't open device for writing! root@XiaoQiang:/tmp# nvram set flag_try_sys1_failed=1 root@XiaoQiang:/tmp# nvram commit root@XiaoQiang:/tmp# reboot

root@XiaoQiang:/tmp# cat /proc/mtd dev: size erasesize name mtd0: 01000000 00010000 "ALL" mtd1: 00030000 00010000 "Bootloader" mtd2: 00010000 00010000 "Config" mtd3: 00010000 00010000 "Bdata" mtd4: 00010000 00010000 "Factory" mtd5: 00010000 00010000 "crash" mtd6: 00010000 00010000 "cfg_bak" mtd7: 00100000 00010000 "overlay" mtd8: 00d00000 00010000 "OS1" mtd9: 00b30000 00010000 "rootfs" mtd10: 00180000 00010000 "disk" root@XiaoQiang:/tmp#

能否帮忙看下?

2020年9月11日 00:06回复
轶哥

这几行命令是需要在路由器里面执行,貌似你在本地终端执行的。👀️

2020年9月11日 09:17回复
喵喵喵

这几行命令是需要在路由器里面执行,貌似你在本地终端执行的。👀️

是在路由器里执行的,写入的时候报 Can't open device

root@XiaoQiang:/tmp# mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin kernel1

Could not open mtd device: kernel1

Can't open device for writing!

root@XiaoQiang:/tmp# mtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin rootfs0

Could not open mtd device: rootfs0

2020年9月11日 09:53回复
轶哥

这个情况我没有遇到过,也没有其他人反映过有这个问题。你的路由器型号是小米路由器4吗?我看主机名好像不正常。

2020年9月11日 10:21回复
喵喵喵

这个情况我没有遇到过,也没有其他人反映过有这个问题。你的路由器型号是小米路由器4吗?我看主机名好像不正常。

aa.png

小米R4A,应该是这个型号,我路由器的信息

2020年9月11日 10:28回复
轶哥

那得找对应的固件去刷嘛。这个固件是小米路由器4的。

2020年9月11日 10:30回复
喵喵喵

那得找对应的固件去刷嘛。这个固件是小米路由器4的。

小米R4A 就是小米路由4千兆版,可能是这个出厂晚些(这两个分区名称变了)命令中 kernel1,rootfs0 这个两个也要变化,但是我不确定对应的是哪两个...

谢谢,博主的回复

2020年9月11日 10:35回复
轶哥

哦哦,你说这个情况我确实不太清楚。😂

祝你顺利!

2020年9月11日 10:36回复
尚未登陆
发布
  上一篇 (树莓派4使用OTG功能变身有线网卡)
下一篇 (MacOS Chrome信任自签名证书)  

评论回复提醒