探讨一下,那些MCU解密的,而且还不破坏母片,用的啥原理啊?
难道他们摸索到了芯片的漏洞? 串口或者烧写端口发几段引诱代码mcu乖乖的投降
吐出所有代码 lb0857 发表于 2023-12-27 10:59
串口或者烧写端口发几段引诱代码
mcu乖乖的投降
吐出所有代码
(引用自2楼)
哪有这么简单哦 tang_qianfeng 发表于 2023-12-27 11:05
哪有这么简单哦
(引用自3楼)
不开盖就是这样情况
全自动操作
人工放到测速架上面接下来就是软件的事情了 lb0857 发表于 2023-12-27 11:08
不开盖就是这样情况
全自动操作
人工放到测速架上面接下来就是软件的事情了 ...
(引用自4楼)
那是bug吗?听人家说是代码在擦除的时候,只在擦除加密位的时隙给芯片加电到擦除电压,只擦加密位,不知道真假 tang_qianfeng 发表于 2023-12-27 11:10
那是bug吗?听人家说是代码在擦除的时候,只在擦除加密位的时隙给芯片加电到擦除电压,只擦加密位,不知 ...
(引用自5楼)
有些MCU会有这样的BUG,导入程序到RAM运行,然后就可以把FLASH的全部内容读取出来了
这个BUG不同厂家的MCU难易程度不一样,据说是只能在上电的某个瞬间注入代码才行,MCU复位之后内部的保护机制有个时间差 lb0857 发表于 2023-12-27 10:59
串口或者烧写端口发几段引诱代码
mcu乖乖的投降
吐出所有代码
(引用自2楼)
之前看到有帖子说把烧录口干掉,看来是有道理的... 本帖最后由 ycheng2004 于 2023-12-27 16:48 编辑
STM32可以这样解密,
现在IC品牌太多了, 好像加密都差不多
请问网友,加密哪家强?主要防读出数据, ycheng2004 发表于 2023-12-27 16:34
STM32可以这样解密,
现在IC品牌太多了, 好像加密都差不多
请问网友,加密哪家强?主要防读出数据, ...
(引用自8楼)
不能防读出,开盖读防不住,还是得依靠唯一ID加密 ycheng2004 发表于 2023-12-27 16:34
STM32可以这样解密,
现在IC品牌太多了, 好像加密都差不多
请问网友,加密哪家强?主要防读出数据, ...
(引用自8楼)
actel,哈哈
tang_qianfeng 发表于 2023-12-28 07:40
actel,哈哈
(引用自10楼)
这种不能用C语言编程吧? ycheng2004 发表于 2023-12-28 07:46
这种不能用C语言编程吧?
(引用自11楼)
有带arm硬核的吧, 丝印打磨,别用ST。就算破解也要花些力气吧 lb0857 发表于 2023-12-27 10:59
串口或者烧写端口发几段引诱代码
mcu乖乖的投降
吐出所有代码
(引用自2楼)
说起来确实是这么回事,但一些细节需要处理好,也不是每个人就能简单搞定的。
我看到的F0的破解器,是连接了SWD的,所以肯定是通过调试口。
最重要的一步,是往SRAM里下载木马程序。这一步虽然重要,但却是最简单,因为,以STM F0为例,加密后,没有禁止向SRAM写入数据!!!
我认为这个才是最大的漏洞,曾经我尝试过在加密后禁止SRAM的写,但带来了一个问题,市面上许多的下载器、调试器用不了了!估计这些工具都没有合理的安排烧写算法的下载时刻,为了和市面工具兼容,只好放弃此限制。
木马程序下载成功后,就是要想办法让它运行了。这里牵涉到2个问题:一是CPU的操作,二是MCU的保护机制。
CPU能够在SWD接口的控制下,进行哪些操作,需要仔细去读M0和DEBUG的手册。
而MCU的保护机制,以F0为例,在RDP LEVEL1时,如果从SRAM运行程序、SWD和系统BOOT,这三者其一读取FLASH时,都是受保护的,那要怎么绕过这个保护机制?怎么让MCU认为木马程序不满足以上三个条件?而且,非法访问FLASH会产生hardfault,对于M0这种CPU,还不支持中断重映射,这样一旦产生了hardfault,通常会进入FLASH的hardfault中断,一般是个死循环,退不出来了。
以F0兼容系列为例,MCU的保护机制,一众原厂也是参考的ST,但估计在具体的设计实现上,会有一些细微差别。现在研究这些破解的,都是从ST开始,也看到有部分国产的能被破解,但由于原厂设计上的差异,可能破解起来还是有些不同。我也买过一个F0的破解器,暂时破不了我们的MCU,也联系了卖家,把我们的F0/F1寄过去,据反馈不能得到完整 的程序,至于是不能破解,还是破解了一部分,就不得而知了。
如果不能防止木马下进SRAM,那另一个有效的方法,就是禁止FLASH的CODE,能被DBUS读取。因为要把FLASH内容丢出来,通过读取的方式,必然是走的CPU的DBUS通道,因此,切断此通道,是个行之有效的办法。目前,AT的sLib,和我们的PLib,都是类似。
本帖最后由 ycheng2004 于 2024-4-25 22:10 编辑
fcm32 发表于 2023-12-28 14:38
说起来确实是这么回事,但一些细节需要处理好,也不是每个人就能简单搞定的。
我看到的F0的破解器,是连 ...
(引用自14楼)
请问你们的F0/F1 MCU是什么品种?最近在选型,
G系列用这个方法可以读出数据吗?
谢谢! ycheng2004 发表于 2024-4-25 22:09
请问你们的F0/F1 MCU是什么品种?最近在选型,
G系列用这个方法可以读出数据吗?
谢谢! ...
(引用自15楼)
G系列据说已经可以破解了,可以上闲鱼搜:stm32g0 解密
我们的F0/F1主要兼容ST,然后有扩展一些自己的特色。早期型号CAN不兼容,后期型号CAN也兼容,更有双can、can-fd等。 fcm32 发表于 2024-4-27 08:45
G系列据说已经可以破解了,可以上闲鱼搜:stm32g0 解密
我们的F0/F1主要兼容ST,然后有扩展一些自己的特 ...
(引用自16楼)
代码加crc检验的方法,据说效果不错。
盗窃的代码,修改id之后,必然会造成crc检验不同,因此触发代码被盗用处理机制。间隔一定时间之后错误运行关键代码。
让盗窃者产品出故障。 fcm32 发表于 2023-12-28 14:38
说起来确实是这么回事,但一些细节需要处理好,也不是每个人就能简单搞定的。
我看到的F0的破解器,是连 ...
(引用自14楼)
印象中最大bug是系统对加密控制的判断执行依据是FLASH_OPTR寄存器而不是烧写的FLASH的option bytes,虽然这个FLASH_OPTR是上电时一次性自动从FLASH的option bytes和BOOT引脚加载的。如果这个FLASH_OPTR被改写了,加密限制好像就可以打开了。 Elex 发表于 2024-4-27 23:56
印象中最大bug是系统对加密控制的判断执行依据是FLASH_OPTR寄存器而不是烧写的FLASH的option bytes,虽然 ...
(引用自18楼)
原理上是这样的,但实际上应该不是这个原因。有机率通过电源的一些操作,读OPTR寄存器出错,和实际保护级别不一样。但这个其实挺难的,因为它是判断FLASH的输出再进行OPTR的更新,而且,数据不正确的话,是默认设置成LEVEL 1的。
看网上流传的破解视频,破解时间挺久的,那就不应该是通过让OPTR寄存器出错的方法。因为如果是加密去除了,通过SWD读取代码应该不会这么慢。现在破解的速度1秒钟大概2KB。 本帖最后由 ycheng2004 于 2024-4-28 11:38 编辑
fcm32 发表于 2024-4-28 08:43
原理上是这样的,但实际上应该不是这个原因。有机率通过电源的一些操作,读OPTR寄存器出错,和实际保护级 ...
(引用自19楼)
这个漏洞只针对F0/F1,Arm Cortex-M0+是不是用这个方法/漏洞破解不了?
看到网上Arm Cortex-M0+也可以破解,只是解密费用高, 约几万元, 可以阻当很多人去破解了, fcm32 发表于 2024-4-28 08:43
原理上是这样的,但实际上应该不是这个原因。有机率通过电源的一些操作,读OPTR寄存器出错,和实际保护级 ...
(引用自19楼)
请问各位网友,,,国产很多ARM单片机, 仿真可以用St-link/j-link等通用仿真器吗?谢谢 ycheng2004 发表于 2024-4-28 11:36
这个漏洞只针对F0/F1,Arm Cortex-M0+是不是用这个方法/漏洞破解不了?
看到网上Arm Cortex-M0+也可以破 ...
(引用自20楼)
应该不是这个漏洞。别的原理。
亲鱼上可以搜到,g0也能破解,就是M0+ ycheng2004 发表于 2024-4-28 17:20
请问各位网友,,,国产很多ARM单片机, 仿真可以用St-link/j-link等通用仿真器吗?谢谢 ...
(引用自21楼)
J-Link肯定是所有的arm内核都能仿,但具体还是需要厂家添加支持。
STLink就不一定了,大多数能仿。
另外,要想不被读出code,risc-v可能是个好方向 ,因为出来的晚,研究的人少,暂时会相对安全一些。 fcm32 发表于 2024-4-29 08:25
J-Link肯定是所有的arm内核都能仿,但具体还是需要厂家添加支持。
STLink就不一定了,大多数能仿。
(引用自23楼)
risc-v开盖读也拦不住吧 modbus 发表于 2024-4-29 11:10
risc-v开盖读也拦不住吧
(引用自24楼)
开盖肯定不在讨论范围内了,因为这种方法和内核并无关系,和厂家也无关系。
实际上开盖之后的处理,有几种方式:
一 跳过加密位(或电路),这种方式在以前简单的8位OTP上比较常见。实际上,对于电路规模庞大的32位MCU来说,不逆向电路,基本是不可能的。
二 从FLASH下探针,地址、数据、控制信号等,直接从FLASH读取。这个对于32位比较难,32位地址+10几位地址线+控制线,而且你还要了解 FLASH IP的规格,5-60条线不是那么好下探针的,更别说还有64位、128位FLASH的。
页:
[1]