Flasher V5 JLink Pro V6

news/2025/4/1 6:39:09/文章来源:https://www.cnblogs.com/emwork/p/18799812

原帖链接: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更换为小封装的,不易折腾),于是就飞了八根线,接到了一个扩展小板上,这样就可以猥琐欲为了~~果照奉上先。

 

Flasher V5
Flasher V5

 

简单记录下折腾的过程吧:

  1. 读取固件,通过软件读取(0xFE)指令依然有效,也可以直接通过JLink读取SPI Flash,后来的反复写入验证工作都是通过JLink V13写入的。使用JLink SPI Flasher工具,可以很方便的读写~

 

JLink SPI Flash Tools
JLink SPI Flash Tools

 

  1. BOOT字符串替换:将ARM修改为PRO,于是Flasher ARM就变成了成功变成了Flasher PRO,至于PRO相比ARM有哪些优势,可以参考官网介绍。

  2. 固件分析,JLink PRO V6的固件很早之前就提取过,对比发现有很大的相似性。本来想将Boot、APP、SN、Sign的地址列上来的,暂时先不放了,感兴趣的可以私下交流。相比来说,先从JLink Pro V6的固件分析入手比较简单些,Flasher的就要复杂的多了。

  3. JLink Pro V6的固件可以在在Flasher上运行(Boot需要使用JLink Pro的boot,两者的App Start地址不同),两者后端电路应该是一样的,下载调试时也是可以的,并且支持Power On,控制5V输出的功能也是OK的。

  4. 我是先实现的Pro的固件成功的运行(相比Flasher要简单些),实现方式也简单,首先patch掉boot对app的校验,然后patch App对UID和SN的签名验证,尤其是App的验证,看上去一大坨牛X的验证,验证这验证那的,patch也很简单,进来后就return 1出去了,然后就可以欢快的跑起来了。

  5. 按照楼上的方式实现是最简单的,并且SN可以随意设置,但是会弹出defective的框框,这样还得patch jlinkarm.dll,不够完美。则对我来说无法忍受,于是继续折腾,还是老方法,将母板的UID放在固定位置,读取UID时替换之。于是,JLink Pro V6可以成功的在Flasher V5的载体上运行起来了,并且不弹框框,Debug MCU也可以正常Debug,不会断链。顺便改一下App的date code,避开升级提示。

     

    JLink Pro V6
    JLink Pro V6

     

  6. Pro之后就搞Flasher V5了,Flashser根据字符串,很容易找到boot对App校验的地方,一一patch掉即可。

     

    Btl Check
    Btl Check

     

    App对SN和UID的校验与楼上的方法相同:

     

    Flasher Pro V5
    Flasher Pro V5

     

  7. 目前还不能实现自动升级,对ZYNQ的编程一头雾水,算了,到此为止不再折腾了~

    欢迎大佬们一起交流学习,共同进步~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907814.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Vue] Vue模板编译原理解析 part 1

模板编译整体流程 首先我们看一下什么是编译? 所谓编译(Compile),指的是将语言 A 翻译成语言 B,语言 A 就被称之为源码(source code),语言 B 就被称之为目标代码(target code),这个事情谁来做?编译器来做。编译器你也不用想得那么神秘,就是一段程序而已。 完整的编…

[P] 结对项目:影蛇舞

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健) 这个作业的要求在哪里 [P] 结对项目:影蛇舞 我在这个课程的目标是 学习软件工程知识,通过团队协作开发一个具备实际应用价值的软件,从需求分析、设计、开发到测试和部署,完整经历软件开发生命周期,提高工…

0329-Never Give Up

前言 用LCD1602 去打印一段话吧。 就当作激励和安慰,毕竟,我今天被坏情绪传染了一下,有点点失落和悲伤。 参考 5-2 LCD1602调试器 效果 Never Give UpAttitude Is Everything代码 LCD1602.h #ifndef __LCD1602_H__ #define __LCD1602_H__//用户调用函数: void LCD_Init(); …

JavaScript 数据结构与算法 — 单向链表

链表(Linked List)是一种基本的数据结构,用于表示一组按顺序排列的元素。链表中的每个元素都与下一个元素连接,元素在内存中并不是连续的,而是通过指针来链接在一起。每个元素都包含两部分:自己的数据和指向下一个元素的指针。我们常说的链表指的是单向链表,第一个元素的…

Ethernaut通关(智能合约漏洞)(有缘更新)

SnowSword笑传之出错币Ethernaut通关 参考文章:文章 - Ethernaut闯关录(上) - 先知社区、 智能合约是什么?把智能合约想象成网络上的赛博自动售货机,每个人都可以写自己的智能合约,使用虚拟货币交易物品,并且网络区块链中的所有节点都在为你的交易记账不怕商家提桶跑路……

QML基本组件 滑动条 Slider

描述 Slider通过手柄沿轨迹滑动来设置数值。 Qt帮助文档搜索 “slider” 获取详细信息。属性 from : real to : real value : real orientation : enumeration stepsize : real touchDragThreshold : qreal信号 onValueChange {}import QtQuick import QtQuick.ControlsWindow …

UE5--006--小结(一)

1. Input2. AI Enmy3.Save Game

阶段升级,zhitan-ems开源能源管理系统--集成建筑能耗支路和分项功能

升级介绍 自从春节上班后开源以来,zhitan-ems收到了大家很多的赞誉和认可,很多朋友也提出了中肯的意见。感谢大家。 很多朋友的建议里提到建筑能耗功能,依据大家意见,我们加班加点实现了简单的建筑能耗功能。如下图: 另外打一波广告,欢迎大家star 项目介绍 通过物联网技…

Static Timing Analysis Basics

Preface This note only introduce the essential concepts about Static Timing Analysis, which not contains:Async, i.e. remove, recover Timing conceptions, i.e. false path, multi cycle path etc. Advance timing domain knowledgePOCV, MCMM etc.什么是 STA 由于时钟…

深圳大学的一些简单题

A打表,发现是这样的东西:然后规律很显然,相邻的两个数,一组在左边,另一组在右边,依次循环,偶数的时候是 \(23\) 开头,奇数的时候是 \(12\) 开头,再处理一下 \(1\) 和 \(n\) 就可以,比较简单的分讨 显然规律不止一个点击查看代码 #include <bits/stdc++.h> usin…

AI可解释性 I | 对抗样本(Adversarial Sample)论文导读(持续更新)

本文作为AI可解释性系列的第一部分,旨在以汉语整理并阅读对抗攻击(Adversarial Attack)相关的论文,并持续更新。与此同时,AI可解释性系列的第二部分:归因方法(Attribution)也即将上线,敬请期待。AI可解释性 I | 对抗样本(Adversarial Sample)论文导读(持续更新) 导…

day:33 jmeter性能测试——压力测试

一.单接口性能测试(同一用户进行压力测试) POST http://49.233.201.254:8080/cms/manage/loginJump.do POST data: userAccount=admin&loginPwd=123456(1)在线程中修改虚拟用户数线程组 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里…