菜农友情为STM32设计一种通用加密方法之原理

[复制链接]
41428|125
airwill 发表于 2010-8-21 10:19 | 显示全部楼层
好像还没有人提到反跟踪技术,
STM32 可是可以在 RAM 里运行程序哦, ram 里可是可以修改程序自身,重新执行的
 楼主| hotpower 发表于 2010-8-21 11:41 | 显示全部楼层
香主俺请教一句:
在ISP状态也可以读出UID吗???

若不能则批量加密就糟糕了~~~
香水城 发表于 2010-8-21 11:51 | 显示全部楼层
香主俺请教一句:
在ISP状态也可以读出UID吗???

若不能则批量加密就糟糕了~~~
hotpower 发表于 2010-8-21 11:41


STM32可以在ISP状态读出电子签名,但如果设置了读保护之后,在ISP状态就不能读了。
李冬发 发表于 2010-8-21 13:20 | 显示全部楼层
香主没看懂我说的是啥?!
李冬发 发表于 2010-8-21 13:22 | 显示全部楼层
要是RAM过小,反跟踪强度就不高。
李冬发 发表于 2010-8-21 14:02 | 显示全部楼层
好像还没有人提到反跟踪技术,
STM32 可是可以在 RAM 里运行程序哦, ram 里可是可以修改程序自身,重新执行的
airwill 发表于 2010-8-21 10:19

我应该提到的啊。
 楼主| hotpower 发表于 2010-8-21 14:05 | 显示全部楼层
STM32可以在ISP状态读出电子签名,但如果设置了读保护之后,在ISP状态就不能读了。
香水城 发表于 2010-8-21 11:51


这个是次序问题。
ISP可以先擦除再读出UID,然后开始干本主题的事情。
假若在ISP任何时候都可以读出UID,则无次序问题。

两者都有优缺点。

这回彻底明白了~~~
 楼主| hotpower 发表于 2010-8-21 14:07 | 显示全部楼层
我应该提到的啊。
李冬发 发表于 2010-8-21 14:02

这又将带来动态链接的问题,始终RAM肯定比ROM小。
香水城 发表于 2010-8-21 16:28 | 显示全部楼层
香主没看懂我说的是啥?!
李冬发 发表于 2010-8-21 13:20


说的是这个帖子?

最难的是读这个UID,用个函数?!那我就直接ret 0x0123456789ABCDEF12345678
李冬发 发表于 2010-8-21 02:12


我的理解是:最难的是伪装这个读UID的函数,怎么才能不让**者修改这个函数,直接返回一个固定的数值。你那句话跳跃性太大,不知道这样理解对不对。
香水城 发表于 2010-8-21 16:37 | 显示全部楼层
这个是次序问题。
ISP可以先擦除再读出UID,然后开始干本主题的事情。
假若在ISP任何时候都可以读出UID,则无次序问题。

两者都有优缺点。

这回彻底明白了~~~ ...
hotpower 发表于 2010-8-21 14:05


不光是次序的问题。

我认为,不管什么情况,ISP只是使用一次,即在芯片中没有任何程序时,烧写第一个代码,包括以后更新代码时所使用的IAP程序。芯片中有了第一个代码后,以后再有需要重新烧写代码,就是IAP程序的事情了,IAP程序一般都在用户程序的开始部分,重新烧写代码时,IAP程序是不会被改写的。

这里我需要对ISP和IAP做一个简单的定义:ISP就是使用厂商在芯片中固化的Bootloader程序对Flash进行烧写,ISP=In System Programming;IAP是使用用户自己编写的程序对Flash进行烧写,IAP=In Application Programming。这两者的区别是,ISP的操作过程和接口,我们是不能控制的,它是芯片的厂家定义好的;而IAP的操作过程和接口,是由用户自己定义的,你爱怎么样都可以。
McuPlayer 发表于 2010-8-21 17:24 | 显示全部楼层
如果CM3可以自定义Memory异常事件
把0x1FFFF7E8这个地址设为Memory Access异常,然后趴在异常中断里等他来
dadodo 发表于 2010-8-21 19:16 | 显示全部楼层
查找0x1FFFF7E8,换成&(0x0123456789ABCDEF12345678)
李冬发 发表于 2010-8-21 03:53


新手才会留下显眼的0x1FFFF7E8让人找到来改
eydj2008 发表于 2010-8-21 19:21 | 显示全部楼层
本帖最后由 eydj2008 于 2010-8-21 19:24 编辑

呵呵 这招有点管用 又增加难度了,不过烧程的时候,就要特别的烧录了。或许就像我开始说的放在EEPROM里面,后面加进去 让他们鬼找ID吧 呵呵 然后反汇编,读啊读,,累啊。。然后就睡着了。。。

26楼说的也正是我们担心的,“验证的过程必定包含解密”
但是如果你都不知道,什么时候验证,你怎么知道哪是验证解密函数呢?
香主这招 可破他这个。
 楼主| hotpower 发表于 2010-8-21 19:23 | 显示全部楼层
注册机---正版软件的墓地

本友情加密方法的核心为唯一ID+辅助ID构成128位的注册码。
它与目前流行的软件注册机制是雷同的。它需要用户在得到光盘(或免费下载)后,要想要全部功能必须到出版商网站注册。
这种注册机制实际是将用户的一些唯一信息(如硬盘、注册表、网卡)提交给网站,网站根据某一不公开的算法得到一串注册码返回给用户。
这个过程的自动完成软件就称之为注册机。
软件出版商手里肯定有合法的注册机,那么软件的解密者如果通过反汇编的跟踪及分析,则就会知道唯一ID和
辅助ID之间的关系即算法。他就会通过唯一ID推算出辅助ID来,即完成了对唯一ID的注册过程。

一旦推导出注册机,那么解密者将不会再考虑加密者复杂的加密和解密过程,这些过程对于拥有注册机的解密者而言它们不过是些不必要的延时过程。

网站的注册过程即注册机的算法运行过程对用户是绝对保密的,即合法注册机。
解密者根据N个合法注册用户及反汇编的跟踪和分析,就有可能推导出算法并且构造出伪造的注册机。

假若合法的注册机与伪造的注册机完成的注册过程完全一样,则伪造的注册机就可以离线替代网站!!!

故此本楼标题成立,注册机---正版软件的墓地

所以,本主题的加密方法最大的任务是混淆唯一ID与辅助ID之间的关系,使解密者难以从N个合法ID推导出算法。

菜农HotPower@163.com 2010.8.21 于雁塔菜地
eydj2008 发表于 2010-8-21 19:26 | 显示全部楼层
主要是有些关键技术 保密的  其它容易的程序 一抓一大把 ** 那个更累。。。
 楼主| hotpower 发表于 2010-8-21 21:54 | 显示全部楼层
mcuisp 发表于 2010-8-22 00:36 | 显示全部楼层
如果CM3可以自定义Memory异常事件
把0x1FFFF7E8这个地址设为Memory Access异常,然后趴在异常中断里等他来
McuPlayer 发表于 2010-8-21 17:24

干活前先关中断,看趴到啥时候,呵呵
 楼主| hotpower 发表于 2010-8-22 20:02 | 显示全部楼层
有些软件有内存异常捕捉功能,可惜大都是**软件。
airwill 发表于 2010-8-22 20:32 | 显示全部楼层
是啊,CM3 的 JTAG 可以自定义 Memory 读写断点
把 0x1FFFF7E8 这个地址设为 Memory Access 断点,就可以马上定位取 UID  的代码
即使你隐藏了 0x1FFFFF7E8 也躲不过
香水城 发表于 2010-8-22 22:13 | 显示全部楼层
是啊,CM3 的 JTAG 可以自定义 Memory 读写断点
把 0x1FFFF7E8 这个地址设为 Memory Access 断点,就可以马上定位取 UID  的代码
即使你隐藏了 0x1FFFFF7E8 也躲不过
airwill 发表于 2010-8-22 20:32


对不起,你的办法行不通!

在设置了读保护之后,STM32的JTAG接口就失效了,你根本就不能进行调试,更不用说设置断点了,:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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