以前用家里闲置的笔记本玩过 lean 的软路由,但是需要电脑一直开着,不适合长期使用,所以我一直希望有一台真正可以刷入相关固件的路由器。相比网件、华硕等路由器,我简单的需求更适合 200 元左右的小米 AC2100。

如何刷机

现在的刷机途径大致有 2 个:

  1. 利用之前爆出的 CVE-2020-8597 漏洞开启 telnet 和 ssh 刷入 breed 或者 pb-boot,然后刷入想要的固件。
  2. 利用固件的 SSH 相关漏洞打开 SSH,然后刷入 breed 或者 pb-boot。

由于第一种方法需要较多的额外工具,我选择了第二种方法。

刷入的固件也可以选择 pandvas 或者 Openwrt,现在 Openwrt 已经官方支持了 AC2100,所以刷入相关系统也是方便很多的。

开启 ssh

  1. 电脑网口连接 Lan 口,浏览器打开 小米 AC2100 web 管理页面 ,简单设置后登录。

  2. 在登录后的页面 F12 打开网页后台,在控制台(Console)复制粘贴如下代码,Enter 执行。

function getSTOK() {
  let match = location.href.match(/;stok=(.*?)\//);
  if (!match) {
    return null;
  }
  return match[1];
}

function execute(stok, command) {
  command = encodeURIComponent(command);
  let path = `/cgi-bin/luci/;stok=${stok}/api/misystem/set_config_iotdev?bssid=SteelyWing&user_id=SteelyWing&ssid=-h%0A${command}%0A`;
  console.log(path);
  return fetch(new Request(location.origin + path));
}

function enableSSH() {
  stok = getSTOK();
  if (!stok) {
    console.error("stok not found in URL");
    return;
  }
  console.log(`stok = "${stok}"`);

  password = prompt("Input new SSH password");
  if (!password) {
    console.error("You must input password");
    return;
  }

  execute(
    stok,
    `
nvram set ssh_en=1
nvram commit
sed -i 's/channel=.*/channel=\\"debug\\"/g' /etc/init.d/dropbear
/etc/init.d/dropbear start
`
  )
    .then((response) => response.text())
    .then((text) => console.log(text));
  console.log("New SSH password: " + password);
  execute(stok, `echo -e "${password}\\n${password}" | passwd root`)
    .then((response) => response.text())
    .then((text) => console.log(text));
}

enableSSH();

在网页上会弹出设置 root 账户密码的弹窗,设置后关闭。

至此已经成功打开 SSH。

上传固件并刷入 Breed 并设置

  1. 在本机命令行通过 ssh 登录路由器系统,账户为 root,密码即刚刚设置的。192.168.31.1 是路由器的默认内网 ip 地址。
ssh root@192.168.31.1
  1. 将本机的 breed 固件传输到 /tmp 目录下,执行如下命令:
nvram set uart_en=1
nvram set bootdelay=5
nvram set flag_try_sys1_failed=1
nvram commit
mtd -r write [上传到tmp目录的固件地址] kernel1

如果路由器在 60 秒内重启则代表刷 BREED 成功(灯会从蓝变橘,最终变蓝进入系统)。成功后拔掉电源,按住 reset 同时接上电源等 10 秒即可。

  1. 最后,浏览器打开 breed web 管理页面,刷入 Breed 成功。

通过 Breed 刷入 Openwrt

  1. 进入 breed 后增加环境变量 xiaomi.r3g.bootfw,值为 2。
  2. 在固件项选择对应的底包,然后上传刷入,后面按照对应固件的提示操作即可

刷砖后恢复小米原厂系统

由于过程中随时存在刷砖的风险,所以去 官方下载页 可以下载使用对应的官方工具刷入官方的 rom 然后重头再来。

Reference

  1. 永久开启小米/红米 AC2100 TELNET 和 SSH,可升级、降级和恢复出厂
  2. AX3600/AX1800/AX5/AC2100 官方固件开启 SSH 方法
  3. AC2100 OpenWrt Guide
  4. 小米 红米【AC2100】一键刷 BREED【30 秒刷完】小白帅小伙专用 检查坏块 | 无需 Telnet
  5. breed 刷机红米 AC2100 小米 AC2100 原厂固件官方固
  6. 红米 AC2100 刷机及固件资源汇总附送 Lean 源码固件
  7. 红米/小米 AC2100 刷入 r3g breed 以及恢复官方 boot 详细教程
  8. [AC2100(RM2100)] lienol源码主分支 红米AC2100固件 openwrt21.02 ipv6+文件助手+去广告+简洁主题