唯一ID软件保护安全性研究

[复制链接]
 楼主| yjmwxwx 发表于 2024-5-10 15:22 | 显示全部楼层 |阅读模式
本帖最后由 yjmwxwx 于 2024-5-12 13:23 编辑

不知道拍什么视频网友爱看,正好有个网友给我一个收音机固件,说是最后一个版本的,正好我以前修过以前版本的,于是就看了看,把维修过程也给拍出来了,结果网友都不知道我在干什么,说是助眠。。。还有网友说让我发抖音说那给的创作激励多。。 我创作激励都没开的,让我帮忙维修这个固件的网友说是愿意给我一台收音机或者示波器我都没要,我只有一个条件就是免费分享,我连这个收音机实物都没有。。

俄国这个收音机固件采用STM32唯一ID加密生成序列号,再把注册过的序列号存到FLASH,刷固件后校验本机序列号在不在序列号列表里面,不在就限制使用 。程序还有校验序列号列表完整性和固件完整性部分防止别人修改,他这个方法不错,所以才分享下。



 楼主| yjmwxwx 发表于 2024-5-12 13:22 | 显示全部楼层


我看咸鱼上搞的卖100元呢,我免费分享出来修改的过程


IDA PRO工程

修改后孔雀石1.10d固件





这个固件采用STM32唯一ID防止被人抄袭,ID号经过加密后生成64位数密码,再把64位密码储存到FLASH,程序还有密码表和FLASH完整性校验,因为以前分析时候已经知道他密码表的内容,直接搜索BIN文件还容易就找到了密码表。


刷固件后,本机ID生成的密码和密码表里面进行比较,密码表里面没有就限制功能。


因为以前知道了密码表里的,这次直接在新固件BIN文件里面搜索就可以了,通过搜索知道了密码表在新固件的0x803b1d0,于是直接搜索这个地址,就找到了密码表比较程序

程序入口R2是密码表地址,R0和R1是本机64位密码


比较程序,R6=0x3ca8是密码表长度,因为密码是64位所以有1881个注册用户,密码表里没本机号把0x58写到R7地址+0X818的地址,有本机号写0XFA到这个地址,可以把密码表里注册用户替换成非注册用户的密码,也可以通过把R6=0X3CA8改大来增加密码表长度,把非注册用户密码添加到后面空白地址,还可以直接把0XFA写到那个地址。




密码表还有完整性校验程序,校验长度0X3CB0





ldr r3, = 0x3c2efb46是校验正确结果,直接把下面STR R0, [r4, # 8]里面的R0改成R3来绕开。

还有几个死循环不知道是干什么的,因为没硬件没法验证,直接把B命令替换成MOV R0, R0,因为这条命令下面就是正确跳转结果,只要让这条指令失去作用就行了。






通过看反汇编看到代码最后还有数据这个不正常,于是发现有全FLASH完整性校验,校验范围从0X8000000开始到0X8100000







还有个校验程序,从大概0x800dd88开始到0X80DFFFF




需要修改的地方,因为我没硬件验证所以看到可疑的就改。 用编译器直接生成机器码,我技术不行不会别的方法。        地址@df04  从str r0, [r4, # 8] 改成 str r3, [r4, # 8]



  1. @df04
  2.         str r0, [r4, # 8]
  3.         str r3, [r4, # 8]

  4.         
  5.         @df84
  6. aa:
  7.         b aa
  8.         mov r0, r0

  9.         
  10.         @e6b0
  11. bb:
  12.         b bb
  13.         mov r0, r0

  14.         
  15.         @dffa
  16.         str r4, [r7, # 0x818]
  17.         str r2, [r7, # 0x818]
  18.         
  19.         @de86
  20.         str r0, [r3]
  21.         str r2, [r3]
  22.         
  23.         @ddac
  24.         str r0, [r4]
  25.         ldr r3, [r3]
  26.         
  27.         @ddae
  28.         ldr r3, [r3]
  29.         str r3, [r4]

  30.         @dec6
  31.         str r0, [r3, # 4]
  32.         str r2, [r3, # 4]

  33.         @de16
  34.         ldr r0, [r3, # 8]
  35.         str r2, [r3, # 8]
  36.         
  37.         @de18
  38.         cmp r0, r2
  39.         cmp r2, r2
从固件剪出密码表的方法,直接用dd命令


剪出的密码表




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-5-12 13:33 | 显示全部楼层
以后不搞这个了,搞软件类好像网友都不爱看,而且属于开锁盗窃行为,我没盈利不知道算不算盗窃?
dsyq 发表于 2024-5-12 20:29 | 显示全部楼层
楼主人气很高了啊
还没盈利??
xzy568 发表于 2024-5-13 08:49 | 显示全部楼层
这么容易就被找到修改的地方,是原软件作者太菜,还是楼主太牛
 楼主| yjmwxwx 发表于 2024-5-13 11:37 | 显示全部楼层
dsyq 发表于 2024-5-12 20:29
楼主人气很高了啊
还没盈利??

没在视频网站盈利,只是去年直播过一次有个网友特别大方给我打赏了很多礼物,我也不懂直播不知道值100这么多,后来想给他返还回去他也不要,我也没提出来,在里面居然升值了,也可能是平台奖我了100没法查找来历也没打算往往提。



不过去年搞的DIY参加LCSC活动得了个1000元奖,还搞DIY参加CW32活动得了个2000元扶持,就是用他们单片机搞DIY类似软广_告,不过这个活动也是对全网的,只要用CW32搞设计就可以去申请,还参加另一个小活动薅到几百,再就是还有个JLC星火计划网友给我投票让我得了个2000元奖,我搞的并不好要不是网友给我投票根本不可能得奖,感觉对参加活动的别人不公平,这个奖还没发。 去年在LCSC我花了2000出头,第一次实现免费玩还有赚。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| yjmwxwx 发表于 2024-5-13 11:45 | 显示全部楼层
xzy568 发表于 2024-5-13 08:49
这么容易就被找到修改的地方,是原软件作者太菜,还是楼主太牛

主要是作者根本不想搞的很复杂吧,再加上我运气好就找到了,我这都没硬件没法调试验证,要是有硬件调试会更容易找。感觉多数人搞ID保护就是唯一ID加密下,连完整性校验都没有,加上多处完整性校验会增加很大难度,校验程序不对进入一个多多一条PUSH的函数,运行一会堆栈就崩了,这种就算上动态调试都很难找在哪里崩的,重新编译汇编都不会报错
mbutterfly 发表于 2024-5-14 08:11 | 显示全部楼层
挺厉害的。
 楼主| yjmwxwx 发表于 2024-5-14 09:27 | 显示全部楼层

没法和专业的比,找专业的改一个固件怎么也要100元吧,我为了搞视频免费分享出去结果很多网友不知道干什么的。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

2952

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部

122

主题

2952

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部