开启辅助访问 切换到窄版

打印 上一主题 下一主题

STM32逆向--固件Dump教程

[复制链接]
作者:明天过后by 
版块:
MCU单片机技术 stm 发布时间:2020-8-9 04:22:59
27440
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景
终于难得闲暇和久违的激情,赶紧动手,这次也是初步的体验,所以目的就是简单的 dump 程序和基本反汇编。

工具集介绍
软件部分



  • OpenOCD

Open On-Chip Debugger,著名的开源硬件调试器。

支持多种的调试器,(St-link)(jlink) 之类的符合JTAG标准的。

支持多种 MPU 调试,只要是主流的都有(这次用到的 STM32F1x 默认有了配置文件)。

  • Arm-none-edbi-*

ARM 裸机使用的工具链 (注意是 none 不是 linux)。

这里主要提供调试的RunTime。

  • gdb

GDB,the GNU Project debugger 著名开源调试器 。

这里用于代替 OCD 的调试,毕竟还是专业许多 。

我们需要的功能虽然 OCD 就可以实现,但是使用 GDB 还是方便很多。
硬件部分

由于也是初步尝试,所以直接找了正点原子的战舰开发板(我们要使用的就是 JTAG 调试口,当然开发板已经接好了)。

  • 战舰F1开发板 * 1
采用的 STM32F1X 系列的 MPU 这个型号很重要,这个就决定了我们要dump的地址。这样才能找到flash 和sram 等。


  • Jlink * 1(当然国产寨版)
能用就行,这个就是淘宝货,简单暴力,久经沙场,人手一个,纵横江湖。
动手
该接的先都接上 (电源 jlink blah..)


运行OCD

openocd -f interface/jlink.cfg -f target/stm32f1x.cfg
#注意不要反了
这里的两个 f 是指定的配置文件,大众器件。所以自带的都有,要是没有的话就在上面给出的网址下载即可 (这个不是全路径,是相对与 ocd 的安装目录 )。

运行之后,效果如图 :
这样显示之后,说明调试器链接正常,且已经进入调试模式。
OCD命令

OCD在成功介入JTAG之后,会返回一个4444的tty控制台,我们直接 telnet上去。
telnet localhost 4444
#或者万能 NC 也可以
#nc -t localhost 4444
这里就会返回一个 OCD 的调试会话 。

现在已经控制CPU了(help一大堆,不再赘述) 。

由于我们是要对固件进行dump,所以只要已经运行,我们把内存和flash 的数据抓出来就好了。
halt
#执行halt语句 (CPU 暂停)
GDB Attach

实际上直接使用OCD 可以达到效果,不过使用GDB 辅助,使得操作容易方便(可以TAB)。
gdb #先运行GDB
(gdb) target remote localhost:3333

执行完后,DGB attach完成(现在已经拿到了 CPU 的shell 可以为所欲为了)。
DUMP(重要)

终于到了最为核心的一步,就是firmware的dump操作。

首先我们需要的最重要的东西,就是内存映射图。

这个就相当于我们的地图一样,告诉我们哪里有什么数据,哪里是什么东西。(这里就需要查看芯片手册)

(图挺大,截取需要部分)我们需要Dump的有:

  • Flash (装代码的你说呢)
  • SRAM (运行时候产生有趣的东西)
这样我们查看映射图可以得到信息:

  • flash的映射地址是 0x08000000 ~ 0x0807ffff (512KB)
  • sram的映射地址是 0x20000000 ~ 0x2000ffff (64K)
所以下面我们在gdb 中 把他们dump出来就好:
dump binary memory 32_sram.bin 0x200000000x2000ffff

dump binary memory 32_flash.bin 0x080000000x0807ffff上述命令就是以二进制形式 Dump 内存 和 flash 的数据出来:
查看文件,大小就是我们的存储空间 。

到这里,本次 DUMP 完毕。
后记
这里只是逆向的初步,分析才是关键。

得到 flash 和 sram 数据后,使用 IDA进行操作 (这才是逆向)。

本文由看雪论坛 林海n原创
转载请注明来自看雪社区

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表