本帖最后由 jenkins 于 2018-9-28 21:45 编辑
把库文件"STemWin532_CM3_GCC.a"中的16进制数据
"9A 42 00 D0 FE E7 FF F7"
替换为16进制数据
"9B 42 00 D0 FE E7 FF F7"
即可破解STemWin库的CRC检查限制
qemu源码请参考:
https://www.amobbs.com/thread-5699632-1-1.html
STM32F429I-Discovery源码如下:
STM32F429I-Discovery(STemWin移植成功).zip.001.zip
(15.41 MB, 下载次数: 71)
2018-9-28 21:40 上传
点击文件名下载附件
STM32F429I-Discovery(STemWin移植成功).zip.002.zip
(15.41 MB, 下载次数: 62)
2018-9-28 21:44 上传
点击文件名下载附件
解压说明:下载所有压缩包后,需要把文件名最后的.zip删除,才能用7-zip解压
qemu测试程序如下:
qemu-system-gnuarmeclipse(STemWin不包含源代码).zip
(15.48 MB, 下载次数: 66)
2018-9-28 21:28 上传
点击文件名下载附件
qemu源码和测试程序源码由于文件较大,稍后添加。
运行效果如下图所示:
无标题.png (652.76 KB, 下载次数: 0)
下载附件
2018-9-28 21:19 上传
大致应该是这样的,可以用IDA或是直接arm-none-eabi-objdump来进行,我是2个结合起来,这样看起来比较方便。
1. arm-none-eabi-objdump -D STemWin532_CM3_GCC.a > 1.txt
.................................................................
Disassembly of section .text.GUI_Init:
00000000 <GUI_Init>:
0: b590 push {r4, r7, lr}
2: b083 sub sp, #12
4: af00 add r7, sp, #0
6: 4b20 ldr r3, [pc, #128] ; (88 <GUI_Init+0x88>)
8: 4a1f ldr r2, [pc, #124] ; (88 <GUI_Init+0x88>)
a: 6812 ldr r2, [r2, #0]
c: f022 0201 bic.w r2, r2, #1
10: 601a str r2, [r3, #0]
12: 4b1e ldr r3, [pc, #120] ; (8c <GUI_Init+0x8c>)
14: 2201 movs r2, #1
16: 601a str r2, [r3, #0]
18: 4b1d ldr r3, [pc, #116] ; (90 <GUI_Init+0x90>)
1a: 4a1e ldr r2, [pc, #120] ; (94 <GUI_Init+0x94>)
1c: 601a str r2, [r3, #0]
1e: 4b1c ldr r3, [pc, #112] ; (90 <GUI_Init+0x90>)
20: 681a ldr r2, [r3, #0]
22: 4b1d ldr r3, [pc, #116] ; (98 <GUI_Init+0x98>)
24: 429a cmp r2, r3
26: d000 beq.n 2a <GUI_Init+0x2a>
28: e7fe b.n 28 <GUI_Init+0x28>
2a: f7ff fffe bl 0 <GUI_Init>
2e: 4b1b ldr r3, [pc, #108] ; (9c <GUI_Init+0x9c>)
30: 222e movs r2, #46 ; 0x2e
32: 701a strb r2, [r3, #0]
34: f7ff fffe bl 0 <GUI_X_Init>
38: 4819 ldr r0, [pc, #100] ; (68 <GUI
=======================
2. IDA的反编译
2018-10-01_212349.png (30.12 KB, 下载次数: 0)
下载附件
2018-10-1 21:26 上传
############################
一些STM32硬CRC的寄存器器
/* CRC calculation unit */
#define CRC ( (volatile uint32_t*)0x40023000)
#define CRC_DR (*(volatile uint32_t*)0x40023000)
#define CRC_IDR (*(volatile uint32_t*)0x40023004)
#define CRC_CR (*(volatile uint32_t*)0x40023008)
总结修改方法:
429a cmp r2, r3 =====>修改成 429b cmp r3, r3
大神,你的方法很赞。
一周热门 更多>