近来准备搞搞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
#宣汉我的家# 【有意见莫闷起,有建议大胆提! 宣汉县2022年度整治“群众最不满意的10件事”活动 “大征集”开始了!】
“群众最不满意什么事,就强力整治什么事!”为解决群众最关心、最直接、最现实的问题,不断提升人民群众满意度。根据市委、市政府的工作安排,经县委、县政府决定,在全县范围内广泛开展2022年度“群众最不满意的10件事大征集”活动,全方位收集民诉民意,强力整治群众反映最强烈的问题。
你最不满意什么问题,请大胆说出来!即日起至12月24日,如果您有什么问题及意见建议,可通过以下四种方式告诉我们。我们将梳理出群众反映强烈且带有共性的问题,并将这些问题和意见建议及时提交给有关部门。
方式一:二维码征集(扫描、识别图中二维码)
方式二:邮箱征集
304009640@qq.com
方式三:热线电话
0818-5224022
方式四:通信地址
中共宣汉县委宣传部507室
@反映人(友情提示):在反映诉求时,内容必须真实具体、指向明确,要见人见事见点位,要一事一则,每人最多反映3则诉求。并写明自己的真实姓名、电话、常住地址,以便及时反馈。
中共宣汉县委宣传部
“群众最不满意什么事,就强力整治什么事!”为解决群众最关心、最直接、最现实的问题,不断提升人民群众满意度。根据市委、市政府的工作安排,经县委、县政府决定,在全县范围内广泛开展2022年度“群众最不满意的10件事大征集”活动,全方位收集民诉民意,强力整治群众反映最强烈的问题。
你最不满意什么问题,请大胆说出来!即日起至12月24日,如果您有什么问题及意见建议,可通过以下四种方式告诉我们。我们将梳理出群众反映强烈且带有共性的问题,并将这些问题和意见建议及时提交给有关部门。
方式一:二维码征集(扫描、识别图中二维码)
方式二:邮箱征集
304009640@qq.com
方式三:热线电话
0818-5224022
方式四:通信地址
中共宣汉县委宣传部507室
@反映人(友情提示):在反映诉求时,内容必须真实具体、指向明确,要见人见事见点位,要一事一则,每人最多反映3则诉求。并写明自己的真实姓名、电话、常住地址,以便及时反馈。
中共宣汉县委宣传部
天冷孩子一冷一热容易生病总跑医院,
安利一款孩子可以单独购买的医疗险,责任非常灵活可以根据需求搭配门诊责任和住院不同额度的责任。平时常见感冒发烧住院即使花费一毛钱也能给报销
我们的一顿饭钱,孩子冬天一身衣服的费用就可以拥有孩子一年的保障。
识别图中二维码可获取更多责任信息,也可自助投保。投保有问题可私信联系[咖啡]#保险[超话]##宝宝#
安利一款孩子可以单独购买的医疗险,责任非常灵活可以根据需求搭配门诊责任和住院不同额度的责任。平时常见感冒发烧住院即使花费一毛钱也能给报销
我们的一顿饭钱,孩子冬天一身衣服的费用就可以拥有孩子一年的保障。
识别图中二维码可获取更多责任信息,也可自助投保。投保有问题可私信联系[咖啡]#保险[超话]##宝宝#
✋热门推荐