共享一个通过STM32 bin文件进行代码反向分析的工具

共享一个通过STM32 bin文件进行代码反向分析的工具

转载:芯片屋来源| Amo论坛,作者|首先,您需要有一个bin文件(此处未介绍获取bin文件的方法,以后有机会打开一个特殊的帖子进行聊天)。

本实验中使用的bin文件stm32_xwrtos.bin.zip(6 KB)是使用ST官方CMSIS和外围设备库编译的bin文件,可在更具代表性的stm32f103c8t6上运行。

刻录文件下载工具的准备工作:安装开源跨平台反向工件r2:r2可以在所有主流操作系统(例如Windows,Linux,Mac等)上运行。

实验步骤:1)输入r2 -a arm -b 16 -m 0x08000000 stm32_xwrtos.bin进入r2的控制台后,输入e asm.cpu = cortex。

此步骤是告诉r2加载以0x08000000作为基地址的stm32_xwrtos.bin文件,并将指令集设置为cortex系列的拇指。

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部分以输入符号记事本。

符号和感兴趣的地址之间的对应关系。

请注意,如果地址是函数地址,则需要将其减去1(由于thumb指令的要求,此处不扩展具体原因);最后以af @flag的形式输入命令以强制进行功能分析。

5)输入pdf @Reset_Handler并反汇编Reset_Handler函数。

输入VV并切换到流程图视图。

通过阅读汇编代码,可以获得以下信息:1.数据段的地址范围为0x20000000-0x20000028 bss段的地址范围为0x20000028-0x2000043C2 Reset_Handler使用0x28字节(从0x08002cbc开始)初始化数据段,并且用0填充bss段。

3.调用fcn.08001cc8函数。

4.调用fcn.08001734函数。

6)输入pdf @ fcn.08001cc8进行反汇编,并发现外设寄存器地址0x40021000通过参考数据手册,可以判断fcn.08001cc8函数应该是系统初始化函数SystemInit(),该函数初始化时钟。

7)根据经验判断,fcn.0800173功能是主要功能。

本文的主要功能是使大家熟悉r2的基本用法,并对反向有一个感知上的理解。

稍后,我有机会向您介绍基于逆向工程在stm32上挖掘和利用堆栈溢出漏洞的情况。

再次感谢兄弟ilovepp分享的精彩文章! ------------ END ------------推荐阅读:C语言实现了面向对象的原理,程序员需要掌握几种排序算法才能在其中进行高级使用。

Embedded Studio ST-Link调试教程遵循微信公众号“ strongerHuang”,后台回复“ 1024”。

要查看更多内容,请回复“添加组”按照规定加入技术交流小组。

长按进入图片中的官方帐户以遵循免责声明:本文的内容经21ic授权后发布,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如有任何疑问,请与我们联系,谢谢!

深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询