逆向工程师STM32L151的固件

逆向工程 艾达 固件 入口点
2021-06-26 00:00:34

我有通过 JTAG 提取的 STM32L151 固件,但在 IDA 中找不到起点。我尝试了两种方法:

1)我开始IDA,拖二进制到工作区中,选择ARM小端的处理器类型,单击确定,拆卸出现内存组织窗口,相关信息进入发现这里48页上,单击确定,窗口弹出说“IDA 无法识别入口点...”,在工作区中我看到“RAM:08000000 DCB [some hex number]”

2)使用我的arm工具链的objcopy将二进制转为elf,使用“readelf -h [我的二进制文件]”找到入口点,得到这个入口点为0xff810000的输出,将elf拖入IDA的工作区,选择ARM Little -endian 处理器在处理器类型下,单击确定,工作区显示看起来像“.data:0000002C [用逗号分隔的几个十六进制值]”的行

如果我尝试跳转到入口点地址(readelf 的 0xff810000),我会遇到 JumpAsk 失败。如何找到我的起点以便我可以开始阅读反汇编的 ARM 汇编代码?

2个回答

您链接的 PDF 中

3.3.4 启动模式

启动时,引导引脚用于选择三个引导选项之一:

  • 从闪存启动
  • 从系统内存启动
  • 从嵌入式 RAM 启动

引导加载程序位于系统内存中。它用于通过使用 USART1 或 USART2 重新编程 Flash 存储器。有关详细信息,请参阅 STM32™ 微控制器系统存储器引导模式 AN2606。

如果我们搜索 AN2606,我们会找到STM32 微控制器系统内存引导模式的文档,在下表中表明引导加载程序从内存位置开始0x1FF00FFE

此外,每个芯片的引导加载程序配置表指定了引导加载程序固件的地址。例如,对于 STM32L01xxx/02xxx 芯片,第 174 页指定引导加载程序的固件是从地址 开始的 4 KB 块0x1FF00000

嵌入式引导加载程序

从地址 0x08000004(0x08000000 处是堆栈指针地址)获取 4 字节数据,应该有您的重置处理程序的地址。即使内部引导加载程序将启动,最后它也会跳转到该地址处的重置处理程序。