我看咸鱼上搞的卖100元呢,我免费分享出来修改的过程
IDA PRO工程
ida pro工程.zip
(1.59 MB)
修改后孔雀石1.10d固件
1.10d.zip
(327.1 KB)
这个固件采用STM32唯一ID防止被人抄袭,ID号经过加密后生成64位数密码,再把64位密码储存到FLASH,程序还有密码表和FLASH完整性校验,因为以前分析时候已经知道他密码表的内容,直接搜索BIN文件还容易就找到了密码表。
刷固件后,本机ID生成的密码和密码表里面进行比较,密码表里面没有就限制功能。
因为以前知道了密码表里的,这次直接在新固件BIN文件里面搜索就可以了,通过搜索知道了密码表在新固件的0x803b1d0,于是直接搜索这个地址,就找到了密码表比较程序
程序入口R2是密码表地址,R0和R1是本机64位密码
比较程序,R6=0x3ca8是密码表长度,因为密码是64位所以有1881个注册用户,密码表里没本机号把0x58写到R7地址+0X818的地址,有本机号写0XFA到这个地址,可以把密码表里注册用户替换成非注册用户的密码,也可以通过把R6=0X3CA8改大来增加密码表长度,把非注册用户密码添加到后面空白地址,还可以直接把0XFA写到那个地址。
密码表还有完整性校验程序,校验长度0X3CB0
ldr r3, = 0x3c2efb46是校验正确结果,直接把下面STR R0, [r4, # 8]里面的R0改成R3来绕开。
还有几个死循环不知道是干什么的,因为没硬件没法验证,直接把B命令替换成MOV R0, R0,因为这条命令下面就是正确跳转结果,只要让这条指令失去作用就行了。
通过看反汇编看到代码最后还有数据这个不正常,于是发现有全FLASH完整性校验,校验范围从0X8000000开始到0X8100000
还有个校验程序,从大概0x800dd88开始到0X80DFFFF
需要修改的地方,因为我没硬件验证所以看到可疑的就改。 用编译器直接生成机器码,我技术不行不会别的方法。 地址@df04 从str r0, [r4, # 8] 改成 str r3, [r4, # 8]
asm.zip
(2.84 KB)
@df04
str r0, [r4, # 8]
str r3, [r4, # 8]
@df84
aa:
b aa
mov r0, r0
@e6b0
bb:
b bb
mov r0, r0
@dffa
str r4, [r7, # 0x818]
str r2, [r7, # 0x818]
@de86
str r0, [r3]
str r2, [r3]
@ddac
str r0, [r4]
ldr r3, [r3]
@ddae
ldr r3, [r3]
str r3, [r4]
@dec6
str r0, [r3, # 4]
str r2, [r3, # 4]
@de16
ldr r0, [r3, # 8]
str r2, [r3, # 8]
@de18
cmp r0, r2
cmp r2, r2
从固件剪出密码表的方法,直接用dd命令
剪出的密码表
密码表(包含1881个密码).zip
(11.94 KB)
|