抢救变砖的小爱音箱

前言

最近小伙伴把某块音箱给变砖了,因为一番骚操作把mtd分区直接dd了,导致无法启动,土豪的他选择又买了一个。我缺音箱,我想试试修复一下,修好了还能用,于是就开始了自己的一番折腾。本篇文章仅作为修复音箱的教程,特此声明。

情况分析

现在文件系统已经被破坏了,但是内核和uboot都还完好,因此我们可以尝试看看能否进入uboot中的shell,然后做些事情。那么问题就来了,我们要怎么进入uboot的shell呢,一般情况下,芯片都会有支持串口的引脚,串口简单方便调试,我们可以拆开音箱板子上找找串口。

板子上找串口

串口UART,异步收发,不需要时钟,最少仅需要3根线,GND, TX, RX。如果做得比较安全的话,一般在出厂的时候会把焊点或者引脚给抹去,但是据我所知,大部分的厂商貌似都不care这些,很大方的留了很多信息,这款音箱也是。很快在板子上找到了可爱的三个测试点在电路板的边缘

用万用表测一下可以很快确定一个点是GND,另外两个可以通过观察串口是否能够正常工作判断TX和RX。
在确定了串口引脚之后,还需要外接一个USB转串口的rs232芯片,就像这样的

连接好之后,可以在终端下输入命令ls /dev/tty*观察已经有串口ttyUSB1设备被识别

在linux下,可以通过串口工具minicom与串口进行通信。在使用minicom之前,需要配置串口名称和波特率,名称就是ttyUSB1,而波特率一般是115200.
通过执行sudo minicom -s进入配置串口名称和波特率的界面

除此之外,还需要修改Hardware Flow Control改为No,使得minicom允许输入。这样才能进行交互

uboot shell

很幸运,这款音箱的uboot shell没有被裁减,因此给了我们通过uboot修复分区的可能性。在重启的时候会有一段时间允许进入uboot shell中,这段时间一般都比较短,需要在重启的时候不断的按空格或者回车即可。界面如下图

在这个界面下是支持很多命令的,通过help查看

通过uboot给定的命令,我们就可以利用uboot给的shell实现将固件烧录到nand flash中

准备新固件

新的固件可以从新设备上提取,亦可以在网上下载,还可以通过抓包获取,获取的方法有很多。关键是我们要固件的格式进行分析,找到我们想要烧入到nand flash中的部分。我拿到的固件是通过OTA升级抓包拿到的,通过binwalk 可以看到包的基本结构如下

我们所需要的正是文件系统,0x380开始到0x1F5DED0,将这块内容dd下来就是包含了完整的文件系统。
我们只需要将这部分的固件发送给音箱即可。

nand flash烧写方法

确认固件烧写位置

在往nand flash中烧入固件之前,我们需要先确定nand flash是如何分区的,在启动日志中可以看到下图

可以看到有boot0 boot1 system0 system1分区,猜测有两套启动方式,一套是主要的,一套是升级或者出厂设置使用的,经过查看发现system1是空的,所以极有可能真正的文件系统是在system0分区的。
system0对应位置为0x2000000-0x4080000
但是起始位置是相同的,起始位置0x2000000很关键,这个是我们的目标位置

从串口接收文件系统部分的固件

  • 选择一块空的内存区域,我之前选的是0x5000000,有问题,后来选择的0x6000000,这个位置是试出来的,目的是接收system0分区
  • 使用kermit接收执行命令
    1
    loadb 0x6000000
    进入如下界面

    按快捷键CTRL+A S 进入发送协议选择界面

    选择kermit协议,并且选择要发送的文件,按空格键选中文件。
    发送文件的界面

    此时可以完备的将固件发送到内存中,地址为0x6000000
    由于此过程是通过串口发送,因此其速度比较慢,实测耗时1个小时

将内存中接收的system0写入nand flash

首先擦除system0分区,执行如下命令

1
nand erase.part system0

然后往system0分区中执行烧写工作,执行如下命令

1
nand write 0x6000000 0x2000000 0x2000000

写入过程很快,不用等待

完成烧写

至此已经完成文件系统的修复。经过重启,发现音箱又复活了~~

结语

本文介绍了在仅有串口的情况下如何利用uboot的shell完成对Nand flash的固件写入流程,虽然可能不同的设备细节上不尽相同,但是基本流程本文已经介绍的较为清晰,当然除了串口还有别的方式实现救砖的工作,比如USB启动或者JTAG等方式,这些方式速度较快,但是对硬件电路的逆向水平也更高,所以我最爱的还是串口。

版权声明

本文作者为colorlight,首发于安全客 https://www.anquanke.com/post/id/229320