一例MusicBox的固件简单分析,基于STM32芯片固件分析总结(待续)

从硬件到软件,制作一个高还原性,高保真的音乐盒子一直是我的兴趣之一。因此,我尝试在淘宝买一些音乐盒子做为设计参考,从双轨正负电压供电电路,电池充放电电路,stm32核心电路,到dac的解码电路,前极放大电路。到USB声卡,sdcard播放等功能。

最近发现某款音乐播放器的固件很有趣,因此,我在这简单记录一下分析过程,顺便总结一下从中学到的一些分析经验。

固件是通过SDcard更新的,商家发布新固件后,将固件放入SDcard后,芯片上的bootloader会检测并触发更新。

固件的部分内容如下:

bin-img

经过分析,固件使用了简单的压缩,一来减少固件体积,二是有校验机制。

通常,固件前一部分内容是,固件定义的栈顶指针以及芯片的中断向量表,均为4字节对齐。

栈顶指针通常是指向芯片的ram区域最后一个字节的下一个字节的地址。

中断向量表中第一个内容便是固件的start地址,用于重新初始化PC寄存器的内容。根据编译器的不同,通常会指向固件的尾部区域。

可能通过头部的一明显特征,对固件进行还原,经过恢复之后的固件头部如下:

raw_img

接下来是固件的起始地址猜测,

固件的大小在700k左右,恢复后的大小在1.1MB左右,如果0x08124839确实是pc的跳转地址的话,通过分析和测试,可以确定固件的起始地址在0x08030000。载入ida后,根据芯片手册上的memory map表配置好ram和rom区域,将固件载入到0x08030000后,跳转到起始地址,可以看到明显的入口特征。

注意:由于stm32f系列处理仅支持thumb2指令,因此,在ida载入处理器选项中,需要选择cortex-m系列,以及thumb2指令集并取消自动识别thumb段寄存器。通过Alt-G可快速切换T段寄存器的值。

ida

至此,可以根据情况进一步分析,实现一些mod功能。包括可能使用自定义的固件来反向提取bootloader,

甚至依赖现有硬件平台,编写自定义的固件功能。

(未完待续) (未完待续)

Comments