关闭
搜索
搜索
本版
帖子
用户
热搜:
程序员
简洁模式
高级模式
用户组: 游客
消息
提醒
新听众
我关注的
帖子
道具
勋章
任务
设置
退出
请
登录
后使用快捷导航
没有帐号?
立即注册
设为首页
收藏本站
开启辅助访问
切换到窄版
登录
or
立即注册
快捷导航
搜索
首页
论坛
BBS
MCU单片机技术
程序员交流
STM32逆向--固件Dump教程
[复制链接]
作者:
明天过后by
版块:
›
MCU单片机技术
›
stm
发布时间:
2020-8-9 04:22:59
2744
0
返回列表
明天过后by
当前离线
注册会员
注册会员, 积分 121, 距离下一级还需 79 积分
注册会员
注册会员, 积分 121, 距离下一级还需 79 积分
积分
121
发消息
楼主
电梯直达
明天过后by
发表于 2020-8-9 04:22:59
|
只看该作者
|
倒序浏览
|
阅读模式
背景
终于难得闲暇和久违的激情,赶紧动手,这次也是初步的体验,所以目的就是简单的 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
原创
转载请注明来自看雪社区
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
收藏
0
相关帖子
•
开源之Ubuntu:两种方法在Ubuntu20.04里安装Qt5
•
【Linux编程】Makefile的工作流程!
•
Cpufetch:一款功能强大的CPU架构信息爬取工具
•
大多数程序员接触过的技术_负载均衡,但大多数都不知其核心原理
•
产业缺货背景下,STM32峰会都说了什么?
•
Xmanager使用教程:如何在Linux系统上安装Xterm应用
•
开源项目EasyDarwin编译:Linux系统下编译运行最新EasyDarwin的步骤介绍
•
硬核观察|Python之父对Rust、Go、Julia和TypeScript的看法
•
干货|手把手带你搞定4大容器网络问题
•
对话胡伟武:和国产CPU一起突围的20年
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
表情
@朋友
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表