CRC16 HEX文件自动修改生成器,让盗版者头痛去吧。

[复制链接]
楼主: plc_avr
手机看帖
扫描二维码
随时随地手机跟帖
流行音乐| | 2011-6-30 22:40 | 显示全部楼层
要实现防修改和防盗版,只需利用芯片内的ID和一个好算法就行了。楼主为什么要“每个芯片的HEX内容均不完全一样”这么麻烦呢?
而且“每个芯片的HEX内容均不完全一样”,从信息角度来看,这反而给解密者提供了更多的样本信息,这根本就是在帮助解密者。楼主花精力搞了这么一个程序,结果却是起了反作用,唉!

使用特权

评论回复
plc_avr|  楼主 | 2011-6-30 22:49 | 显示全部楼层
反作用?估计楼上的没有完全理解我的想法,哈哈。

使用特权

评论回复
流行音乐| | 2011-6-30 22:59 | 显示全部楼层
Hotpower 是密码专家,请他来为我们评评理,呵呵。

使用特权

评论回复
ahgao| | 2011-6-30 23:05 | 显示全部楼层
可以运行呀,只不过不能改写代码一句。
hotpower 发表于 2011-6-30 21:31

嗯,还是不明白。比如 02 03 05 是跳转到0x0503处,加密后变成了其他的,例如 43 37 89,那烧入MCU后MCU怎么可能运行得了呢?

使用特权

评论回复
autopccopy| | 2011-6-30 23:24 | 显示全部楼层
本帖最后由 autopccopy 于 2011-6-30 23:36 编辑
Hotpower 是密码专家,请他来为我们评评理,呵呵。
流行音乐 发表于 2011-6-30 22:59


我猜LZ赢。。。 :)

因为要与唯一ID关联,简便的有两种方法:一是修改HEX,保证写入每片MCU内的程序与其唯一ID可以校验。另一种是要使用内置或外部的EEPROM(FLASH),将检验要素保存起来。

而且唯一ID的应用举个例子:有10把锁,每把锁胆里的齿牙都不同(唯一ID),你就算偷偷从主人手里复制了其中一把锁的钥匙,但想打开其他9把锁都是不可能的。而且实际MCU的加密是重重校验反修改,增加反编译的难度,只要难度和**的金钱、时间成本足够大,就是成功。

使用特权

评论回复
plc_avr|  楼主 | 2011-6-30 23:53 | 显示全部楼层
TO:21楼: 只需利用芯片内的ID和一个好算法就行了。
------------------------
那每个片子ID不一样,是不是要多源码上面修改,那样每换个硬件在源码上改一下,不累死也烦死了。也可以在软件上处理,在软件处理也存在被解密者,用同样的方法修改,结果ID成了摆设。如果源码上面仅仅是修改个ID,那么2片以上HEX文件比对,估计就能防造出更多的HEX。所以引入随机数,将CRC和唯一ID结果保护起来,就是有100片以上同时被解密,HEX也不可能完全有重复的。这样分析起来,不晕才怪,呵呵。前提是你不要用完所有的FLASH空间。

TO:24楼: 比如 02 03 05 是跳转到0x0503处,加密后变成了其他的,例如 43 37 89,那烧入MCU后MCU怎么可能运行得了呢?
-----------------------
要修改的部分不是函数地址,而是CRC运算结果,不存在运行不了之说。

使用特权

评论回复
jeffrey_chow| | 2011-7-1 02:23 | 显示全部楼层
学习了,顶一下

使用特权

评论回复
linqing171| | 2011-7-1 04:53 | 显示全部楼层
不知道12是如何做到的,如果程序运行在pc,可以随意加壳。可是运行在flash上,就不可以了,像fiq一般都是在ram里面跑的,可以做处理。
有点迷糊了,感觉楼主的12还是防止不了。只是变的复杂了而已。
如果给我楼主生成的三个hex和三个芯片的对应id,随便一比较就找到需要爆破的点,虽然改了多项式,算法只是时间而已。像前两天分析的一个64k的hex里面,多项式用的5201。。。 。。。

使用特权

评论回复
nongfuxu| | 2011-7-1 05:43 | 显示全部楼层
支持一下,有时间学习一下

使用特权

评论回复
plc_avr|  楼主 | 2011-7-1 07:44 | 显示全部楼层
28楼:
   该软件本意是为个人用于一个项目上,有的地方图省事直接写在源码上面了。感觉还是搞成通用的比较好,更方便有此需要的网友,现已初步完成,共享的ID没处理直接存的。我现用的方法,ID是经过处理在存在FLASH里的,也就是真实的ID和存入FLASH的数不是同一个数据。也就是说,假如一段真实硬件ID为:12345678901234,经过一定的算法,变成了65489921332325,我将后面的数写填入唯一ID地址,但我只告诉你真实的ID,不告诉我写入的,我将后的经过处理的ID存入随机数中,就是有100个片子,也不可能直接通过数据比对找不出真实ID。

使用特权

评论回复
plc_avr|  楼主 | 2011-7-1 07:47 | 显示全部楼层
还有CRC结果也可以随意设定,也存入随机数中,完了过后每个HEX文件是多处的大片的不一样,处理起来也是相当有难度的,当然象菜农这样的高手除外,哈哈。

使用特权

评论回复
hotpower| | 2011-7-1 07:52 | 显示全部楼层
最关键的是“无缝隙”

使用特权

评论回复
t.jm| | 2011-7-1 08:26 | 显示全部楼层
TO:21楼: 只需利用芯片内的ID和一个好算法就行了。
------------------------
那每个片子ID不一样,是不是要多源码上面修改,那样每换个硬件在源码上改一下,不累死也烦死了。也可以在软件 ...
plc_avr 发表于 2011-6-30 23:53

我一开始的迷惑同21楼。
并且那每个片子ID不一样,是不是要多源码上面修改? --> 根本不需要啊!怎么会需要呢?
每个人都能想出一个利用内部ID加密的算法,对LZ实现加密的算法有些迷惑,可能LZ真正核心的部分没放出来吧!

使用特权

评论回复
hwk612167| | 2011-7-1 09:14 | 显示全部楼层
mark “无缝隙”是什么意思

使用特权

评论回复
sherwin| | 2011-7-1 09:29 | 显示全部楼层
顶楼主!多谢Hotpower大叔,呵呵!   :lol

使用特权

评论回复
headwolf_83| | 2011-7-1 09:43 | 显示全部楼层
批量烧写的时候,你的HEX,只要准备一种?还是怎么个烧法。

使用特权

评论回复
plc_avr|  楼主 | 2011-7-1 10:54 | 显示全部楼层
本帖最后由 plc_avr 于 2011-7-1 11:07 编辑

菜农指出最关键的是“无缝隙”概念:就是不要直接将CRC结果比较,那样必须会有if(A==B)或变种,这样别人找到分支,可以用NOP替代就完了。而是直接将CRC段的结果再与设定的CRC结果再运算一次结果必为0,不为0那就是HEX被修改。再用结果0与其它变量异或运算,则其它变量值并不会改。若改动一个字节,则结果不为0,那么CRC结果的结果再与其它变量异或,那么变量的值结果肯定会变,而且是不预知的......代码肯定不会好好运行的。比如定时原先1分钟,现在就可能变成随机数.....哈哈,目的达到了!

使用特权

评论回复
rockli| | 2011-7-1 10:55 | 显示全部楼层
不太明白,如果对于avr这类的单片机,没有唯一ID,直接复制了,怎样防盗版?

使用特权

评论回复
plc_avr|  楼主 | 2011-7-1 10:55 | 显示全部楼层
估计有不少人会晕.......

使用特权

评论回复
plc_avr|  楼主 | 2011-7-1 11:05 | 显示全部楼层
33楼:与你讨论一下:并且那每个片子ID不一样,是不是要多源码上面修改? --> 根本不需要啊!怎么会需要呢?
--------------------------------------------
请告之你现在的做法,唯一ID若不人为的在代码上改,那只能在软件上想办法,比如第一次上电自动更新FLASH或EEPROM等,再在其它地方做个标记。那么别人也可以用同样的方法更改,除非你在源码中更新一次过后,将更新ID部分的代码也一并擦除,否则会是一个很大漏洞的。但是这样也不能保证你的两个ID比较时候不被**者人为NOP所替代.......

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则