stm32逆向与安全科普系列第一篇:bin文件逆向小试

芯片之家

共 1609字,需浏览 4分钟

 ·

2020-11-13 02:23

来源:阿莫论坛,作者:ilovepp
微信公众号:芯片之家(ID:chiphome-dy)

首先你要有一个bin文件(bin文件的获取方法不在此展开介绍,今后有机会可以专门开一个贴聊一聊)。本次实验用到的bin文件  stm32_xwrtos.bin.zip (6 KB) 是用ST官方CMSIS和外设库编译的跑在stm32f103c8t6上的bin文件,比较具有代表性。

烧录文件下载:

链接:https://pan.baidu.com/s/1YiMkyqbdPxGOI_vwGtOlJw  取码:yi56

工具准备:

安装开源跨平台逆向神器r2 https://github.com/radareorg/radare2 ,r2可运行在Windows、Linux、Mac等所有主流操作系统上(r2有多牛逼不在此展开介绍,今后有机会可以专门开一个贴聊一聊)。

实验步骤:
1)输入r2 -a arm -b 16 -m 0x08000000 stm32_xwrtos.bin 进入r2的控制台后,输入e asm.cpu=cortex。这一步是告诉r2以0x08000000为基址加载stm32_xwrtos.bin文件,并设置指令集为cortex系列的thumb。

2)输入aaaa,运行自动化分析。

3)输入pxw 268 @0x08000000 以小端四字节形式打印从0x08000000开始的268(268对应中断向量表大小)个字节,同时打开ST官方的启动文件startup_stm32f10x_md.s并找到.isr_vector段进行对照。

4)接着上一步,输入fs notes,创建并切换到一个名为notes(可以是任意其他名字)的符号记事本;按照f flag=address的形式,对照.isr_vector段,向符号记事本中录入感兴趣的符号地址对应关系。注意如果address是函数地址则需要减1(因为thumb指令的要求,具体原因此处不展开);最后输入af @flag形式的命令强制进行函数分析。

5) 输入pdf @Reset_Handler,对Reset_Handler函数进行反汇编

输入 VV 切换到流程图视图

通过阅读汇编代码,可以得到以下信息:
1.  data段的地址区间为0x20000000-0x20000028 bss段的地址区间为0x20000028-0x2000043C

2.  Reset_Handler用0x08002cbc开始的0x28字节初始化data段,用0填充bss段

3. 调用fcn.08001cc8函数
4. 调用fcn.08001734函数

6)输入pdf @fcn.08001cc8进行反汇编

发现对外设寄存器地址0x40021000的引用

通过查询数据手册,可判断fcn.08001cc8函数应为系统初始化化函数SystemInit(),它初始化了时钟

7)根据经验判断fcn.0800173函数即为main函数

本篇作为系列第一篇文章,主要作用是带大家熟悉和习惯r2的基本使用,以及对逆向有个感性认识。下一篇计划在逆向的基础上介绍stm32上的栈溢出漏洞的挖掘与利用。

再次感谢ilovepp兄分享的精彩文章!

推荐阅读

   重磅开源:带屏幕LCD脱机下载器离线下载器!

 【开源方案】2.4G遥控器,接收器全套详细设计资料

 【全开源功放】美国NS公司的经典芯片,LM3886!

 分享一个来自苏泊尔的超低成本隔离交流电压检测+掉电检测二合一电路

  软件神器TortoiseGit,晓宇姐姐教你使用图形化方式管理单片机程序版本!

请戳右下角,给我一点在看!

浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报