stm32 g代码_IOT安全——stm32从做题到复现

7e5bd475b445ed69bc793801b205a695.png

在最近的ctf比赛中,开始出现以stm32系列固件分析为代表的物联网安全类题目,由于这类问题涉及到嵌入式硬件、嵌入式系统等多方面的知识,未来出题、研究空间都非常广阔,这次就让我们借助题目一起来学习一下。由于考研失踪了很久,很多联系我的同学我也没能回复,希望大家原谅,之后一段时间我就正式回来啦。

啥是stm32?

STM32是一种功能强大的32位的单片机,它基于低功耗的ARM内核,由于它采取的Cortex的内核,性能比起传统的51单片机强了不知道多少倍,而且还提供了强大的外围设备,比如usb,这都是以往的单片机难以想象的。

除了性能、功能外,由于它模块化的理念,丰富的库,我们可以更多在软件层面开展工作,相对于51单片机庞大的电子电路知识来说,对我们这些计算机人友好不少。

当前,不管是工厂、自控设备、物联网终端等等,stm32所占的份额都在不断扩大,在安全领域,stm32也是越来越多出现在我们视野里,可以说,stm32成了物联网安全不得不碰的东西。

SCTF PassWordLock PLUS

先来看个实际的题目,它给了一个stm32f103c8t6的hex固件,描述是一个stm32连接了四个按钮,按照一定的顺序点击按钮就会输出flag。通过前一个SCTF PassWordLock可以得到按键的顺序,剩下的就需要我们自己分析了。

我会先用我们实际做题的思路来给大家分析这道题目,然后提出几个疑问,并在后续为大家解答。

我们可以用Frida或者IDA pro进行静态分析,因为Frida初始化工作较为简单,所以我们这里以IDA pro为例。首先我们需要设置处理器为ARM

3f1eda928adb4b5c1ed17f4d54ec2a46.png

接着还需要点击processor option设置ARM的相关参数,这里要根据对应的stm32的架构进行选择,没得商量,这里是stm32f103c8t6查阅资料后确定这里是armv7-m、thumb-2(后面我会提到stm32的命名方法)。

40d136a0bebe2b03d01824baaee2da2f.png

接下来ida会问你固件ram、rom、Loading address,前两项分别代表着ram、rom的起始地址,第三项则是装载地址,一般是和rom地址相同(在stm32中,程序、bootloader会映射到ROM位置)。这里开发者可以自行设置,但默认值如下所示。

fb98ce1bc2f66a32bd29ddde5d9d3f20.png

图中为stm32开发工具mdk,当我们对一个项目进行编译、烧写时,可以自行设定其rom、ram的相关值,不过一般都是使用默认值,特别的是其中的ram size,他和我们使用的stm32设备的内存有关,比如常见的64k内存(后面我们也会说如何判断内存大小),即0x10000。

到此为止ida已经成功载入了文件,但是没有识别出来任何代码,只有一片一片的DCB,这个命令的意思是分配一段内存单元,并对该内存单元初始化,这里我们就不免联想到stm32开发时,会有个startup的过程,其中有一部分就是开辟一片空间并将函数地址放入,构建向量表,我们打开对比一下

7f1ecb0d847daed6e8c0d5ca433eaade.png

这里是DCD,ida里是DCB,这两条指令的作用是一样的,只是数据长度不同罢了(stm32为32位机,自然应该是d的double word了),我们可以按d对数据长度进行转换,就可以得到DCD的代码,后面的即是各个函数的地址了,我们只需要一一对应即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值