产品的datasheet是什么(论datasheet的重要性)

原创:合天智汇

0x01前言

玩IoT安全的小伙伴必不可少的一项技能就是查datasheet,配合IDA等调试器的分析,本文以STM32F405BootLoader为例,简单的介绍了相关的分析流程。

0x02准备工作

分析STM32F405的BootLoader,需要datasheet,stm32的datasheet通过搜索引擎就可以轻松找到。

这是地址:

https://www.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf

在datasheet中可以看到如下描述

产品的datasheet是什么(论datasheet的重要性)(1)

说BootLoader位于systemmemory。那么systemmemory在哪呢

产品的datasheet是什么(论datasheet的重要性)(2)

从上图可以知道systemmemory在0x1fff0000

所以,我们把0x1fff000到0x1fff77ff的内存里的数据都dump到stm32f405.bin中,然后可以做些检查了。

比如使用strings

产品的datasheet是什么(论datasheet的重要性)(3)

输出的很多字符串都没有意义,或许可以试试其他编码

在strings手册可以看到

产品的datasheet是什么(论datasheet的重要性)(4)

所以使用-el再次运行,这次得到的结果就一目了然了

产品的datasheet是什么(论datasheet的重要性)(5)

我们还可以检查代码是为哪种架构编译的,以及是大端序还是小端序等,可以使用binwalk检查。

产品的datasheet是什么(论datasheet的重要性)(6)

从结果中可以看到,从offset0开始,引擎可以将字段读取为有效的小端Thumb指令,至少有1079个有效的指令。有了这些信息后我们接下来就可以通过IDA分析了。

0x03 IDA一把梭

打开IDA,可以看到如下窗口,我们需要设置如下

产品的datasheet是什么(论datasheet的重要性)(7)

如果想只使用Thumb,而不是ARM的话,可以点击processoroption-》ARMspecific options

产品的datasheet是什么(论datasheet的重要性)(8)

点击上图的红框

产品的datasheet是什么(论datasheet的重要性)(9)

在上图窗口中将ARMinstructions设置为no。ThumbInstruction还是默认。一路点击ok

然后IDA再次弹窗,这次要求我们设置memory

产品的datasheet是什么(论datasheet的重要性)(10)

我们已经知道BootLoader的地址是从0x1fff000开始的。我们我们在ROMstart address输入该值。在Loadingaddress也同样输入。

点击ok

然后会有小窗提示我们可以使用alt G在ARM和Thumb指令集之间切换

二进制文件被加载后,点击一个地址,然后Alt G,然后就会跳出如下窗口

产品的datasheet是什么(论datasheet的重要性)(11)

Value0x1意味着在0x1fff0000后的代码会被作为Thumb来处理。其实这是反应ARM处理器的状态寄存器中的T标志位,如果T为1则表示正在执行Thumb,T为0表示正在执行ARM

当IDA出现下面的提示时

产品的datasheet是什么(论datasheet的重要性)(12)

我们就需要手动找entrypoint了。一般通过查看中断向量表来查找。

我们只需要知道表中的哪个条目是Reset向量,因为Reset向量是我们的入口点。Reset向量是CPU将开始执行代码的地址。

STM32F405是Cortex-M4内核,所以查找Cortex-M4的向量表。

在Cortex-M4的用户手册中可以看到

产品的datasheet是什么(论datasheet的重要性)(13)

产品的datasheet是什么(论datasheet的重要性)(14)

在上表中,我们可以知道:在偏移0x0出的指针是初始栈指针的位置,在0x4是Reset向量,在0x8是NMI,NMI即Non-MaskableInterrupt,不可屏蔽中断。Reset是处理器启动时开始执行代码的地址。

在IDA中,我们可以将0x0,0x4,0x8等处的数据定义为“doublewords”(32位宽)。在0x1fff0000右键,选中doubleword即可

产品的datasheet是什么(论datasheet的重要性)(15)

对0x4,0x8进行同样的操作,然后对应前面给出的表格添加注释

产品的datasheet是什么(论datasheet的重要性)(16)

0x0偏移处的初始堆栈指针值指向我们SRAM的一块memory,所以这是有意义的。

0x4偏移处的Reset向量0x1FFF3DA1,也有自己的意义,选中就右键,选择jumpto operand

产品的datasheet是什么(论datasheet的重要性)(17)

前面提到的Cortex-M4手册中已经说明,Restet的最低有效位增加了1,因此,实际的Reset向量是 Reset向量-1

产品的datasheet是什么(论datasheet的重要性)(18)

熟悉IDA的师傅们一看IDA顶部的颜色是完全的灰黄色,这就说明到现在为止文件中还没有任何东西被定义

我们在Reset向量-1的位置单击,按下C,IDA就开始反汇编了

产品的datasheet是什么(论datasheet的重要性)(19)

在上图中可以IDA顶部有些蓝色了,说明已经定义了很多子程序。针对向量表中其他的指针继续这么操作,可以得到进一步的结果

产品的datasheet是什么(论datasheet的重要性)(20)

然后就可以开始研究固件内部复杂的工作机理了

产品的datasheet是什么(论datasheet的重要性)(21)

在上图中,我们看到0x40023c04加载到r0中,然后值0x45670123和0xCDEF89AB依次写入0x40023C04的memory,红色底色显示的地址是将要访问的memory,其尚未映射到IDA文件中。也就是说,目前IDA文件中映射的0x40023c04没有memory。我们可以在STM32F4的datasheet中查找它的用途。

如下图所示,可以看到0x40023c04指的是Flash接口寄存器内存段中的某个地址。

产品的datasheet是什么(论datasheet的重要性)(22)

如下图所示,还能知道:从0x40023c00基址偏移0x4是Flashkey regiter

产品的datasheet是什么(论datasheet的重要性)(23)

第二个红框中是两个key值,它们是后续解锁flashcontrol register的关键。

0x04

本文通过strings,binwalk等工具进行准备工作,然后通过IDA分析IoT固件,并找到了后续针对解锁flashcontrolregister工作的两个关键key。这一切工作都离不开datasheet,文末还是要强调datasheet的重要性,对了,datasheet千千万,一定要对号入座,看准型号再找datasheet,而且datasheet基本没有通用性可言,切记切记~

另提一下可以得到datasheet的途径:

  1. Google
  2. 去芯片制造商的官网
  3. Yandex.ru

产品的datasheet是什么(论datasheet的重要性)(24)

Emm,没错,是俄语的,相当于战斗民族的百度

在youtube上看iot安全的视频时,俄语出现的评率远大于英语

4. 淘宝。淘宝上很多芯片都有卖,问问店家,一般都会给数据手册。在此感谢马云爸爸,这是我们安全研究人员的福报~

5. 其他途径,包括去细分领域的研究论坛,读源码等等,反正我碰到这种情况基本就放弃了Orz

0x05

参考:

  1. https://www.pvsm.ru/stm32/163608
  2. http://www.linfo.org/strings.html
  3. https://www.pentestpartners.com/security-blog/
  4. 《idapro权威指南》

相关操作学习

IDA教程系列:学习IDA的使用方法和对程序分析的相关技巧。点击http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182014111317165000001

开始操作!

产品的datasheet是什么(论datasheet的重要性)(25)

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关,本文为合天原创,如需转载,请注明出处!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页