原帖链接:https://nicemcu.github.io/2025/03/29/PSoC4/FlasherV5/
2025年3月29日,神变月最后一天,我们参加了放生~
在这个特殊的日子里,我完成了Flasher V5和JLink Pro V6的crack,难掩内心的喜悦与激动,记录下这一时刻。
前不久小黄鱼上收了一枚Flasher ARM,硬件版本V5.0A (200403),背面SPI Flasher,型号IS25LP128-JBLE-TR,封装SOIC-8,这种大封装的SPI Flash的好处就是可以方便飞线(新版本的Flasher 和 Pro都将此flash更换为小封装的,不易折腾),于是就飞了八根线,接到了一个扩展小板上,这样就可以猥琐欲为了~~果照奉上先。

简单记录下折腾的过程吧:
- 读取固件,通过软件读取(0xFE)指令依然有效,也可以直接通过JLink读取SPI Flash,后来的反复写入验证工作都是通过JLink V13写入的。使用JLink SPI Flasher工具,可以很方便的读写~

-
BOOT字符串替换:将ARM修改为PRO,于是Flasher ARM就变成了成功变成了Flasher PRO,至于PRO相比ARM有哪些优势,可以参考官网介绍。
-
固件分析,JLink PRO V6的固件很早之前就提取过,对比发现有很大的相似性。本来想将Boot、APP、SN、Sign的地址列上来的,暂时先不放了,感兴趣的可以私下交流。相比来说,先从JLink Pro V6的固件分析入手比较简单些,Flasher的就要复杂的多了。
-
JLink Pro V6的固件可以在在Flasher上运行(Boot需要使用JLink Pro的boot,两者的App Start地址不同),两者后端电路应该是一样的,下载调试时也是可以的,并且支持Power On,控制5V输出的功能也是OK的。
-
我是先实现的Pro的固件成功的运行(相比Flasher要简单些),实现方式也简单,首先patch掉boot对app的校验,然后patch App对UID和SN的签名验证,尤其是App的验证,看上去一大坨牛X的验证,验证这验证那的,patch也很简单,进来后就return 1出去了,然后就可以欢快的跑起来了。
-
按照楼上的方式实现是最简单的,并且SN可以随意设置,但是会弹出defective的框框,这样还得patch jlinkarm.dll,不够完美。则对我来说无法忍受,于是继续折腾,还是老方法,将母板的UID放在固定位置,读取UID时替换之。于是,JLink Pro V6可以成功的在Flasher V5的载体上运行起来了,并且不弹框框,Debug MCU也可以正常Debug,不会断链。顺便改一下App的date code,避开升级提示。
JLink Pro V6 -
Pro之后就搞Flasher V5了,Flashser根据字符串,很容易找到boot对App校验的地方,一一patch掉即可。
Btl CheckApp对SN和UID的校验与楼上的方法相同:
Flasher Pro V5 -
目前还不能实现自动升级,对ZYNQ的编程一头雾水,算了,到此为止不再折腾了~
欢迎大佬们一起交流学习,共同进步~