就是攻破板载的带mbed + VCP + STLink的家伙.使用带jar的升级程序,升级我的ST-Link是没问题的.那么解压他.
记得装上JDK,然后解压:
这个就是目标固件,但是AES加密的.
根据IDA反汇编资料,这应该是这样的.
- f1_x.bin: ST-Link v1.
- f2_1.bin: “STM32 only”. DISCO STM32 板载
- f2_2.bin: “STM8 only”. DISCO STM8 板载
- f2_3.bin: “STM32+STM8”. 标准
- f2_4.bin: “STM32+MSD+VCP”. Mbed + VCP + STLink
- f2_5.bin: “STM32+Audio”. 无资料
看来f2_4应该是最高端的.这个固件是AES加密的,这里有人做了个简单程序(其实是反汇编jar出来的部分内容,可读性很差.)
https://github.com/lujji/st-decrypt
既然是对称加密,那肯定有KEY,这个KEY目前是best performance.
然后打开解密后的bin,看到熟悉东西了吧.
我改成别的看看等下会不会被我刷掉.
重新加密生成一个新的bin.
然后重新打包一下.
用新程序Upgrade一下固件.再检查新mbed.htm,果然变了.
也就是把STLink的固件给刷了,他的数据根据前段Bootloader给出的.我们现在可以改第二阶段,也就是我们有办法把ST-LINK固件整个备份出来的.先配置下STM32CubeMX.
时钟.
速率低一些,减少出错率.
生成的工程后加入一行,打印全部Flash内容.
当然这个编译出来千万不要接触到任何和中断有关的函数,因为具体向量表是不可预知的.所以中断有关代码都不能有,屏蔽.然后HEX转BIN.自己想办法.
替换文件后再来生成一次JAR.
冒险来了,是STLINK挂了还是DUMP出整个STLINK了.然后整片都被我读出来了.随后得到Bootloader(从0x4000开始找到自己原始程序数据,截取不要.),修改WP(访问WriteProtect的语句屏蔽)数据.
然后用烧写器烧写一个Bootloader.然后升级,升级可以选择升级到任意,非常任性.(因为全片擦除缘故,具体不知道哪里记录.)
然后全部升级还原,解密整个固件打包.
当然,实际测试过,最高级的还是VCP+MSD了.U盘悲剧了.
UPDATE:给下面的主芯片做一次ERASE ALL,U盘的空间就回来了.
然后,我的Mbed呢?好吧,真的不见了.
我可以评论嘛 ?
个人telegram
@tipstrying
你和https://lujji.github.io/blog/stlink-clone-trace/ 这一个是一个人吗?
@请求 不啊,这个其实只是把引脚印出来.
这个对称的Key是怎么拿到的呢
@爱豆 Java字节码