用IDA PRO + QEMU动态调试STM32固件

知己知彼百战不殆,了解下敌人都是什么套路,有助于更好的保护自己的程序。

闲着没事调试下老毛子孔雀石SDR的固件,由于我没硬件只能用QEMU
作者产品资料网盘
https://yadi.sk/d/4ZgsrswxYClG1Q

安装支持STM32 xPack QEMU Arm
安装方法如下,有详细说明不再重复。
The xPack QEMU Arm | The xPack Build Framework

打开IDA debugger菜单设置一下调试
​编辑

​编辑
qemu 运行参数


"qemu-system-gnuarmeclipse" -machine STM32F429I-Discovery -s -S -kernel C:\311.bin


设置本机IP

​编辑

运行可以连接了
​编辑

通过比较新版和旧版固件很容易就找到了密码表地址0x80392d8

​编辑

找哪个程序调用了这个表,发现是一个校验程序

​编辑

向上找哪里调用的

​编辑

我们又找到了读STM32ID的程序,通过分析上面两个是生成校验数组的。
​编辑

往下看sub_800DB54是原来的ID号生成密码的程序

​编辑

下面一些是对生成密码简单移位的程序,但是有上百行,人工看比较麻烦,所以运行动态调试
​编辑

0x800e270设个断点

​编辑

运行以前的算号器生成本机密码
​编辑

IDA动态调试寄存器R6R7改成 0XA52FF2770XBC8FB975
0X800E3CC
设个断点,运行看结果
​编辑

运行
​编辑

结果R0R1  0x75b98fbc 0x77f22fa5
在下面函数里面设置个断点接着运行

​编辑

这个不用调试肉眼就可以看出来,通过和密码表比较,密码表里面有就向R6+0x814地址写0XFA,没有就写0X58

到这里已经知道怎么和密码表比较了

看固件BIN文件时候看到结尾有数据,这很不正常,看哪里调用看到两个对整个FLASH的校验程序

​编辑

​编辑

​编辑


由于QEMU不支持STM32H7所以没办法运行整个程序,要是有硬件插上JILINK很容易就能知道哪个程序校验整个固件,静态不容易看到哪里进行校验。


人家作者开发的东西,有人**了还卖和作者原价骗人

要是有硬件我一定研究如何去掉保护免费放出固件,让搞**的没把法赚钱,但是没硬件就没办法了。
由于我没硬件没办法验证和调试,随便改改不知道能不能去掉保护。

0800DED4 由原来
str r4, [r6, # 0x814]
改成
str r7, [r6, # 0x814]
0800DD66
由原来
str r0, [r3]
改成
str r2, [r3]
0800DC90
0800DC92由原来
ldr r2, [r4]
cmp r2, r3

改成
str r3, [r4]
cmp r3, r3

Malahit_FW_1_10b.hex 作者发布的固件

3.zip我胡乱改的固件,就是试试玩,不可能成功。

​编辑 Malahit_FW_1_10b.hex.zip (427.77 KB)

​编辑 3.zip (264.42 KB)
清晰图片
​编辑 图片.zip (2.02 MB)

---------------------

作者:yjmwxwx
链接:https://bbs.21ic.com/icview-3114654-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值