刚才抽空细读了一下 thxlp的帖子
人人都能拿到jlink v9的bootloader,重理了一下情况,然后做了个测试。
0:手头有V8 2个 V9 1个 电脑装了 VC2012 和 BUSHOUND JLINK不管他什么协议,最终都会变成USB控制器上的HEX字节串。
1:V8和V9的PID不同,一个是0101 一个是0105 另外V9因为结合了虚拟串口,所以是复合设备,从描述符里可看到接口号是2,前面两个接口是VCOM,要注意一下。
2:BUSHOUND先抓JLINK正常使用的数据,确实看到有01命令过程 还有一大堆的神马F0之类的命令不知道意义。 01命令最典型。
3:先BUSHOUND进行手工测试验证抓到的命令01,经过几次练习发现V8可能手速跟不上,发出01后根本来不及去收就失败了。V9经过5次尝试后可以熟练的手动测试成功。 具体观察到的情况就是从BULKOUT写一个字节01,然后迅速从BULKIN读数据,可以读回2字节表示长度,但是来不及再读内容。从现象分析应该是发出一个命令后必须在多少时间内去读结果,如果超时不去读就不能再读回了,会出现重新枚举,难道这时候它自己重启了?手动时候要先点击发送,然后去点击接收,这中间间隔大概会2S. 如果用按键精灵估计可以手动测试V8.
4:在手工验证命令成功情况下,噼里啪啦敲代码自动吧。 在这里掉了坑傻逼了好久,无意中才爬出来。情况是介样滴,敲完01命令的测试代码,在V9测试成功后,随手换了个V8测试,电脑果然比人爪好用,顺利的读到数据了,一看内容就是正确的。然后去试试神奇的FE命令吧,尼玛失败?发完09命令后读不到东西,LINK似乎也挂掉了。不死心反复折腾,怎么也读不到东西,楼主不会是骗我吧。。。最后无奈的换上V9看看,卧槽,我草草草,居然第一下就读到东西了。这是神马情况,难道V8不支持这个命令或者说支持的格式不同?这个地方想请教楼主以及T大神测试或解惑一下。
JLINK.jpg (61.92 KB, 下载次数: 0)
下载附件
2016-7-15 16:14 上传
见图,我是读08000000开始的32字节,第一个32位是20开头应该是堆栈吧,第二个32位是08开头应该是复位向量吧。然后又读了下APP部分起头。应该是能证明已经OK了,
我不做盗版,也就没必须全片读出了,帮你们验证了楼主是正确的,有心的自己去读全片吧。
那个修改BIN的读BOOT方法就懒得去验证了。
感叹一下,S公司居然留了一条这么粗暴的命令。。。直接指定地址和长度读取ROM,总归会被人分析出来的。不过一般人没谁有闲有技术去发现这个粗暴的后门。
另外感叹下S公司的固件居然没加密,被大家直接从DLL里提取BIN,还能把BIN修改后再倒进DLL去下载。
如果S公司不留这么粗暴的命令,把固件做上两层加密,下载时候丢给BOOT去解密。是不是大家就没得破解了?固件加密别说解密,先得猜出到底是什么加密算法吧,而解密代码在BOOT里没这条粗暴命令拿不出。
请thxlp和T大神解惑V8为什么用这条神奇的FE命令失败。
01命令需要分两次读取,比较麻烦,你能读到第一段应该问题不大了。你试试直接测试FE命令,FE加地址+长度 然后READ长度。这个只要读一次数据。如果成功了,可以读回来FLASH。
按我参考的那贴说法,应该没验证机制的。 你把RST向量重新映射到一块空白FLASH,在空白FLASH里写自己的代码吐固件,并且决定是否再次跳回原本的RST向量指向位置。
你是V9么,坛里有人发过一个不可自动升级的固件以及固件提取工具。可以从对应SEGGER软件提取固件手工烧入。
上个完整工程试试
按照你给我的思路,可以了,最后提取成功,烧写到的砖头的v9 成功救活,测试了一下,可以自动升级, 谢谢了。 , 感激无以言谢
兄弟把具体的思路也说说啊,给后面的兄弟提示下啊
一周热门 更多>