解包小米路由器固件
看到Ljcbaby在群里说,小米路由器开ssh的那个洞在新机器可能依然存在,遂一起研究一下
本文中的操作主要在Ubuntu23.04中完成
先从小米官网上下载固件,没什么好说的(还在用http,离谱)。
这里为了对比,下了ax3000t和ac2100的固件,这两台机器都有人在用,并且后者是已知有这个洞,而前者固件修复了这个问题但据说依然有办法。
不清楚新固件有没有修,ac2100就用了2.0.722的miwifi_r2100_firmware_4b519_2.0.722.bin
解包[1]
安装工具
1 | pip3 install ubi_reader |
安装后
1 | ubireader_extract_images miwifi_r2100_firmware_4b519_2.0.722.bin |
1 | UBI_File Warning: end_offset - start_offset length is not block aligned, could mean missing data.UBI_File Warning: end_offset - start_offset length is not block aligned, could mean missing data. |
有警告,不过问题不大,得到img-1537728761_vol-ubi_rootfs.ubifs
1 | unsquashfs img-1537728761_vol-ubi_rootfs.ubifs |
1 | Parallel unsquashfs: Using 6 processors |
解压出了整个文件系统
1 | ls |
1 | bin data dev etc lib mnt overlay proc readonly rom root sbin sys tmp userdisk usr var www |
代码在/usr/lib/lua/xiaoqiang
里(好像代码层面小米路由器的代号是xiaoqiang?)
ax3000t的.bin文件可以解出img-1508723001_vol-kernel.ubifs
和img-1508723001_vol-rootfs.ubifs
两个文件,但kernel那个用unsquashfs
解不开,应该只是系统内核,意义不大,rootfs那个里面就有目录结构了
反编译
这里用了一个github项目,简单翻了下代码在/src/unluac/
,但是没看到maven或者gradle之类的配置文件
后来在actions配置(/.github/workflows/jarbuild.yml
)里看到了构建方法,就是非常原始的一个个编译再拼起来
1 | mkdir build |
得到编译产物unluac.jar,再扫两眼代码看下用法,让ChatGPT写个脚本
1 | # 创建decompiled目录(如果不存在) |
这是Windows的,但不知道为什么(可能是他程序的问题)子目录下的识别不到
1 | @echo off |
至此,我们就获得了小米路由器的源码,虽然经过了混淆但还是有一定的意义,可以进行一些简单的字符串搜索或者扔给AI
2023.11.7更新
ljc看到称bug存在的那位说出了方法,就不再研究了
但是因为群是比较封闭的小群,也没问,所以就不把方法写出来了