#明日方舟[超话]#今天是保批的胜利[打call]
二图终于过了,1-7层无压力一遍过,然后就啊啊啊啊这个圆滚滚的boss!!!每次都是究极刮痧[允悲]一直叠到30层被一拳一个团灭(绝望. jpg)但是过关思路已经摸索出来了,3近卫耀光3技能主c(配上聪明的ff0直接10000攻面板),2重装雷蛇带5个充电宝给后面的银老板充电缓解高压,2重装塞爹+任意加成煌/棘刺守下路,2狙击2医疗任意奶妈(有兴趣的可以尝试永续黄昏[哇]),左侧高台前期放术士大c,后面换奶妈(注意血条别暴毙了),摆好了基本可以稳过(可以小漏,别惦记你那破最终防线了[doge])
二图终于过了,1-7层无压力一遍过,然后就啊啊啊啊这个圆滚滚的boss!!!每次都是究极刮痧[允悲]一直叠到30层被一拳一个团灭(绝望. jpg)但是过关思路已经摸索出来了,3近卫耀光3技能主c(配上聪明的ff0直接10000攻面板),2重装雷蛇带5个充电宝给后面的银老板充电缓解高压,2重装塞爹+任意加成煌/棘刺守下路,2狙击2医疗任意奶妈(有兴趣的可以尝试永续黄昏[哇]),左侧高台前期放术士大c,后面换奶妈(注意血条别暴毙了),摆好了基本可以稳过(可以小漏,别惦记你那破最终防线了[doge])
近来准备搞搞usb,翻出我的正版开发板,启动正版visualgdb,插上盗版v9, 工程向导识别不到开发板无法下一步,于是我换了一下最新版本的7.58c驱动,打开准备升级一下固件来着,好家伙,直接弹出一个好家伙,大意是:
"现在连接的探头是个克隆版jlink,在克隆硬件上用我们的软件既不合理又不合法,请联系我们并附上截图。"
虽然后面我发现工程向导从openocd里面间接驱动jlink才能下一步并且成功调试,可这个segger的提示深深的打动了我。
众所周知,假货宝上的v9已经不知道出过多少版本了,大的小的,带壳的裸板的,都是包最新驱动,还真没遇到segger检测到的情况,去问了卖家和程序员一样的回答”我这里好好的”。
得,网上搜也搜不到信息,估计是因为clone提示文字也是全新的,以前好像出错提示是defective,新的提示是clone。
卖家不管,我自己折腾,首先我怀疑是不是那个签名问题,于是找了下jlink_x64.dll弹框的地方的函数,发现没有call它的调用,只有一个传参引用。不死心,开x64dbg跟了一下,是从线程调用来的。
那么再看这个传参引用的位置,x64dbg用animate trace记录了一下会发现他在检测和比较逗号分隔的特性字符串,比较到特定的字符串”RDI”就跳转到将这个弹窗函数入参的分支了。如果将字符串比较的jz都给跳过,则不会弹窗。
回到IDA调试和整理下这个函数,首先我们要摸清这个逗号分隔的字符串哪来的,是从一个0x80字节的缓冲区统计来的,每0x10开头是ascii的部分加到字符串里。
如果是做过山寨版的朋友可能就知道了,这信息是在0800BF20开始的地方,而0800BF00处是序列号。
通过整理和调试, 得出的这个新版驱动的弹窗分支条件依次如下:
0 序列号不能为黑名单里面的那几个。此条不重要,因为没人去用那些特殊序列号。
1 新型号不能内置GDBFull,有了直接报错。所有型号不能内置RDDI,有了直接报错。
2 硬件版本v9~v11并且序列号开头为26,5,82的,和版本号v1并且序列号开头为80的,不许内置JFlash或RDI特性。
看到这里聪明的小伙伴可能要问了,这些不都是专门针对盗版的吗?但随着我在网上和闲鱼搜集正版的序列号,我发现26开头是edu的特征,而5开头是base版的特征,80开头是edu mini的特征。这里说的开头就是第8、9位的数字。
山寨版的序号那可就五花八门了,有很多直接-1(4294967295)。在搜索中我还看到小窍门原版edu并 通过addfeature指令增加jflash和rdi特性的,还在论坛看到了Segger去年成立中国部门,坛友表示担忧,还有最近原版自己加feature的坛友被报告clone的帖子。
略作思考我觉得我破案了,这个崭新的中国部门怕是读了论坛的帖子后,把这个当作成果汇报上去了,然后segger程序员一琢磨,来个根据型号限制功能, 可齐活了,这一砖头主要砸到了买正版edu并且加了内置特性的,盗版序列号-1或者瞎写的都没被误伤。
我们可以选择补dll,拆机重刷,但我选择了最程序正义的一种:让jlink自己去掉feature。
此篇文章也就是从一个和嵌入式开发关系不大的视角上展示如何利用基础推理能力来拨开云雾得报大仇,阅读只需要有一定的调试经验,不需要做漏洞分析。好了,闲话不多说,我们正式就顺着这个Feature字符串来摸。因为新版驱动的commander不支持AddFeature指令了,我在老版JlinkARM.dll搜索发现AddFeature命令附近有一个ClearFeatures。
这个命令也是非公开的,和AddFeature、ChangeSN一样的流程,执行后会把现有ota的Features区域全部修改为0,发送更新ots信息请求让设备去更新。但我测试了一下设备上的固件却无法成功的把GDBFull或者JFlash字样给修改为00。
通过查阅STM32的flash编程手册PM0059,明确说可以将非0的bit改为0,不需要擦除再改写。
再看看固件更新ots有啥限制。固件怎么来呢,可以从JLinkARM.dll解。老版本的方法大家都知道了吧,新版本7.2后厂家给一部分固件加了压缩,我就用另外思路写了个工具解压它。
可以参考附件:图一
固件中对客户端发过去的新内容检查也是检查没有出现0变1的bit,然后就送入内存中的函数来修改flash了。
看了下内存中的这个函数,写的歪七扭八的,除了加了个跳过写入FF功能,没有会导致非FF不擦写的bug。编程手册上每次写入都要拉高一次PG,它给简化为设置一次,循环写入了。估计其实不需要。
话说其实修改flash的代码完全没必要放在内存,因为要修改的目标地址是sector2,和执行的都不在一个sector,而且它末尾还调用了flash里面的memcmp函数判断写入是否成功,白隔离了。https://t.cn/A6xszCqX
"现在连接的探头是个克隆版jlink,在克隆硬件上用我们的软件既不合理又不合法,请联系我们并附上截图。"
虽然后面我发现工程向导从openocd里面间接驱动jlink才能下一步并且成功调试,可这个segger的提示深深的打动了我。
众所周知,假货宝上的v9已经不知道出过多少版本了,大的小的,带壳的裸板的,都是包最新驱动,还真没遇到segger检测到的情况,去问了卖家和程序员一样的回答”我这里好好的”。
得,网上搜也搜不到信息,估计是因为clone提示文字也是全新的,以前好像出错提示是defective,新的提示是clone。
卖家不管,我自己折腾,首先我怀疑是不是那个签名问题,于是找了下jlink_x64.dll弹框的地方的函数,发现没有call它的调用,只有一个传参引用。不死心,开x64dbg跟了一下,是从线程调用来的。
那么再看这个传参引用的位置,x64dbg用animate trace记录了一下会发现他在检测和比较逗号分隔的特性字符串,比较到特定的字符串”RDI”就跳转到将这个弹窗函数入参的分支了。如果将字符串比较的jz都给跳过,则不会弹窗。
回到IDA调试和整理下这个函数,首先我们要摸清这个逗号分隔的字符串哪来的,是从一个0x80字节的缓冲区统计来的,每0x10开头是ascii的部分加到字符串里。
如果是做过山寨版的朋友可能就知道了,这信息是在0800BF20开始的地方,而0800BF00处是序列号。
通过整理和调试, 得出的这个新版驱动的弹窗分支条件依次如下:
0 序列号不能为黑名单里面的那几个。此条不重要,因为没人去用那些特殊序列号。
1 新型号不能内置GDBFull,有了直接报错。所有型号不能内置RDDI,有了直接报错。
2 硬件版本v9~v11并且序列号开头为26,5,82的,和版本号v1并且序列号开头为80的,不许内置JFlash或RDI特性。
看到这里聪明的小伙伴可能要问了,这些不都是专门针对盗版的吗?但随着我在网上和闲鱼搜集正版的序列号,我发现26开头是edu的特征,而5开头是base版的特征,80开头是edu mini的特征。这里说的开头就是第8、9位的数字。
山寨版的序号那可就五花八门了,有很多直接-1(4294967295)。在搜索中我还看到小窍门原版edu并 通过addfeature指令增加jflash和rdi特性的,还在论坛看到了Segger去年成立中国部门,坛友表示担忧,还有最近原版自己加feature的坛友被报告clone的帖子。
略作思考我觉得我破案了,这个崭新的中国部门怕是读了论坛的帖子后,把这个当作成果汇报上去了,然后segger程序员一琢磨,来个根据型号限制功能, 可齐活了,这一砖头主要砸到了买正版edu并且加了内置特性的,盗版序列号-1或者瞎写的都没被误伤。
我们可以选择补dll,拆机重刷,但我选择了最程序正义的一种:让jlink自己去掉feature。
此篇文章也就是从一个和嵌入式开发关系不大的视角上展示如何利用基础推理能力来拨开云雾得报大仇,阅读只需要有一定的调试经验,不需要做漏洞分析。好了,闲话不多说,我们正式就顺着这个Feature字符串来摸。因为新版驱动的commander不支持AddFeature指令了,我在老版JlinkARM.dll搜索发现AddFeature命令附近有一个ClearFeatures。
这个命令也是非公开的,和AddFeature、ChangeSN一样的流程,执行后会把现有ota的Features区域全部修改为0,发送更新ots信息请求让设备去更新。但我测试了一下设备上的固件却无法成功的把GDBFull或者JFlash字样给修改为00。
通过查阅STM32的flash编程手册PM0059,明确说可以将非0的bit改为0,不需要擦除再改写。
再看看固件更新ots有啥限制。固件怎么来呢,可以从JLinkARM.dll解。老版本的方法大家都知道了吧,新版本7.2后厂家给一部分固件加了压缩,我就用另外思路写了个工具解压它。
可以参考附件:图一
固件中对客户端发过去的新内容检查也是检查没有出现0变1的bit,然后就送入内存中的函数来修改flash了。
看了下内存中的这个函数,写的歪七扭八的,除了加了个跳过写入FF功能,没有会导致非FF不擦写的bug。编程手册上每次写入都要拉高一次PG,它给简化为设置一次,循环写入了。估计其实不需要。
话说其实修改flash的代码完全没必要放在内存,因为要修改的目标地址是sector2,和执行的都不在一个sector,而且它末尾还调用了flash里面的memcmp函数判断写入是否成功,白隔离了。https://t.cn/A6xszCqX
✨投稿✨给妈投喂双皮奶!cpsp上头做了上车做了300张艾默里克的方卡otz希望各位光呆能救救糊墙人赏脸来拿拿,摊位号c69,回答了ff14相关问题就能不限数量拿了给亲友们代拿也ok![泪]交换也想要,不方便走动的摊主可以联系我送过去(在评论出没),拜托了来拿吧救救我!![泪]【稿主不是画师只是彩笔约稿人,画师具体看图】
✋热门推荐