搜索
bottom↓
回复: 28

关于STM32解密能修改UID的传闻,哪位坛友有亲身经历吗?

[复制链接]

出0入0汤圆

发表于 2017-6-7 19:34:22 | 显示全部楼层 |阅读模式
很多年前就听说了STM32可以被修改UID,这个修改的概念是指,全新的STM32芯片,可以通过特殊编程手段,将UID改为任意设定的序号。跟写入的hex文件是无关的。

就是说,并非通过修改hex文件的跳转指令来实现破解的。而是只需要读出目标MCU的Flash和UID之后,就可以实现破解了。

这个传闻,我一直没有找到可靠的渠道证明是否真有其事。在项目开发上,一直是担心这个问题。因为无论加密算法做得多好,只要UID被攻破了,那加密所做的一切都没意义了。


哪位坛友有亲身经历吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-6-7 22:17:07 | 显示全部楼层
1. anything is possible.
2. multi-level encryption. In-chip encryption + external chip encryption.
3. device malfunction 1 year after clone detected.
4. no zuo, no die.

出0入0汤圆

 楼主| 发表于 2017-6-7 22:33:58 | 显示全部楼层
funnynypd 发表于 2017-6-7 22:17
1. anything is possible.
2. multi-level encryption. In-chip encryption + external chip encryption.
3 ...

你说的在所有芯片上都是成立的,但实际上,UID是否可修改,是一个非常关键的问题。

如果UID不可修改,那加密上是有非常多手段可以实施的。基本上可以说,如果UID不可修改,就可以实现单片机不被破解。

至于为什么不放弃STM32换其他平台,也是从开发资源,采购资源,成本上综合考虑的。



我了解到的信息,UID的修改,有些人说是可以直接改写,就是给一批空白芯片,里面都是同样UID的。另一种说法是所谓的UID改写还是修改HEX文件来实现跳转的,那并不是真正的改写。

所以想来了解一下,STM32 的UID改写,是否真有其事?

出0入0汤圆

发表于 2017-6-7 22:38:10 | 显示全部楼层
应该是修改程序里读UID的指针,指向FLASH里空白的地方

出0入54汤圆

发表于 2017-6-8 07:01:14 | 显示全部楼层
记得有说GD32XXX和STM32F高度兼容,
那么很有可能有xx32fxxx之类的不打标芯片存在
那么 这类芯片内的0x1ffff7e8地址当然可以是普通flash 可读可写。
那么

出0入0汤圆

 楼主| 发表于 2017-6-8 10:38:27 | 显示全部楼层
unifax001 发表于 2017-6-8 07:01
记得有说GD32XXX和STM32F高度兼容,
那么很有可能有xx32fxxx之类的不打标芯片存在
那么 这类芯片内的0x1fff ...

不排除这个可能性

但是GD的UID也是这个地址的,这个也是不在编程地址范围内的。

出0入0汤圆

发表于 2017-6-8 10:50:23 | 显示全部楼层
UID只是作为一个或者一种加密手段。
除了UID,我还采集了一路悬空的AD channel作为加密手段。
由于悬空,我测试每次采集的ADC值是不同的,然后通过各种方式再加密一下,除非采用修改hex跳转的方式,不然我暂时认为无法破解。

不过采用ADC悬空引脚的方式,需要提前测试每次读到的值是否有差别。
stm32f103没有问题,但是我曾经想把这种加密方式扩展到microchip的pic18f的一些芯片,失败了。
即使是悬空状态下,这些adc的读数多次出现重复的问题。

出0入0汤圆

 楼主| 发表于 2017-6-8 11:12:04 | 显示全部楼层
simplorer 发表于 2017-6-8 10:50
UID只是作为一个或者一种加密手段。
除了UID,我还采集了一路悬空的AD channel作为加密手段。
由于悬空,我 ...

没明白你的意思

没有UID,你如何确保芯片的唯一性?

ADC采集,只能保证随机性

出0入0汤圆

发表于 2017-6-8 11:57:23 | 显示全部楼层
我把UID读出来,经过AES加密之后在Flash中多处存储,然后程序里面多处判断,这样就算是把UID改了也破解不了,当然改指向UID的指针也不行,因为我还有其他备份

出0入0汤圆

发表于 2017-6-8 11:58:47 | 显示全部楼层
已经实现了通过jlink获取芯片UID,然后将数据加密写入Flash,一键操作

出0入0汤圆

 楼主| 发表于 2017-6-8 12:01:18 | 显示全部楼层
wdluo 发表于 2017-6-8 11:57
我把UID读出来,经过AES加密之后在Flash中多处存储,然后程序里面多处判断,这样就算是把UID改了也破解不了 ...

你在仔细想想,如果UID可以被改写,HEX文件的内容被读出

你做的加密就没有任何意义了。因为程序根本无法判断不是原来的芯片了呀。

出0入0汤圆

发表于 2017-6-9 07:32:28 | 显示全部楼层
FireHe 发表于 2017-6-8 11:12
没明白你的意思

没有UID,你如何确保芯片的唯一性?

如果你读出的ADC结果,每次都不一样,你可以将这个结果作为伪UID使用,
然后通过加密算法加密,将ADC结果和加密后的结果同时存储在EEPROM或其它
非易失性器件中。

出0入0汤圆

发表于 2017-6-9 08:27:09 | 显示全部楼层
将空白区域用下载器随机数填满

出0入0汤圆

发表于 2017-6-9 08:32:26 来自手机 | 显示全部楼层
读uid不过就是绝对访问某个地址的数值,要是我拿到固件的话就把这个地址改成flash中的一个地址,然后在flash的那个位置随便写个序号……如何?

出0入8汤圆

发表于 2017-6-9 08:38:08 | 显示全部楼层
XA144F 发表于 2017-6-9 08:32
读uid不过就是绝对访问某个地址的数值,要是我拿到固件的话就把这个地址改成flash中的一个地址,然后在flas ...


应该破解 就是用这个方法, 还有宣称修改UID的,估计也是这个方法。

出0入0汤圆

发表于 2017-6-9 08:48:52 | 显示全部楼层
如果UID在制作晶圆时就做在芯片里面,这很明显是不可能的。  如果做成opt,成本肯定也会高。

所以做成普通flash,然后用只有厂家知道的特殊指令去修改,才是最经济的方法。

我曾经用过一个芯片(不是stm32),厂家发来的芯片uid读出来都是FF,我发邮件问他们,为何pdf里面有,实际读不出来?  

他们的技术回复说这个芯片可能是他做实验的,把UID给擦了。后面重新发的样品就正常了。

这正印证了我的推测。

出0入0汤圆

发表于 2017-6-9 09:04:44 | 显示全部楼层
本帖最后由 wdluo 于 2017-6-9 09:13 编辑

我的加密思路,仅供参考
1,下载程序之前,通过jlink获取芯片UID,让后将该UID通过加密运算之后存放到Flash空白区
2,计算程序的MD5值,然后放到空白区(或者OTP区)
3,程序验证UID,验证MD5值,都通过后才正常运行

破解者若拿到了固件,若它修改了程序中的任何数据(包括UID指针),MD5值校验不能通过,除非他同时也修改MD5值校验部分程序,为加大难度,可以在程序中多做几处不同方式的判断。

唯一可能的破解方式,把整片数据全部复制,包括UID,OTP区数据,但是我的每个设备都会有一个唯一的序号,若他整片复制,那么批量出来的产品序号都只有一个,这时候可以采用其他的手段判断出他的产品是克隆产品。

出0入0汤圆

发表于 2017-6-9 09:25:00 | 显示全部楼层
楼主可以到淘宝上找一家试试,然后发个需要莫元的帖子。
我相信这个帖子必火,你的钱一定能收回来。

出0入0汤圆

发表于 2017-6-12 13:01:53 | 显示全部楼层
这个很正常,STM32的UID 是和BOOT代码放在一起的,而BOOT代码应该是最后一个工艺烧入进去的,可能是OPT工艺,也可能是flash工艺,总之,这些代码一定是封装之后烧录进去的,因此一定存在不公开的管脚协议,用于烧录boot代码;
我买到过一批 STM32F1XX的芯片,里面就发现有多片UID相同的,最多的一次居然发现有3片一样的(一盘250片),最后不得不修改加密算法以适应这种情况

出0入0汤圆

 楼主| 发表于 2017-6-12 13:40:56 | 显示全部楼层
apachectl 发表于 2017-6-12 13:01
这个很正常,STM32的UID 是和BOOT代码放在一起的,而BOOT代码应该是最后一个工艺烧入进去的,可能是OPT工艺 ...

OPT 区域,除了UID,应该还有其他的一些参数吧?

能否扩大这个范围来作为唯一芯片的判断?

出0入0汤圆

发表于 2017-6-12 13:55:24 | 显示全部楼层
uid在技术上来说应该是flash实现的,不可能是rom,也不大可能是otp, st不一定有时间去做otp编程

出0入0汤圆

 楼主| 发表于 2017-6-12 13:58:18 | 显示全部楼层
7802848 发表于 2017-6-12 13:55
uid在技术上来说应该是flash实现的,不可能是rom,也不大可能是otp, st不一定有时间去做otp编程 ...

我也觉得就是FLASH,只是地址范围比较特殊

这个如果写入办法被破解了就真的头疼了。

出0入0汤圆

发表于 2017-6-12 17:26:13 | 显示全部楼层
现在芯片厂家都吹捧自己的芯片不可能被破解,其实都很不堪一击,总有一部分人在挣这钱

出0入0汤圆

 楼主| 发表于 2017-6-12 20:29:23 | 显示全部楼层
waothom 发表于 2017-6-12 17:26
现在芯片厂家都吹捧自己的芯片不可能被破解,其实都很不堪一击,总有一部分人在挣这钱 ...

被读出flash这个总是难免的,因为可以开盖

但被修改UID,这个对保护版权的影响太大了

出10入95汤圆

发表于 2017-11-14 13:02:02 | 显示全部楼层
apachectl 发表于 2017-6-12 13:01
这个很正常,STM32的UID 是和BOOT代码放在一起的,而BOOT代码应该是最后一个工艺烧入进去的,可能是OPT工艺 ...

还有多个UID是相同的事情,你买的是正品么?货源?

出0入0汤圆

发表于 2017-11-15 13:19:42 | 显示全部楼层
ddcour 发表于 2017-11-14 13:02
还有多个UID是相同的事情,你买的是正品么?货源?

如何定义正品? 难道是某个小厂自己生产的stm32 MCU?  就算是二手芯片,UID也不可能这样吧; 除非我是我说的那样,本身可写; 这批芯片到大的渠道商或者定制商,写的不伦不类

出10入95汤圆

发表于 2017-11-16 10:36:46 | 显示全部楼层
apachectl 发表于 2017-11-15 13:19
如何定义正品? 难道是某个小厂自己生产的stm32 MCU?  就算是二手芯片,UID也不可能这样吧; 除非我是我说的 ...

阁下不知道有国产兼容STM32的芯片吗?

出0入0汤圆

发表于 2017-11-21 12:50:13 | 显示全部楼层
ddcour 发表于 2017-11-16 10:36
阁下不知道有国产兼容STM32的芯片吗?

哪有,报出来
兼容的是指用arm框架,自己封装,会有少量寄存器模式不一样,不可以直接使用,需要代码迁移的; 直接完全照抄stm32的没有遇见,对厂家来说,有专利风险;

纯盗版流片的可能性还是比较小的,投入巨额研发只为盗版,估计只有傻瓜才干;

要是真有人干了,兼容的又很好,又可以随意写UID的话,那上面的论题就没意义了,买这种片子一把搞定

出0入0汤圆

发表于 2017-11-21 13:26:00 | 显示全部楼层
只要是芯片出厂后烧的UID,要么是FUSE(OTP),要么就是FLASH里划了一块,用专用命令写,宣称Program Once的,无闪存芯片的一般是FUSE(OTP),这种基本上安全性高一点,是用融丝位做的,烧断了后就不能改了,而且还有LOCK信号线,一般LOCK信号也会直接烧死,理论上应该改不了了。用FLASH做的,一般厂家自己有后门的,能通过一些不公开的指令来擦掉。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 08:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表