qemu模拟移植STemWin, 破解STemWin库的CRC检查限制

2019-12-09 19:58发布

本帖最后由 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 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
34条回答
a105
1楼-- · 2019-12-11 07:53
楼主,可以介绍下是怎么破解法不,因为这个库有很多个版本,M4的库不是这个数值,是 88 42 00 D0 FE E7 2B 4D
kneken
2楼-- · 2019-12-11 09:45
学习了
okplay
3楼-- · 2019-12-11 13:14
a105 发表于 2018-9-30 21:45
楼主,可以介绍下是怎么破解法不,因为这个库有很多个版本,M4的库不是这个数值,是 88 42 00 D0 FE E7 2B  ...

大致应该是这样的,可以用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

zlyny
4楼-- · 2019-12-11 18:52
 精彩回答 2  元偷偷看……
zqy517
5楼-- · 2019-12-11 19:45
厉害了,谢谢分享!
a105
6楼-- · 2019-12-12 01:27
okplay 发表于 2018-10-1 21:28
大致应该是这样的,可以用IDA或是直接arm-none-eabi-objdump来进行,我是2个结合起来,这样看起来比较方 ...

大神,你的方法很赞。

一周热门 更多>