找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 6779|回复: 22

[ax9000] 关于破解小米路由AX9000的那点破事

[复制链接]
发表于 2024-8-10 16:06 | 显示全部楼层 |阅读模式
本帖最后由 noah_bentusi 于 2024-8-10 16:20 编辑

# 关于破解小米路由AX9000的那点破事

## 概述

花了好几天的时间,终于把小米路由器破解成功了。于是想着把这些天做的事情梳理一下。

大概过程是这样。

1. 先刷了miwifi_ra70_all_develop_1.0.140.bin开发版固件。想着通地docker服务把ssh服务打开。却发现国内已经无法直接拉取镜像了。导致docker后台管理镜像一直拉取失败。折腾了半夜才搞定。
2. 搞定了docker后。却发现开发版固件不支持16位子网。强行写配置,AX9000直接罢工不干了。
3. 无奈。只能想办法破解最新的稳定版本miwifi_ra70_firmware_cc424_1.0.168.bin固件。
4. 于是,各种捣鼓。正确地找到解压小米固件的办法。然后,开开心心修改里面的配置文件。
5. 修改好后配置。却又犯了难。路由器和网上的mkxqimage工具都是阉割版,没有打包固件功能。
6. 又一次大无语。还好网上的mkxqimage是开源的。只能仔细读其源代码。按照逻辑反向写了打包功能。
7. 终于打成了自定义固件。已经做好了变砖的准备。下好了小米修复工具,准备变砖线刷固件。结果是一次成功。真是开心死了。

下面就梳理一下破解的详细过程。本文提到的所有工具,都附在压缩包中。可供下载。

## 破解的详细过程

### 前提

破解的环境,需要有一台ubuntu或者debian的linux操作系统。我的所有操作都是在linux系统下完成的。

### 刷开发版本固件

进入小米路由器后的 `常用设置` -> `系统状态`。

将firmware/miwifi_ra70_all_develop_1.0.140.bin固件手动升级。

之后按照步骤初始化好。

#### 安装docker服务

拿一个usb移动硬盘。在linux系统下,使用`fdisk`命令,划分出第一个分区为Linux filesystem。 分区类型是20

用`mkfs.ext4`命令,将第一个分区格式化为ext4格式。

虽后,插到小米路由器上。在 `高级设置` -> `Docker`。点击安装docker服务。等待一小会儿,安装成功。

这时,点击运行docker。服务运行起来后,等待5、6秒再关上。不必去安装docker管理系统。反正因为国内网络原因,也装不上。

之所以运行一下,是因为docker服务启动后,会移动硬盘上创建一个docker服务运行目录。这是我们需要用的。

#### 修理docker服务运行目录

将移动硬盘重新挂载到linux系统下。你会在该分区下,看到/mi_docker/lib/docker这个目录,就是docker服务运行目录。docker服务所有数据都保存在这里。

ubuntu/debian系统,可以用`apt install docker-ce`安装docker服务。linux系统的docker服务运行目录处于/var/lib/docker。

这时,我们就可以偷梁换柱了。

用`sudo service docker stop`。把docker服务停止。然后`sudo mv /var/lib/docker /var/lib/docker.raw`, 将系统本身运行目录挪开。

再`sudo ln -s ${your_udisk_mount}/mi_docker/lib/docker /var/lib/docker`将移动硬盘运行目录映射过来。 这里${your_udisk_mount}替换成你的移动分区挂载的实际位置

然后,再运行`sudo service docker start`。

至此,linux系统已经成功运行移动硬盘上的环境了。

#### 摸拟arm64架构

因为小米路由器的cpu是arm64的。我的机器是amd64的,构架不一样。无法直接运行arm64镜像。所以需要使用qemu来转译arm64指令。如果你的linux系统刚好是arm64的。就可以跳过这里。

我现在需要加载qemu镜像和binfmt镜像。

在docker/qemu.img和docker/binfmt.img可以找到这两个镜像。使用下面命令进行加载

    sudo apt install qemu-user-static

    docker load -i docker/qemu.img
    docker load -i docker/binfmt.img

再做qemu指令映射

    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    docker run --privileged --rm tonistiigi/binfmt --install all
    docker buildx create --name docker-builder --driver docker-container --use

#### 构建破解镜像

然后,我们就可以构架破解打开ssh服务的镜像了。镜像编译代码在docker/craker下。有这么几个文件

    Dockerfile  docker镜像生成配置文件。不需要改动
    crack.sh 破解动作执行脚本。行为就是将下面三个文件,复制到小米路由器相应的位置上
    rc.local 开机运行脚本。里面写了启动ssh服务的命令。这里打开的是2222端口。可以修改成任意端口
    authorized_keys 连接ssh服务,我喜欢使用密钥进行连接。连接私钥放在了/ssh-keys目录下了
    dropbear_rsa_host_key ssh服务器的私钥。不需要改动

构建镜像之前,需要先加载基础镜像

    docker load -i alpine.img

进入craker目录下。就可以构建镜像了。如果系统本身是arm64。只需要直接构建就可以了。`docker build -t cracker .`

转译构建,需要执行这个命令

    docker buildx build \
        --platform linux/arm64 \
        --tag "cracker"

#### 运行破解镜像容器

在本地把破解镜像运行起来。

    docker run -d -v /etc:/run --restart always --name cracker cracker

这里我用的是--restart always。所以破解镜像容器会不停的执行破解操作。这样移动硬盘挂载到小米路由器,docker运行起来后。破解容器就会自动不停运行起来。

把docker服务停下来

    sudo service docker stop
    sudo rm /var/lib/docker #把docker运行目录映射删除
    sudo mv /var/lib/docker.raw /var/lib/docker #恢复原有的运行目录

#### 破解ssh

将移动硬盘重新挂载到小米路由器上。点击运行docker。运行起来,等个几秒种后,就可以重启小米路由器。试着ssh就连上去了。

docker服务和移动硬盘就可以抛弃不用了。

如果一般使用的话。到此就可以结束了。但是开发版固件,不支持16位子网。我家还有一大堆智能设备,ip拥挤不堪。所以,我还需要破解稳定版本固件。

### 破解稳定版固件

#### 关于mkxqimage

路由器和网上的mkxqimage工具都是阉割版,没有打包固件功能。于是我阅读了开源的mkxqimage解包代码。逆向写了打包代包。代码我用的是nodejs写的。nodejs是同类于python的一种语言。python能做的,nodejs一样都能做。nodejs使用的javascript语言,因为我平常工作用的都是c\c++、java、javascript这些类c语言,所以我喜欢用nodejs来写小工具,而不是python。

nodejs的运行环境在https://nodejs.cn/官网可以下载到。

mkxqimage代码在/mkxqimage目录下。

    node main.mjs #就可以运行

解压命令是

    node main.mjs --action read --image 固件文件 --publicKey 公钥文件 --output 解包输出目录

打包命令是

    node main.mjs --action write --model 固件设备id --image 固件文件 --privateKey 私钥文件 --file 第一个文件 --file 第二个文件 ...

其中固件设备id,在官方固件解包输出的时候可以看到。

#### 解包工作

官方固件解压公钥文件,可以在小米路由器上找到。位置在`/usr/share/xiaoqiang/public.pem`。我在/bin-keys下也放一份。

解压命令如下:

    node main.mjs --action read --image ../firmware/miwifi_ra70_firmware_cc424_1.0.168.bin --publicKey public.pem --output ../unpack

在unpack目录会有

    xiaoqiang_verison # 固件版本描述文件
    root.ubi          # mtd设备文件,相当于一个磁盘数据。小米路由器系统都保存在这里。

#### 加载ubi

ubuntu系统加载ubi需要安装以下几个包

    sudo apt install mtd-utils squashfs-tools

然后在内核中装载起来

    sudo modprobe ubi #装载ubi系统支持
    sudo modprobe first_id_byte=0x20 second_id_byte=0xa2 third_id_byte=0x00 fourth_id_byte=0x15 #摸拟一个mtd设备

现在`cat /proc/mtd`,就可以看到系统里一个mtd设备可以供装载ubi文件使用了。执行下面命令装ubi文件

    sudo ubiformat /dev/mtd1 -y # 清空mtd设备中的内容, 注意这里mtd1的1是可以变动的。
                                # 我的系统下是1。有的系统可能是0,或者是其它数字。
                                # 需要查看/proc/mtd来确定"NAND simulator partition 0"的位置
    sudo ubiformat /dev/mtd1 -f root.ubi -s 2048 -O 2048 -y # 将root.ubi文件刷进mtd设备
    sudo ubiattach /dev/ubi_ctrl -O 2048 -m 1 # 加载mtd1内容。其中 -m 1就是mtd1的意思

不出意外的话。我们可以看到`ls /dev/ubi0*`下

    /dev/ubi0   # ubi0磁盘。我估且管它叫磁盘吧
    /dev/ubi0_0 # ubi0磁盘的第一个分区
    /dev/ubi0_1 # ubi0磁盘的第二个分区
    /dev/ubi0_2 # ubi0磁盘的第三个分区

经常过挂载尝试,我搞清楚了这三个分区的内容。

* 第一个分区,运行kernel。不需要动
* 第二个分区,是系统根分区。所有配置和运行文件都在这里。该分区是squashfs格式的
* 第三个分区,是个空分区。里面啥也没有。

### 读取三个分区的数据

由于ubi系统是只读系统,而我们需要配置其中的内容,所以我们要其中数据弄出来再作修改。之后打包也要用到。

    sudo dd if=/dev/ubi0_0 ubi/ubi0.dat  #第一个分区数据复制到ubi0.dat中
    sudo dd if=/dev/ubi0_1 ubi/ubi1.dat
    sudo dd if=/dev/ubi0_1 ubi/ubi2.dat

挂载squashfs数据   

    sudo mount -t squashfs -o loop ./ubi/ubi1.dat rom-firmware

rom-firmware目录里面就看到小米路由器根分区所有文件了

### 破解ssh

rom-firmware是只读的。所以需要先把文件都复制出来

    sudo cp -rp rom-firemware/* rom/

最终我们有了一个可修改的小米系统了。而且,因为我们安装了qmeu转译功能。所以我们是可以直接运行里面程序的。可执下面的命令,进入小米系统。

    sudo chroot ./rom sh

破解开启ssh服务,需要将之前cracker目录下的文件,按照cracker.sh里面的动作,复制到相应的目录就可以了。

既然解开了根分区,那么我们
可以做的更多。比如 开启udpxy提供iptv,ddns动态域名, dnsmasq自定义域名 等等。只是注意别搞得太过份。因为小米路由器的mtd容量有限,不要撑爆了。

### 打包固件

修改完成后。就是打包工作了。


#### 打包squashfs

首先需要将小米根分区数据打包回squashfs数据文件 。

    sudo rm -f ubi/root.squashfs
    sudo mksquashfs ./rom ./ubi/root.squashfs -comp xz -b 262144

#### 封装ubi文件。

在ubi下有一个ubi.cfg,是我已经写好的封装配置文件,直接用就可以了。

    [kernel]
    mode=ubi
    image=ubi0.dat
    vol_id=0
    vol_type=dynamic
    vol_name=kernel

    [ubi_rootfs]
    mode=ubi
    image=root.squashfs
    vol_id=1
    vol_type=dynamic
    vol_name=ubi_rootfs

    [rootfs_data]
    mode=ubi
    vol_id=2
    vol_type=dynamic
    vol_name=rootfs_data
    vol_size=1
    vol_flags=autoresize

执行封装命令

    ubinize -o custom.ubi -m 2048 -s 2048 -p 128KiB ubi.cfg

封装好了之后。为了保险,我自己尝试加载了一下

    sudo ubidetach /dev/ubi_ctrl -m 1 # 缷裁mtd1

    sudo ubiformat /dev/mtd1 -y
    sudo ubiformat /dev/mtd1 -f custom.ubi -s 2048 -O 2048 -y
    sudo ubiattach /dev/ubi_ctrl -O 2048 -m 1

自行去检查一下三个分区中的数据。就不赘述了。

#### 打包成固件

    mkdir custom

    cp unpack/xiaoqiang_verison custom/xiaoqiang_verison
    cp ubi/custom.ubi custom/root.ubi

    cd mkxqimage
    node main.mjs --action write --model 37 --privateKey ../bin-key/custom.prk --image ../custom/custom.bin --file ../custom/xiaoqiang_verison --file ../custom/root.ubi

最后在custom目录下,就有了custom.bin。我们自定义的固件。

### 安装固件

由于打包固件,用的是自定义的密钥。所以安装固件,需要将bin-key/custom.pbk文件替换到小米路由器的/usr/share/xiaoqiang/public.pem上面。

之后,就可以正常通过后台管理页面上传安装固件了。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +1 收起 理由
Tarchia + 1 不要怂、就是干!

查看全部评分

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
发表于 2024-8-10 16:10 | 显示全部楼层
膜拜大佬
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-8-10 17:17 | 显示全部楼层
路过帮顶。过程这么复杂,都被你搞出来了
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-8-10 17:27 | 显示全部楼层
Qualcomm IPQ8072A 4核 A53 2.2GHz CPU
这路由器还是挺强劲的
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-10 17:58 来自手机 | 显示全部楼层
superzjg 发表于 2024-8-10 17:17
路过帮顶。过程这么复杂,都被你搞出来了

现在弄东西比以前方便多了。有AI,有什么麻烦问题直接丢给kimi,大差不差的就能给出答案。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-8-16 15:23 | 显示全部楼层
感谢楼主的用心研究,过来研究支持一下
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-8-18 23:20 | 显示全部楼层
感谢分享,但是用不了
不知道哪里的问题
  1. sudo apt install mtd-utils squashfs-tools

  2. ./node main.mjs --action read --image miwifi_ra70_1.0.108.bin --publicKey ../bin-keys/public.pem --output ../unpack

  3. cd ../unpack
  4. sudo modprobe ubi
  5. sudo modprobe nandsim first_id_byte=0x20 second_id_byte=0xa2 third_id_byte=0x00 fourth_id_byte=0x15
  6. sudo ubiformat /dev/mtd0 -y
  7. sudo ubiformat /dev/mtd0 -f root.ubi -s 2048 -O 2048 -y
  8. sudo ubiattach /dev/ubi_ctrl -O 2048 -m 0

  9. cd ..
  10. sudo dd if=/dev/ubi0_0 of=ubi/ubi0.dat
  11. sudo dd if=/dev/ubi0_1 of=ubi/ubi1.dat

  12. sudo mount -t squashfs -o loop ./ubi/ubi1.dat firmware
  13. sudo cp -rp firmware/* rom/
  14. sudo chown -R 0 rom
  15. sudo chgrp -R 0 rom
  16. sudo chmod -R 777 rom

  17. sudo rm -f ubi/root.squashfs
  18. sudo mksquashfs ./rom ./ubi/root.squashfs -comp gzip -b 262144
  19. cd ubi

  20. ubinize -o custom.ubi -m 2048 -s 2048 -p 128KiB ubi.cfg

  21. sudo ubidetach /dev/ubi_ctrl -m 0

  22. cd ..
  23. mkdir -p custom
  24. cp unpack/xiaoqiang_version custom/xiaoqiang_version
  25. cp ubi/custom.ubi custom/root.ubi

  26. cd mkxqimage
  27. ./node main.mjs --action write --model 37 --privateKey ../bin-keys/custom.prk --image ../custom/custom.bin --file ../custom/root.ubi --file ../custom/xiaoqiang_version
  28. cd ..
  29. sudo chown -R 0 custom
  30. sudo chgrp -R 0 custom
  31. sudo chmod -R 777 custom
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

现在是Model mismatch和 model型号不匹配。 现在从bin读取出来的型号代码是38. Ax9000应该是 37才对。 你解压原版固件时,看一眼日志。我的代码出输出固件文件头。里面有model的值. 打包固件时,也会有日志,输出  详情 回复 发表于 2024-8-27 15:42
你解压原版固件时,看一眼日志。我的代码出输出固件文件头。里面有model的值. 打包固件时,也会有日志,输出打包后的文件头,里面也有model值。 你看一下,两个值是否一致。  详情 回复 发表于 2024-8-27 15:41
--model 37是你的路由器的类型吗? A9000吗?  详情 回复 发表于 2024-8-27 15:21
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-27 15:21 | 显示全部楼层
细佬成v 发表于 2024-8-18 23:20
感谢分享,但是用不了
不知道哪里的问题

--model 37是你的路由器的类型吗?

A9000吗?
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-27 15:22 | 显示全部楼层
本帖最后由 noah_bentusi 于 2024-8-27 15:30 编辑

现在是Model mismatch和 model型号不匹配。

现在从bin读取出来的型号代码是38.  Ax9000应该是 37才对。

只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-27 15:41 | 显示全部楼层
细佬成v 发表于 2024-8-18 23:20
感谢分享,但是用不了
不知道哪里的问题

你解压原版固件时,看一眼日志。我的代码出输出固件文件头。里面有model的值.
打包固件时,也会有日志,输出打包后的文件头,里面也有model值。

你看一下,两个值是否一致。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-27 15:42 | 显示全部楼层
细佬成v 发表于 2024-8-18 23:20
感谢分享,但是用不了
不知道哪里的问题

现在是Model mismatch和 model型号不匹配。

现在从bin读取出来的型号代码是38.  Ax9000应该是 37才对。

你解压原版固件时,看一眼日志。我的代码出输出固件文件头。里面有model的值.
打包固件时,也会有日志,输出打包后的文件头,里面也有model值。

你看一下,两个值是否一致。


实在比对不上的话。你把你打包好的 测试固件 发给我。 我分析一下。

点评

已经弄好了,我把image.mjs里的this.model || 删除掉就可以了 下面是删不删的区别 0025换算10进制就是37 3733换算10进制就是14131 [attachimg]702969[/attachimg]  详情 回复 发表于 2024-8-27 17:16
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-8-27 17:16 | 显示全部楼层
noah_bentusi 发表于 2024-8-27 15:42
现在是Model mismatch和 model型号不匹配。

现在从bin读取出来的型号代码是38.  Ax9000应该是 37才对。

已经弄好了,我把image.mjs里的this.model || 删除掉就可以了
下面是删不删的区别
0025换算10进制就是37
3733换算10进制就是14131


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

嗯。是代码有问题。作为参数传入的类型是字符串类型。于是,就当成字符串"37"写入文件了. 应该是Number(this.mode ||37)就对了.  详情 回复 发表于 2024-8-27 17:33
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

 楼主| 发表于 2024-8-27 17:33 | 显示全部楼层
本帖最后由 noah_bentusi 于 2024-8-27 17:37 编辑
细佬成v 发表于 2024-8-27 17:16
已经弄好了,我把image.mjs里的this.model || 删除掉就可以了
下面是删不删的区别
0025换算10进制就是37

嗯。是代码有问题。作为参数传入的类型是字符串类型。于是,就当成字符串"37"写入文件了.
应该是Number(this.mode ||37)就对了.

打个补丁。  将附件中的main.mjs替换mkxqimage下的main.mjs文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-9-20 13:31 | 显示全部楼层
大佬,我想问一下,能否在这些文件里面找到风扇转动启动温度的设置呀?我希望能改低一点让它转起来降温,我感觉温度再高都没见AX9000里的风扇转动过,不怕噪音,就想让它转起来。

点评

我也是好奇这个问题。 我都想自己加个风扇了  详情 回复 发表于 2024-9-28 23:58
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

发表于 2024-9-28 23:58 | 显示全部楼层
膜拜,赞,谢谢分享。
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /2 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2026-8-24 02:10

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 电话:13506125623

快速回复 返回顶部 返回列表