snoopyzz 发表于 2009-6-24 16:58:21

一个利用EEPROM加密的恶心方法...

用这种方法,
FLASH+EEPROM都被破解后
照原样烧到空芯片中,运行时能检查出是COPY货,然后随你愿意的时候#%^%$^%


在EEPROM中预先定义一个固定ID(长度你随意,每个芯片都一模一样)....
上电后,芯片如果检测到这个ID正确后,就开始在EEPROM中这个ID所在的几个字节不停的写入随机乱数(不要和ID重复),
重复20W次后(内置EEPROM一般是10W次寿命),看写入两个不同的数,看和读出的是否一致,
不一致就成功了,然后想办法提示下,比如点个LED之类...
每个芯片烧写好后,在出厂前都要做这种“预处理”

之后上电时,芯片检测到ID不正确,则写入一个随机数(与ID不同),再读,如果和写入的一样,则说明该芯片没经过“预处理”,计数一次
若“正常读写EEPROM”次数超过一定后,并工作一段时间后,发生些“很正常”的事就再“正常” 不过了...


写坏EEPROM,感觉很恶心,不过应该是可行的...就是写坏它需要时间可能很长...

snoopyzz 发表于 2009-6-24 17:03:48

而且随机数的原因,每片破解出来的EEPROM都是不一样的...
当然想一样也可以,不用随机数,用固定数去写EEPROM,
人家一般破两片,破出来内容一样,当然认为芯片软件上没任何“特殊处理”
这样可能更好些,不过为了记次数,使用次数不同的芯片,EEPROM还是不一样的...

而且在次数足够之前,不要做任何“正常”处理,给对方破解成功的假象...

等对方产品出厂了,被人买了一段时间后再时不时复位,罢工啥的...

======================================

[添加内容]
试了擦写30W次后,ATMEGA48的EEPROM仍是好好的,懒得继续了....
要花的时间太多了,不适用批量生产,所以还是用OSCCAL....
凑和下就行了...

YourARM 发表于 2009-6-24 17:04:51

写坏EEPROM不算慢,我曾经试过2008年ATMEL新版的24C512,一个单元的擦写寿命超过200万次,若干个小时就写坏了。

只怕这种失效不稳定,比如过一段时间后它又可写入一两次,那就惨了。

另外,人家可以把你这段程序nop掉。

snoopyzz 发表于 2009-6-24 17:10:49

看似破解成功后,几百次上电工作都正常,想必对方不会费那事再去看程序吧
等客户用段时间,估计一年后了,批量开始出问题,目的已经达到了...

用给定寿命的两倍去写,并且写完后要验证一下,而且还有数百次甚至上千数的记数
就算偶尔正常写入了一两次,也没什么关系...

liuhengming 发表于 2009-6-24 17:15:34

另外,人家可以把你这段程序nop掉。 有几个人有那个精力啊 破解都是拿代码 生产使用

Appcat 发表于 2009-6-24 17:22:07

罪过罪过!楼主还给人家留了一年的时间,我只留了3个月。

YourARM 发表于 2009-6-24 17:24:43

不得不承认,有些程序是值得反汇编并研究的。

并不是每个盗版的人都全盘照抄,有些人只取关键之处。

FREEXP 发表于 2009-6-24 17:27:14

罪过啊,好好的EEPROM就这样被你活生生的强J了!

snoopyzz 发表于 2009-6-24 17:35:06

肯研究我程序的,也算不错了,抄就抄了...
只恨那些几百元破解就想抢客户的...

bozai 发表于 2009-6-24 17:38:35

这个主意不错啊...

deepin 发表于 2009-6-24 17:51:31

哈哈,强人啊,这都想得出来!!!

zgx8 发表于 2009-6-24 17:58:40

那些破解的人太可恶了,是要整整

mail2li 发表于 2009-6-24 18:00:29

hehe 不新鲜了 很多年前21ic的坛子上就有人考虑这么干过了
我们但是还讨论过多快可以写坏某个存储器

banyan_city 发表于 2009-6-24 18:03:09

xixi

a13736925316 发表于 2009-6-24 18:14:42

把你的数据读出来,重新写入新的芯片里,ID也一样,这种加密不行的,早就被破解了,再说,我编个和你一样的程序也很快

fantaq 发表于 2009-6-24 18:14:58

学习一下。

snoopyzz 发表于 2009-6-24 18:26:57

14L没能理解此方法,估计没看完就自以为是了,

新的芯片EEPROM没有被写坏,原始代码不外流,出厂前都先上电初始化后,EEPROM内的东东已经和刚烧进去时不一样了,
而且有写坏的块,

在没有反汇编源码分析前,是不可能真正破解成功的

因为它拿到手的EEPROM中的数据已经没有初始了ID,所以不会造成“坏”了某字节的EEPROM...

liuhengming 发表于 2009-6-24 19:01:02

14L无知

zhang_mike2000 发表于 2009-6-24 19:17:20

请问楼主,要是盗版者也把EEPROM写坏了,然后再把从你那里copy来的HEX写道flash里面会怎样?

skysun 发表于 2009-6-24 19:23:39

同楼上问。

fantaq 发表于 2009-6-24 19:43:06

他这个是这样的。hex是根据写坏了以后的样子生出来的。克隆的片子再写坏,基本上坏的位置是不一样的。所以copy来的hex不能直接用。

fantaq 发表于 2009-6-24 19:49:51

但是我也有个疑问。
EEPROM是不是坏了的byte都变成00?还是某个bit变成0?
那么是稳定的状态吗,会不会最后都变成0x00了?
那么这个方法就不能用。

xingzhang 发表于 2009-6-24 19:57:10

觉得可行,可以实验下

cowboy 发表于 2009-6-24 20:01:25

把“24C04”的丝印刮成“24C01”,每次上电把24C04写整一页,如仿冒者用了24C01,由于每页字节数不同,写入24C01的数据就不一样。回读后你想干什么就干什么...

snoopyzz 发表于 2009-6-24 20:28:18

盗版者为什么要写坏EEPROM?

再说,又不是每个字节都坏。后面还有有用的数据呢...

snoopyzz 发表于 2009-6-24 20:34:58

23L的方法似乎不大可行,因为仿造者怕“24C01”中有初始数据,
所以一定会拆下来读出来再生产用的,
通用烧写器上一读,
24C04的密秘就可能会被发现了...

hsztc 发表于 2009-6-24 20:42:40

是个好办法啊哈哈

应该说盗版者不知道某个字节是坏的,哈哈,如果写坏两个字节那就更好了,重复的可能性是65536分之一。如果再来几个哈哈...

cowboy 发表于 2009-6-24 21:14:30

【25楼】 snoopyzz ,烧写器可以把24C04当成24C01读,没分别的,只是后面的3/4内容没读出来罢了。

zhiwei 发表于 2009-6-24 21:29:57

我现在已经开始用OSCCAL+自己设计的脱机批量烧录器来干活了,每片hex都不同。也不知道有没有人破解我的程序。

knight_avr 发表于 2009-6-24 21:42:43

MARK!
这个方法虽然恶心了点
但是低成本 且很有效

gmen_pliskin 发表于 2009-6-24 21:48:00

m8的写坏次数超过200w,不停地写也要10多小时
批量小的时候还可以,多的时候就不行

nhlijiaming 发表于 2009-6-24 21:52:54

不错的做法...再像示波器一样,加个开机次数计数进去,写进eeprom.这样也不会有谁觉得写进去eeprom会有什么用途,使用者可以在某个地方知道这台机的开机次数,然后...当程序发现这台机是copy的,开机计数又超过1****次....马上升压,给高压电容充电,自我销毁:)

Appcat 发表于 2009-6-24 22:01:09

其实这就是利用某些不可知或者随机分布的因素来进行加密,最早的同样原理加密出现在对软盘加密上,在软盘上用烫红的针尖点一下,可以造成一个位置随机的坏点,在软件灌录过程中记录这个位置,验证的时候往这个位置写入数据,再读取出来应该是错的,如果是正确的就说明被COPY了。这样随机的位置就和代码唯一关联起来了。

hsztc 发表于 2009-6-24 22:05:51

升压,没必要吧,这样可能会被分析出来,然后去掉那个电路。
我觉得,发现被COPY后,正常运行程序,等几个月后进入写EEPROM程序,一边正常运行,一边一直写EEPROM,把另一个存重要数据的EEPROM写坏,这样这个芯片对于运行你的程序来说已经是永久损坏了哈哈。
这个防止出问题后,盗版者再次烧录原程序那又得几个月后才坏。

AWEN2000 发表于 2009-6-24 22:53:36

别把自己给套牢了。

假如出点纰漏,你成千上万的正版产品要是出点问题,你就等着哭吧

hyz_avr 发表于 2009-6-24 23:01:36

方法不错..

sdmmqy 发表于 2009-6-24 23:14:08

cool

lxyppc 发表于 2009-6-24 23:46:03

如果你记录的EEPROM实效只是一个偶然的情况

比如你在25度 测试的/预处理的
别人在15度工作
发现25度不能正常写的EEPROM在15度又能工作了,比如延长10%的寿命
你怎么办?

yu_studio 发表于 2009-6-24 23:55:18

想法不错,记号

yaya001 发表于 2009-6-25 00:17:58

记号

nhlijiaming 发表于 2009-6-25 00:21:46

打开eeprom后物理破坏再封装..
或者定制一批损坏的eeprom

117433525 发表于 2009-6-25 00:58:41

能详细点吗,我没完全理解。

我的理解是:
1。用一个单片机或先在产品上下载一个预处理程序,进行把EEPROM用做ID号的字节写坏掉。
2。确定EEPROM有坏块了,然后再烧录正常的产品程序,正常程序重启后向ID位置写入数据,然后读出是否一致。
3。如果一致则是盗版,然后在EEPROM内计数。超过一定数就%^&*#@.
4。如果不一致,则是经过预处理的,可以正常运行。

如果是这样那也很容易破解掉的,一般的烧录器都可以测试到那一地址是有坏块的,如果也强行那那个地址写坏掉,那不就也没戏了吗?

snoopyzz 发表于 2009-6-25 01:38:54

41L理解的不正确....
程序只用烧一次,然后出厂前通电运行一次(就是运行时间有点长)...

117433525 发表于 2009-6-25 01:47:49

能详细点吗?
谢谢。。
觉得这方案很好。


我这样理解是不是对的:
1。在EEPROM内写一个ID(这个ID只有厂家知道)。
2。程序运行时如果ID相同,则把这个ID所在的EEPROM地址写坏掉(预处理)。
3。由于EEPROM内的ID数据已经损坏,程序不会再预处理了。
4。之后每次上电都向ID地址位置写入数据,再读出,然后判断是否一致,确定是正版或盗版。
5。如果是正版那么上电后写入的数据和读出来的数据是不一样的。
6。如果是盗版,写入的数据和读出来的数据是一样的。

snoopyzz 发表于 2009-6-25 02:41:28

试了擦写30W次后,ATMEGA48的EEPROM仍是好好的,懒得继续了....
要花的时间太多了,不适用批量生产,所以还是用OSCCAL....
凑和下就行了...

lihui_mc 发表于 2009-6-25 08:53:02

这想法好,也许写坏flash会快点,1分钟可以到1W次吧

yvictoryavr 发表于 2009-6-25 09:26:18

呵呵,把ID放在EEPROM,人家不用你的EEPROM里的数据呢??只要你的FLASH????

xiaojian 发表于 2009-6-25 09:38:42

这方法很久前在本网站已经看到有人提出来过,但是好像没有人用过,怕不可靠吧,想法很好

snoopyzz 发表于 2009-6-25 11:16:31

46L又是个没理解的,不过算了,反正花的时间太长,不实用...
阿莫要是看到,帮忙锁贴吧...

af00 发表于 2009-6-25 13:21:40

哈哈

mingyuexin1981 发表于 2009-6-25 13:25:57

mark

videre 发表于 2009-6-25 13:58:06

Maxim的1-wire有唯一ID的,可不可以用来做加密

csclz 发表于 2009-6-25 14:40:03

时间有点长

newbie 发表于 2009-6-25 16:13:49

yaojinhao 发表于 2009-6-25 16:23:19

关注一下!~

Appcat 发表于 2009-6-25 16:23:33

楼上上没明白。知道ID有什么用?

加密就是防小人的。

sharpufo 发表于 2009-6-25 16:37:26

现在小人都很有经验了,反编译一下,专门找到写EEPROM ,OSCCAL等等的关键地方,看看有没有“礼物”,有的话就用NOP掉了。

sange 发表于 2009-6-25 17:23:14

好方法,以后可以试着用用。。。

McuPlayer 发表于 2009-6-25 18:25:32

对,跟用针头加密软盘是一个道理,但这带有太多的不可预知银色,有可能会给生产带来不良的影响。

phone 发表于 2009-6-25 18:33:06

方法是不错,只是要写坏EEPROM花的时间太长,有一次我试着写坏一片m48,有一片两个小时就完成了,但另一片写了一个星期,还没坏。

snoopyzz 发表于 2009-6-25 20:21:39

一星期,残念...
我今天又试了30W次,一共60W次了,还是好的...

fantaq 发表于 2009-6-25 20:25:50

atmel是做flash起家的。
就是牛。

hsztc 发表于 2009-6-26 11:48:04

供电用5.5V试下EEPROM可能会比较容易坏

trueboy 发表于 2009-7-24 07:08:09

会不会破坏附近其它字节啊?

pinocchio 发表于 2009-7-24 07:35:12

楼主实际使用过这个办法吗?

zhwm3064 发表于 2009-7-24 07:53:02

提高电压
比如电压变成5V 甚至6V
这样 EEPROM是不是更容易坏
希望有人能试验下

这种加密的方法不容易破解
和别的加密方法合起来用 就更好了

如果破解的人 把你所有加密的方式都破解了,也就是说,他完全能看懂你的程序了(反编译),这样,对于他来说已经是没有用的了,他的水平,就是不破解也可以再编一个新程序来。

实际上,我曾反编译过别人的代码(51系列),想完全看懂别人的程序 ,真的是好难,我用了很多天才基本懂。当然,如果不不看他的程序,而是根据功能,新做程序,这个就很快了。所以说想从程序上弄懂 的方法来破解,这个意义不大,和新做程序来比,难度大很多的。

另外,我看了关于RAR加密方式 ,是一种到现在也没有破解的 加密方法,在单片机上面是不是可以用这种方式呢?它的方法是先解,最后再校验,没人能破解的----在破解前要人工输入一个密码,单片机上不现实。

chengtina 发表于 2009-7-24 15:49:37

mark

fylab 发表于 2009-7-24 16:02:37

用高压烧坏某不同的引脚,比如不能输出,然后从该脚用软件输出,从另一个脚输入。能正确得到结果的,表示已经被COPY。

albert_w 发表于 2009-7-24 19:41:09

【65楼】 zhwm3064 沉伦蜗牛
RAR不一样的,做个AES加密,没有密钥就是弄不出来。
单片机不同,他要在flash执行的。

找片加密存储器把关键数据放进去如何?难道要我放片智能卡在PCB上面?关键计算都做到里面去

qianhng 发表于 2009-8-24 20:00:26

唉!m48在4MHz下连续檫写了10个小时,不下千万次才永久写坏了该byte的一个bit,另有两bit在32度下正常,27度下错误!搞破坏怎么这么难啊?!

z_zt 发表于 2009-8-24 22:34:54

试过了,我搞坏M64里的一个BYTE用了二天半,呵呵!

DotNet 发表于 2009-8-25 02:27:48

几年前就试过了,不可行,有的EEPROM的烧写次数远大于手册中的次数。想写坏几个字节,有的写几天都坏不了。

qianhng 发表于 2009-8-25 23:39:19

tnnd,昨天写坏的那bit,又经过1天的檫写,居然.......
居然恢复为好的了,整个byte没有一点异常,晕..........

flyunlimit 发表于 2009-8-25 23:58:08

防破解还没结果,反倒坚定了我对EEPEOM的信心。EEPEOM是好东西啊。

Brant 发表于 2009-8-27 09:59:17

AVR要是作出向STC有唯一ID号就好加密了

puqingzj 发表于 2009-8-27 11:17:59

这种挥刀自宫的作法不可取

qianhng 发表于 2009-8-27 17:05:17

晕,这么说avr是史上最伟大的公公了:他至少能成功地自宫256*2次!

qianhng 发表于 2009-8-27 17:06:58

发个消息,那块m48还在被自宫中^_^

usingavr 发表于 2009-8-27 21:31:31

太有才了!

flywater 发表于 2009-8-27 22:17:02

很有创意,但并不太现实,量产是个大问题!而且还容易咬住自己--破坏的BIT并不稳定!
关注中.....

qianhng 发表于 2009-9-2 20:12:17

已经一周多了,前后檫写了2~3亿次了(中间换了几次电池)每檫写65536次检查一次,现在依然是写什么读出来是什么,到底它被写坏了没有?是不是当时读出正确,过一段时间读就会不正确?
再过几天如果还是这样,我就要放弃了。唉!

qianhng 发表于 2009-9-9 22:43:33

唉,放弃了,究竟是为什么写不坏呢?

qianhng 发表于 2009-9-9 23:27:09

最后,不死心,仔细检查了下,还是写坏了!汗!
原来是没仔细分辨,误导大家了,sorry!
其实在即写即读的情况下是正确的,但是过一会儿,就不正确了,汗!!
最后得出结论:多次檫写同一个数,数字中值为1的位不会写坏,值为0的位大部分会写坏(估计次数要是够了值为0的位都会坏)。坏的表现为檫后仍为"0",写"1"仍为"0"。

zhjun 发表于 2009-9-24 09:22:06

受到82楼的启发,可以有选择的破坏一些bit,破换的方法是擦除、写0、擦除,其他写1的位不会坏,形成一个key,将来用一个数值去写入后读出,根据结果可以判定程序是否是copy的。但是鉴于ee的破坏后的不稳定性,这种方法也不太完美。

JQ_Lin 发表于 2010-10-16 20:19:40

全部读完。学习了。

user1st 发表于 2010-10-16 21:06:07

这样子不好吧,要是别人看你的程序并且理解了你的意图,还不是没用。
还有EEPROM要是频繁操作坏的很神奇。比如在预处理坏了之后若是电地短路的故障且是批量的,你就亏大了。

QQ65411253 发表于 2010-10-16 21:23:03

楼上的方法全都不靠谱!这个已经有很多人用过了。没用过但是知道的人就更多了。拿到片子后发现其中的猫腻是很容易的。可以说,这个方法从公开的那一天起就失效了。
eeprom/flash的寿命超过标称值后并不会立即损坏,只是保存数据的时间越来越短。根据不同的工艺,有的是不能保存1,会慢慢变成0,一般是eeprom。有的是不能保存0.会慢慢变成1,一般是flash。反过来的也有。而且,大多数flash都具有自愈的特性,自愈和温度是成平方关系(简单来说是这样)。而且,并不是每个bit都会自愈,甚至自愈的速度、结果都不会完全一样。如果只是简单的写坏,自愈、温度、数据变化、电压等等各种因素会导致不可预料的情况发生。举个简单的例子,如果你在夏天写坏flash,到了冬天再检查,很可能就变成好的了。然后到了第二年夏天,不说了.....所以我说用楼上的方法全都不靠谱。
公开一个靠谱的方法,只说一半哦!
找一个MEGA8,按照数据手册的算法写一个全片擦除-XX操作-写熔丝位低字节-XX操作-写锁定位-XX操作-写熔丝位高字节-XX操作-全片擦除-XX操作......的程序。下班之前开始,然后回家吧。

天亮了,太阳公公出来了,袜子里面有圣诞礼物了!

kaitejin 发表于 2010-10-16 23:19:05

学习

qilujie 发表于 2010-10-30 10:41:50

读完了,方法很有意思但是不大可靠吧。万一你自己写坏的片子苏醒过来,发现自己是假的……悲剧大了

fts227 发表于 2011-4-21 20:52:53

不得不说,楼主是个人才

片羽之神 发表于 2015-10-12 09:49:41

有点意思!mark!!

ljy99731 发表于 2015-10-12 22:54:19

我觉得楼主的方法很好

jinbangzhou 发表于 2015-10-12 23:33:07

hsztc 发表于 2009-6-24 22:05
升压,没必要吧,这样可能会被分析出来,然后去掉那个电路。
我觉得,发现被COPY后,正常运行程序,等几个 ...

一个星期左右比较合适,待在现场不是,回程也不行{:smile:} ,服务费整死他

cnxh 发表于 2015-10-13 06:44:50

snoopyzz 发表于 2009-6-25 20:21
一星期,残念...
我今天又试了30W次,一共60W次了,还是好的...

写完一个有有没有延时稍微长度的时间再读,这个方法几年前我在论坛上看过,试avr128时,eeprom写入寿命到后,如果再一写入,马上读eeprom数据会是正确的,必须写入后延时后再读出,eeprom数据才出错
页: [1]
查看完整版本: 一个利用EEPROM加密的恶心方法...