首页
论坛
课程
招聘
[原创]stm32逆向JLINK OB的BOOT
2017-12-22 12:09 16355

[原创]stm32逆向JLINK OB的BOOT

2017-12-22 12:09
16355
我是农民种地的也学点逆向,种地的搞这个有点另类。 
先看看我做的JLINKOB,完全飞线做的,家里穷没钱买板子。
 
两个都是JLINKOB,STM32核心的ARM仿真器,用一个调试另一个,研究下他那个BOOT怎么工作的,然后自己写了一个代替原来那个BOOT的程序。





插上已经可以更新固件了,不过这个很功能简单,就是把原来固件CRC计算后的数据和更新缓存空间里面CRC计算后的数据比较,不一样就更新固件。高手别笑话啊,很简单的东西。

用GNU ARM汇编写的,比原来的小很多。




	 .thumb                 
         .syntax unified
.section .data
	.equ STACKINIT,         0x20005000
yjmwxwx: .ascii "jlink ob boot 2017-11-19 yjmwxwx"
.section .text
_xiangliangbiao:
	.word STACKINIT
	.word _start + 1
	.word _nmi_handler + 1
	.word _hard_fault  + 1
	.word _memory_fault + 1
	.word _bus_fault + 1
	.word _usage_fault + 1

_start:
	cpsid i
	sub sp, sp, # 0x5000
	ldr r0, = yjmwxwx
	str r0, [sp]
	add sp, sp, # 0x5000
	
	ldr r0, = 0xffffffff
	ldr r1, = 0x8009c00
	ldr r1, [r1]
	cmp r1, r0
	bne _crcjisuan
_daogujian:	
	ldr r0, = 0xe000ed08
	ldr r1, = 0x8004000
	str r1, [r0]
	add r1, r1, # 4
	ldr r1, [r1]
	cpsie i
	bx r1
_crcjisuan:
	ldr r0, = 0x8009c00
	ldr r1, = 0x5bfe
	mov r6, # 0
	movw r4, # 0x8408
	
_crcxunhuan:
	ldrb r5, [r0], # 1
	eor r6, r6, r5
	mov r2, # 8
_crcxunhuan1:
	mov r5, r6
	lsrs r6, r6, # 1
	tst r5, # 1
	it ne
	eorne r6, r6, r4
	
	subs r2, r2, # 1
	bne _crcxunhuan1
	
	subs r1, r1, # 1
	bne _crcxunhuan
	ldr r0, = 0x800f7fe
	ldr r1, [r0]
	cmp r6, r1
	bne _daogujian
					@ flsh解锁
	ldr r0, = 0x40022000
	ldr r1, = 0x45670123
	str r1, [r0, # 0x04]
	ldr r1, = 0xcdef89ab
	str r1, [r0, # 0x04]
					@擦除23页
	mov r5, # 23
	ldr r4, = 0x8004000
	movw r8, # 0x400
_flashmang:
	ldr r2, [r0, # 0x0c]
	lsls r2, r2, # 31
	bmi _flashmang
	mov r1, # 2
	str r1, [r0, # 0x10]
	str r4, [r0, # 0x14]
	mov r1, # 0x42
	str r1, [r0, # 0x10]
	add r4, r4, r8
	subs r5, # 1
	bne _flashmang
						@写FLASH
	ldr r8, = 0x8004000
	ldr r4, = 0x8009c00
	mov r5, # 0
	movw r6, # 0x1700
_flashmang1:
	ldr r2, [r0, # 0x0c]
	lsls r2, r2, # 31
	bmi _flashmang1
	mov r1, # 1
	str r1, [r0, # 0x10]
	ldrh r3, [r4, r5]
	strh r3, [r8, r5]
	add r5, r5, # 2
_flashmang2:
	ldr r2, [r0, # 0x0c]
	lsls r2, r2, # 31
	bmi _flashmang2
	ldrh r3, [r4, r5]
	strh r3, [r8, r5]
	add r5, r5, # 2
	subs r6, r6, # 1
	bne _flashmang1
_flashmang3:
	ldr r2, [r0, # 0x0c]
	lsls r2, r2, # 31
	bmi _flashmang3
	mov r1, # 2
	str r1, [r0, # 0x10]
	ldr r3, = 0x8009c00           @ 擦去更新的一页
	str r3, [r0, # 0x14]
	mov r1, # 0x42
	str r1, [r0, # 0x10]
_flashmang4:
	ldr r2, [r0, # 0x0c]
	lsls r2, r2, # 31
	bmi _flashmang4
	mov r1, # 0x80
	str r1, [r0]          		@flsh上锁
	ldr r0, = 0xe000ed0c
	ldr r1, = 0x05fa0004
	str r1, [r0]          		@复位
	
_nmi_handler:
	bx lr
_hard_fault:
	bx lr
_memory_fault:
	bx lr
_bus_fault:
	bx lr
_usage_fault:
 	bx lr

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (12)
雪    币: 792
活跃值: 活跃值 (614)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
yjmwxwx 活跃值 2017-12-22 12:46
2
0
在贴点逆向时候简单过程

打开JLINK官方的那个命令行调试器






到这里已经成功连接上目标板子了

接下来把下载的固件烧写到自己的板子,固件是原来别人从官方DLL文件里截取出来的,固件是无法通过普通手段从芯片里读出来的,因为有读保护。

运行程序后再停止



下面读出内存



用EMACS打开FLASH和RAM的bin文件



下面复制ram.bin里的数据


把stm32.bin拉到最后面


把RAM的粘帖到FLASH的并且保存



用IDA打开






设置ROM的地址范围


查看原来固件看到地址到0XFC50


下面就把ROM改成0到0XFC50


接着添加一个RAM的,设置地址0XFC50到0X14C50


设置ROM偏移0X8000000



设置RAM偏移0X20000000


示范下JLINK官方那个调试工具
BGS前面设置一个断点,命令setbp 0x8000282



单步执行一下可以看到R2和R3比较



我学STM32都是用GNU ARM汇编写的程序,这个调试器很熟悉,虽然简单整个分析过程就是单步执行一条一条跟踪看干了什么。 
我水平菜,不会像大神那样看F5后的C代码就能看懂。
我分析只能靠硬件仿真慢慢看汇编,也就汇编比较精通,但是只会汇编根本不如人家看F5后的快,所以竞争失败,只免费给别人破解过几个序列号保护的,一分钱没挣到。 
分享出来方便没入门的参考参考。
反汇编后的代码我也可以放到KEIL重新编译了,这个很简单不知道有没有人需要? 
雪    币: 792
活跃值: 活跃值 (614)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
yjmwxwx 活跃值 2017-12-22 13:01
3
0
注释出具体的函数功能
雪    币: 5327
活跃值: 活跃值 (117)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
广岛秋泽 活跃值 2018-1-7 14:28
4
0
厉害
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
通宵敲代码 活跃值 2018-1-10 15:40
5
0
受教
雪    币: 52
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gongziyin 活跃值 2018-4-19 14:02
6
0
这个真牛X
雪    币: 3058
活跃值: 活跃值 (752)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunsjw 活跃值 1 2018-4-26 13:27
7
0
厉害是厉害,但是我觉得楼主还是先把语文学好。
雪    币: 61
活跃值: 活跃值 (598)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
龙飞雪 活跃值 2018-4-27 11:24
8
0
厉害了,高手
雪    币: 183
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lanmanck 活跃值 2018-7-24 16:53
9
0
这么穷,还能拍照,用电脑调试、发帖子。
雪    币: 199
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
quaker 活跃值 2019-1-20 03:29
10
0
几年没来了,看到楼主的飞线和汇编,被震撼了。
雪    币: 1081
活跃值: 活跃值 (97)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttstation 活跃值 2019-1-20 11:44
11
0
这个    BI   装得有点过分了啊。。。
雪    币: 34
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yxgbo 活跃值 2019-3-6 23:11
12
0
是有点另类,哈哈哈。
雪    币: 517
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
badboyhzg 活跃值 2019-10-12 14:37
13
0
这个有点屌~~果然汇编,会硬件的,在看雪里面跟熊猫一样得存在
游客
登录 | 注册 方可回帖
返回