前言
飞思卡尔的MC9S12系列是一款非常经典的16位单片机,主要用于汽车电子,目前可能很少使用了,不过在一些需要考虑成本的件上依然使用。相比于32位单片机,其分页机制给芯片开发带来很多不便(特别是对于bootloader这种需要操作Flash的开发)。本文章是对汽车一般ECU的一个逆向分析过程,主要思路是破解ECU BootLoader,结合UDSonCAN实现固件的任意下载。
目标:
ECU Flash区域分布
FlashDriver提取
跳转地址(程序偏移地址)
中断向量偏移地址
环境&工具
S12内核作为一个专用内核,很少有工具可以调试,不过飞思卡尔提供了开发工具,而且可以通过调试口直接进行内部flash的动态调试!
PE 专用的芯片调试工具
CW1.0 飞思卡尔提供的IDE
准备
对于一个固件进行逆向,首先需要了解这个固件的体系结构。对于汽车ECU,根据功能一般分为三个区域:
BootLoader:用于启动和下载应用程序
Application:ECU中的应用程序
Data:存储一些标定数据等
本次主要针对boot进行分析
MC9S12体系结构
1.启动流程
(可以利用抢刷模式进入刷写模式)
把Flash驱动读出来