硬核HACK-从蓝牙音箱的固件提取和修改说起(2)

0x03 固件分析

  • 固件拖入到kali里面进行下分析:
  • image-20190113095318079

  • 没有分析出什么有效信息,看下字符串,用16进制编辑器搜索一下蓝牙音箱型号

  • image-20190113095523990

  • 好,找到型号了,理论上只需要把这里的名字改成新名字就可以了。问题1解决。修改时注意末尾添加0x00和0x33,保持原始数据的结束符。

  • 分析到这里时推测该蓝牙音箱为裸机系统,片外flash应该只是保存了配置信息,那么提示音的数据应该也在flash里。搜索Mp3文件头 ID3 字符串,找到了音频信息。
  • image-20190113100112553

  • 我想确定下这些都是什么提示音,直接给f900s.bin文件改后缀名为f900s.mp3,然后使用audicity打开就可以了。其实这里最开始遇到了一点麻烦,bin文件里除了ID3的音频数据,0x00000地址上有很长一段不知道什么数据,最开始我用导入原始数据的功能导入到audacity里,手动选择数据大小端和mp3编码方式,但是一直不成功。改后缀直接打开后就可以播放听一下了,这里还发现了一段不会在音响的任何工作状态里出现的歌声,哈哈彩蛋一个。

  • Jietu20190112-001915

  • 第二个问题关于提示音的解决方案,就是直接在16进制编辑器下,给所有ID3开头的音频数据全部清空写成0x00。理论上就可以了。

  • 修改完bin数据后,使用编程器写入新的固件,写入前可以先擦除一下。

0x04 验证

  • 写入新的固件以后,把Flash芯片焊接回PCB,给蓝牙音响上电,已经没有开机提示音”蓝牙模式”了,其他操作的提示音也没了。
  • 手机连接上去,名字也改过了。
  • image-20190113101538475
  • 至此,文章开头提出的两个问题都已解决。

0x05 遗留问题

  • bin文件的起始地址有一大段不知道做什么的数据:
  • image-20190113101913815
  • 一般的低成本SOC方案,主控采用8051内核的单片机。这里猜想可能会是一段程序代码?拖到IDA里面看看。
  • image-20190113102511213
  • 几个特殊的中断向量地址可以加载出来,包括定时器中断和外部中断,但是怎么会有816个function?一定是猜错了。这个不是8051的代码。
  • image-20190113102919531
  • 这个问题一直没有解决,如果有相关蓝牙音箱的开发人员看到这篇文章,见到过这个SOC的蓝牙芯片,望不吝赐教。我的邮箱 "enN6aGVyZUBnbWFpbC5jb20=".decode("base64")
  • SOC芯片如下
  • image-20190125120042504