你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验之谈】基于用STM32固件IDA PRO + QEMU动态调试的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-11 15:29

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

闲着没事调试下老毛子孔雀石SDR的固件,由于我没硬件只能用QEMU

安装支持STM32的 xPack QEMU Arm

打开IDA 的debugger菜单设置一下调试






qemu 运行参数

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


设置本机IP



运行可以连接了




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



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



向上找哪里调用的




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



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



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


在0x800e270设个断点



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


把IDA动态调试寄存器R6和R7改成 0XA52FF277和0XBC8FB975
0X800E3CC设个断点,运行看结果


运行


结果R0和R1  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


---------------------
作者:yjmwxwx


收藏 评论0 发布时间:2022-12-11 15:29

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版