小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5

news2025/1/31 15:44:57

闲鱼上收了一台CR6606和一台CR6609, 一直没时间研究, 趁春节假期把这两个都刷成 OpenWRT

配置说明

  • CPU: MT7621AT,双核880MHz
  • 内存: NT5CC128M16JR-EKI 或 M15T2G16128A, 256MB
  • 闪存: F59L1G81MB, 128MB
  • 无线基带芯片(BB): T7905DAN
  • 无线射频芯片(RF): MT7975DN
  • 无外置FEM芯片,使用MT7975DN内置PA和LNA

配置和R3G相比是很像的, 区别就是升级了无线基带和射频芯片, 支持 WiFi6 支持 mesh. 但是去掉了USB口.

MT7905DAN + MT7975DN 组成了 MT7915D, 2.4G和5G均支持 2x2 MIMO, DBDC(双频并发), 2.4G最高速率574Mbps,5G最高速率1201Mbps. MT7975DN+MT7905DAN的发热量比 MT7603 + MT7612 要大一些, 因此功率也更大, 散热片比R3G更大.

相关连接

相关链接

  • CR6609 拆机内部展示 https://www.acwifi.net/13821.html
  • CR6606 拆机内部展示 https://www.acwifi.net/18380.html
  • 通过OpenWRT路由器添加 lua脚本开启SSH https://www.luyouwang.com/7115.html
    这种方法需要正好是兼容这种lua脚本的 OpenWRT 才行, 在OpenWRT 23.05.5 上无法使用
  • 通过电脑运行python脚本启动http服务开启SSH https://haoyu.love/blog1389.html
    这种方法比前一种好, 因为对无线路由器没要求, 而且从电脑启动一个http服务很简单
  • 通过TTL开启SSH https://www.bilibili.com/opus/870238271997739025
  • SSH密码计算工具 https://blog.csdn.net/zhoujiazhao/article/details/102578244
  • SSH密码计算工具 http://mi.avue.cn/

OpenWRT 下载

https://firmware-selector.openwrt.org/
在上面搜对应的型号, 例如 Xiaomi Mi Router CR6609

Breed下载

https://breed.hackpascal.net/

拉到底下, 在 r1338 [2021-12-16]/ 目录下, 搜 r3g.

CR6606 CR6608 CR6609 用的都是和小米 R3G 一样的 breed, 这个版本可以用于刷入 OpenWRT 上下载的固件

最新的版本是 r1416 [2022-07-24] (git-46ae2a1), 但是这个版本不能直接支持从 OpenWRT 下载的固件, 原因可以看 这里, 所以只能用旧一点的 r1338 版本

带SSH的降级固件

6606 1.0.103 链接: https://pan.baidu.com/s/1kn68F2M019rHB7PWqRYnCA 提取码: 9c92

刷机过程

CR660x 这一系列的型号属于小米给运营商的定制版, 在小米路由的官网上是不存在的, 所以也就不可能通过官方下载"开发版ROM"开启SSH烧录第三方系统. 开启SSH的方式主要有 TTL 和 getToken 漏洞两种方式

通过TTL获取SSH权限

通过TTL开启SSH相对简单, 不需要复杂设置, 如果有TTL2USB模块优先用这种方法, 但是不是所有设备都能用

有一台CR6609 电信版的版本是"系统版本: 1.0.41 稳定版", 不需要降级直接用TTL方法就可以进SSH, root口令和admin密码一样, 在背面的标签上. 而另一台 CR6606, 版本是"系统版本: 1.0.134 稳定版", 这个版本在TTL下没有命令行输入功能, 需要降级到 1.0.103 通过辅助路由器的方式获取SSH权限.

如果不想拆机的话, 背面把靠近wan口天线位置, 用水口钳剪掉一两根塑料打开一个口子, 方便刷机探针伸进去连里面的TTL口. 探针要用2mm间距的. 从网口那一侧往外4个焊盘分别是 VCC, RX, GND, TX, 如果不确定可以用万用表测一下, VCC的电压是3.3, GND是0, 其它两个都是3.2左右.

用探针接到TTL上, 只需要接RX, GND, TX三根线, 分别对应TTL的 TX, GND, RX, 码率 115200, 要在上电之后再连, 否则路由器不启动. 在日志输出结束后, 回车可以看到命令行提示符.

在电脑的串口终端上顺序执行这4个命令

nvram set ssh_en=1
nvram commit
sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear
/etc/init.d/dropbear start

之后电脑和路由器之间连上网线, 就可以用ssh访问了.

通过小米路由的getToken漏洞开启SSH

这种方式相对复杂, 有一台 CR6606 通过 TTL 访问只有日志输入没法输入, 所以不得不用这种方式. 这种方式需要有电脑和另一台路由器配合

  1. 辅助路由器的LAN 关闭DHCP, IP设置为 169.254.31.5 (除了 169.254.31.1, 169.254.31.2 以外的任意一个IP都行), 因为31.1是电脑用的要提供链接地址, 31.2是待破解的CR660x用的默认地址.
  2. 电脑的LAN IP设置为固定IP 169.254.31.1 用于启动http服务为目标CR660x路由器提供破解命令, 运行python脚本(内容附后), 命令sudo python server.py
  3. 如果电脑是Ubuntu 记得把80端口防火墙打开, 命令是 udo ufw allow 80/tcp, 查看实际的设置sudo ufw status,
  4. 电脑用网线连上辅助路由器的LAN口, 这时候从辅助路由器应该要能访问到 http://169.254.31.1 看到正确的输出, 如果没有输出则需要检查python服务是否启动, 端口是否生效, 防火墙是否打开
  5. 辅助路由器的2.4G WIFI 设置一个简单点的名称和密码, 方便下面输入

注意此时的连接状态是, 辅助路由器的LAN口连着电脑的LAN口, 其它没有任何连接, 后面也不需要动

下面是CR660x上的操作

  1. 首先要降级到一个可以开启SSH的版本, CR6606降级到 1.0.103
  2. 启动后, 从电脑用WIFI连接, 连接上进入管理后台后, 从链接地址中拿到 stok 字符串值
  3. 使用链接让CR660x连上辅助路由器的WIFI, 链接: http://[CR660x地址]/cgi-bin/luci/;stok=[刚才拿到的stok]/api/misystem/extendwifi_connect?ssid=[辅助路由器WIFI的SSID]&password=[辅助路由器的WIFI口令]
    如果操作正确, 这里会响应{"msg":"connect succces!","code":0}, 同时从电脑可以ping通 169.254.31.2 这时候说明可以从CR660x访问到你的电脑了, 如果ping不通说明前面操作有问题, 需要检查
  4. 使用链接让CR660x执行伪造的getToken指令打开, 链接: http://[CR660x地址]/cgi-bin/luci/;stok=[刚才拿到的stok]/api/xqsystem/oneclick_get_remote_token?username=xxx&password=xxx&nonce=xxx 后面的三个xxx不需要动
    如果操作正确, 这里会响应{"token":"; nvram set ssh_en=1; nvram commit; sed -i 's/channel=.*/channel=\u0022debug\u0022/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;","code":0}, 此时CR660X上的ssh就已经打开了

从电脑可以ssh连接CR660X, 口令在 http://mi.avue.cn/ 上通过序列号计算可以得到. 登入SSH后就可以写入breed

附: python脚本, 因为请求可能是 GET 也可能是 POST, 所以两种method都要

from http.server import BaseHTTPRequestHandler, HTTPServer
import json


class SimpleServer(BaseHTTPRequestHandler):
    def do_GET(self):
        print("It comes!")
        data = {
            "code": 0,
            "token": "; nvram set ssh_en=1; nvram commit; sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;"
        }
        self.send_response(200)
        self.end_headers()
        self.wfile.write(json.dumps(data).encode())
        
    def do_POST(self):
        print("It comes!")
        data = {
            "code": 0,
            "token": "; nvram set ssh_en=1; nvram commit; sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;"
        }
        self.send_response(200)
        self.end_headers()
        self.wfile.write(json.dumps(data).encode())

server_address = ('0.0.0.0', 80)
httpd = HTTPServer(server_address, SimpleServer)
httpd.serve_forever()

写入 breed

能ssh访问后, 从电脑上通过scp将 breed 上传到路由器

scp breed-mt7621-xiaomi-r3g.bin root@192.168.2.1:/tmp/

然后在路由器的ssh里面, 使用mtd命令写入

mtd write breed-mt7621-xiaomi-r3g.bin Bootloader

写入成功后, 关闭电源, 用针顶住reset孔, 然后上电, 待两个灯快速闪烁时就可以松开顶针, 此时就会启动进入Breed系统.

连接任意LAN口到电脑, 电脑会获取到 192.168.1.x 网段的地址, 此时访问 http://192.168.1.1 就能访问 breed 界面

在"小米 R3G Bdata" 界面可以看到当前路由器的型号和配置信息.

之后如果已经刷入了 Breed, 可以在 Breed 界面上用写入 Bootloader 的方式升级或降级成其它版本的 Breed.

写入 OpenWRT

  1. 在 Breed “固件更新"界面上, 选择闪存布局为"小米路由器 3G 固件 1”, 在固件栏, 选择从 OpenWRT 下载的 kernel.bin 包写入. 待其重启, 这一步写入后, 路由器上就有基础的OpenWRT系统, 但是文件系统还没初始化, 做任何设置都不会保存.
  2. 重启后在电脑获得IP后(默认是192.168.1.1), 访问 http://192.168.1.1 可以进入 OpenWRT 界面(口令为空), 在 OpenWRT 界面上会提示仅有基本文件系统需要升级System running in recovery (initramfs) mode., 到升级界面, 选择结尾为 sysupgrade.bin 的固件升级, 重启后就升级完成了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2286976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门

前言 在分布式系统中,雪崩效应(Avalanche Effect)是一种常见的故障现象,通常发生在系统中某个组件出现故障时,导致其他组件级联失败,最终引发整个系统的崩溃。为了有效应对雪崩效应,服务保护方…

大数据相关职位介绍之一(数据分析,数据开发,数据产品经理,数据运营)

大数据相关职位介绍之一 随着大数据、人工智能(AI)和机器学习的快速发展,数据分析与管理已经成为各行各业的重要组成部分。从互联网公司到传统行业的数字转型,数据相关职位在中国日益成为推动企业创新和提升竞争力的关键力量。以…

无人机红外热成像:应急消防的“透视眼”

无人机红外热成像:应急消防的“透视眼” 亲爱的小伙伴们,每年一到夏天,应急消防的战士们就像上紧了发条的闹钟,时刻准备应对各种灾害。炎热天气让火灾隐患“蹭蹭”往上涨,南北各地还有防洪救灾、台风、泥石流等灾害轮…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

AI在自动化测试中的伦理挑战

在软件测试领域,人工智能(AI)已经不再是遥不可及的未来技术,而是正在深刻影响着测试过程的现实力量。尤其是在自动化测试领域,AI通过加速测试脚本生成、自动化缺陷检测、测试数据生成等功能,极大提升了测试…

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码) 目录 手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)Stable Diffusion 原理图Stable Diffusion的原理解释Stable Diffusion 和Di…

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 补环境逆向 部分补环境 …

HTML一般标签和自闭合标签介绍

在HTML中,标签用于定义网页内容的结构和样式。标签通常分为两类:一般标签(也称为成对标签或开放闭合标签)和自闭合标签(也称为空标签或自结束标签)。 以下是这两类标签的详细说明: 一、一般标…

Eureka 服务注册和服务发现的使用

1. 父子工程的搭建 首先创建一个 Maven 项目&#xff0c;删除 src &#xff0c;只保留 pom.xml 然后来进行 pom.xml 的相关配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xs…

白嫖DeepSeek:一分钟完成本地部署AI

1. 必备软件 LM-Studio 大模型客户端DeepSeek-R1 模型文件 LM-Studio 是一个支持众多流行模型的AI客户端&#xff0c;DeepSeek是最新流行的堪比GPT-o1的开源AI大模型。 2. 下载软件和模型文件 2.1 下载LM-Studio 官方网址&#xff1a;https://lmstudio.ai 打开官网&#x…

《Origin画百图》之同心环图

《Origin画百图》第四集——同心环图 入门操作可查看合集中的《30秒&#xff0c;带你入门Origin》 具体操作&#xff1a; 1.数据准备&#xff1a;需要X和Y两列数据 2. 选择菜单 绘图 > 条形图&#xff0c;饼图&#xff0c;面积图: 同心圆弧图 3. 这是绘制的基础图形&…

蓝牙技术在物联网中的应用有哪些

蓝牙技术凭借低功耗、低成本和易于部署的特性&#xff0c;在物联网领域广泛应用&#xff0c;推动了智能家居、工业、医疗、农业等多领域发展。 智能家居&#xff1a;在智能家居系统里&#xff0c;蓝牙技术连接各类设备&#xff0c;像智能门锁、智能灯泡、智能插座、智能窗帘等。…

简易计算器(c++ 实现)

前言 本文将用 c 实现一个终端计算器&#xff1a; 能进行加减乘除、取余乘方运算读取命令行输入&#xff0c;输出计算结果当输入表达式存在语法错误时&#xff0c;报告错误&#xff0c;但程序应能继续运行当输出 ‘q’ 时&#xff0c;退出计算器 【简单演示】 【源码位置】…

自动化运维的未来:从脚本到AIOps的演进

点击进入IT管理资料库 一、自动化运维的起源&#xff1a;脚本时代 &#xff08;一&#xff09;脚本在运维中的应用场景 在自动化运维的发展历程中&#xff0c;脚本扮演着至关重要的角色&#xff0c;它作为最初的操作入口&#xff0c;广泛应用于诸多日常运维工作场景里。 在系统…

线程池以及在QT中的接口使用

文章目录 前言线程池架构组成**一、任务队列&#xff08;Task Queue&#xff09;****二、工作线程组&#xff08;Worker Threads&#xff09;****三、管理者线程&#xff08;Manager Thread&#xff09;** 系统协作流程图解 一、QRunnable二、QThreadPool三、线程池的应用场景W…

联想拯救者R720笔记本外接显示屏方法,显示屏是2K屏27英寸

晚上23点10分前下单&#xff0c;第二天上午显示屏送到&#xff0c;检查外包装没拆封过。这个屏幕左下方有几个按键&#xff0c;按一按就开屏幕、按一按就关闭屏幕&#xff0c;按一按方便节省时间&#xff0c;也支持阅读等模式。 显示屏是 &#xff1a;AOC 27英寸 2K高清 100Hz…

C++ deque(1)

1.deque介绍 deque的扩容不像vector那样麻烦 直接新开一个buffer 不用重新开空间再把数据全部移过去 deque本质上是一个指针数组和vector<vector>不一样&#xff0c;vector<vector>本质上是一个vector对象数组&#xff01;并且vector<vector>的buffer是不一…

Brightness Controller-源码记录

Brightness Controller 亮度控制 一、概述二、ddcutil 与 xrandr1. ddcutil2. xrandr 三、部分代码解析1. icons2. ui3. utilinit.py 一、概述 项目&#xff1a;https://github.com/SunStorm2018/Brightness.git 原理&#xff1a;Brightness Controlle 是我在 Ubuntu 发现上调…

Java8_StreamAPI

Stream 1.创建流 1.1 集合创建流 List<String> list List.of("a", "b", "c"); Stream<String> stream list.stream(); stream.forEach(System.out::println);1.2 数组创建流 String[] array {"a","b",&qu…

【架构面试】二、消息队列和MySQL和Redis

MQ MQ消息中间件 问题引出与MQ作用 常见面试问题&#xff1a;面试官常针对项目中使用MQ技术的候选人提问&#xff0c;如如何确保消息不丢失&#xff0c;该问题可考察候选人技术能力。MQ应用场景及作用&#xff1a;以京东系统下单扣减京豆为例&#xff0c;MQ用于交易服和京豆服…