首页
社区
课程
招聘
[原创] STM32 逆向 -- 固件Dump 教程
发表于: 2017-11-17 18:15 28642

[原创] STM32 逆向 -- 固件Dump 教程

2017-11-17 18:15
28642

终于难得闲暇和久违的激情 , 赶紧动手 , 这次也是初步的体验 , 所以目的就是简单的 dump 程序 , 和基本反汇编

OpenOCD
Open On-Chip Debugger 著名的开源硬件调试器
支持多种的 调试器 (St-link)(jlink) 之类的符合JTAG标准的
支持多种 MPU 调试 只要是主流的都有(这次用到的 STM32F1x 默认有了配置文件)

http://openocd.zylin.com/
这里附上配置文件下载地址可以选择不同的 mpu

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
(当然国产寨版) 


能用就行
这个就是淘宝货 , 简单暴力 , 久经沙场 , 人手一个 , 纵横江湖

这里的两个 f 是指定的配置文件, 大众器件 所以自带的都有, 要是没有的话就在上面给出的网址下载即可
(这个不是全路径 是相对与 ocd 的安装目录 )

运行之后 , 效果如图

这样显示之后 , 说明调试器链接正常 , 且已经进入调试模式

OCD在 成功 介入JTAG之后 会返回一个 4444 的 tty控制台 我们直接 telnet上去



这里就会返回一个 OCD 的调试会话
现在已经控制CPU了(help 一大堆 不再赘述)
由于我们是要对固件进行dump, 所以只要已经运行, 我们把内存, 和flash 的数据抓出来就好了

实际上直接使用OCD 可以达到效果, 不过使用GDB 辅助, 使得操作容易方便(可以TAB)



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

终于到了最为核心的一步,就是firmware的dump操作
首先我们需要的最重要的 的东西就是内存映射图
这个就相当于我们的 地图一样 告诉我们哪里有 什么数据 , 哪里是什么东西
(这里就需要查看芯片手册)
在手册的第四节 Memory Mapping中


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

这样我们查看映射图可以得到信息

所以下面我们在gdb 中 把他们dump出来就好

上述命令就是以二进制形式 Dump 内存 和 flash 的数据出来



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-11-8 18:18 被kanxue编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (25)
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
2
可以,赞一个~~~
2017-11-17 21:05
0
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
固件Dump出来的是hex还是bin?
2017-11-18 00:03
0
雪    币: 235
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
bxc 可以,赞一个~~~
谢谢围观~
2017-11-18 05:12
0
雪    币: 235
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
PYGame 固件Dump出来的是hex还是bin?
选择  binary  的dump  出来的是bin文件
其实  HEX  和  bin没啥差别
2017-11-18 05:13
0
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
大牛,  所有的芯片都能用类似的方法,  dump  吗? 
2017-11-18 11:01
0
雪    币: 235
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7



PYGame

大牛, 所有的芯片都能用类似的方法, dump 吗?
我只是小白....
这个的使用 针对于 有jtag 接口的
2017-11-18 11:20
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
关注一下,感谢分享
2017-11-21 08:34
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错!
2017-11-21 09:48
0
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
不错~~
2017-11-21 10:24
0
雪    币: 1319
活跃值: (1955)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
邪恶公司?学主角设备打补丁?
2017-11-21 14:04
0
雪    币: 2443
活跃值: (464)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
666学习学习~
2017-11-22 14:03
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
问个问题,固件上锁或者禁用调试模式了,这个方法也能行吗?
2017-11-22 17:40
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
设置了读保护,怎么dump?
2017-11-23 13:11
0
雪    币: 39
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
特别干兴趣,只是自己没这功力,希望大大多出几篇,在此谢过!!!!
2017-11-26 13:39
0
雪    币: 2361
活跃值: (324)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这都不是事,实际问题是怎么找到JTAG引脚才重要的,参见:JTAG  Pin  Finder,使用andruio来测试芯片引脚查找jtag端口。看国外测试是成功的,但自己实际测试有难度,芯片引脚太近,接线太难。
2017-11-26 19:41
0
雪    币: 204
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
PYGame 固件Dump出来的是hex还是bin?
bin吧。上面截图都说了。
2017-11-28 22:17
0
雪    币: 413
活跃值: (351)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
芯片security之后,你就读不出了。
2017-12-10 22:01
0
雪    币: 803
活跃值: (850)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
20
这个根本没用,芯片有读保护,FLASH上锁后根本读不出来,你连上调试器芯片就会把FLASH全部擦除。
其实也就是读个内存,JLINK官方驱动里面那个命令行里面输入:  savebin  /home/yjmwxwx/1.bin  0x20000000  0x5000
就读出内存了 
2017-12-22 10:07
0
雪    币: 1348
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
无视保护吗?不是特别懂。
2018-1-6 07:45
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
22
图片丢失了,从CSDN博客转了一份图过来。
最后于 2018-11-8 18:20 被kanxue编辑 ,原因:
2018-11-8 18:13
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
不设置保护的代码没有价值,有价值的都有保护
2018-11-10 19:56
0
雪    币: 199
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
没什么用,第一,jtag在实际项目中,基本都没有接,还有就是jtag在代码中是可以禁用的。
2018-11-12 01:33
0
雪    币: 13
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
mark 
2019-7-18 20:07
0
游客
登录 | 注册 方可回帖
返回
//