TaterLi's LazyBlog

自言自语,不喜绕路,科学上网,远离天国.

@TaterLi4周前

04/3
06:11
技术控

攻破ST-LINK V2-1

就是攻破板载的带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

然后用烧写器烧写一个Bootloader.然后升级,升级可以选择升级到任意,非常任性.(因为全片擦除缘故,具体不知道哪里记录.)

然后全部升级还原,解密整个固件打包.

full

当然,实际测试过,最高级的还是VCP+MSD了.U盘悲剧了.

UPDATE:给下面的主芯片做一次ERASE ALL,U盘的空间就回来了.

然后,我的Mbed呢?好吧,真的不见了.

攻破ST-LINK V2-1