只要单片机具有真正唯一ID,就可以让加密坚不可摧
ID-->F1(ID) -----》IDX,
将ID通过自定义的一个算法F1,转换为一个整数IDX , F1为不可逆运算,也不能被轻易分析,这个实际上是容易实现的。
然后,将IDX保存到EEPROM或FLASH的任何地方,我们通过编一个函数 GET_IDX()能够读出这个数即可。
第二环:
再编一个函数:
int getmy_1(){
return F1(ID)-GET_IDX()+1;
}
int getmy_0(){
return F1(ID)-GET_IDX();
}
还有一些其他自定义的函数内:都可以直接使用(F1(ID)-GET_IDX()) 来替代0; 直接用(F1(ID)-GET_IDX()+1)来替代1;
第三环:
在程序任何需要使用到1的地方,都可以考虑使用getmy_1()代替。
或即使本不使用1,也可以来用上一下:
如: x=(x+1-getmy_1())*getmy_1();
或把 for(i=0;i<=count-1;i++)
改为: for(i=getmy_0();i<=count-getmy_1();i++)
抑或是:
指针 p++;可以改为: p=p+getmy_1();
或者:给函数传递变量时,传递方在 变量上+F1(ID), 被调用的函数在 变量上--GET_IDX():
比如本来是
void f1(){
int i,j;
....
j=f2(i);
}
int f2(i){
return i*2;
}
修改为:
void f1(){
int i;
....
j=f2(i+F1(ID));
}
int f2(i){
return (i-GET_IDX())*2;
}
如程序被非法复制:从ID无法得到IDX,那么IDX和F1(ID)不相等,
那么getmy_0不再是0,getmy_1不再是1,
程序将出现什么结果,谁都无法预料了。
---------------------------------------------------------
特点: 由于整个程序的加密,采用了“运算加密”的思路, 而非判断加密, 又没有用到任何一行 if判断,让解密者去想破脑袋吧。
即使猜测到有可能是这种加密思路,但是程序并不是基于if判断跳转,加密的作用自然分布在程序的各个地方,怎么去改,也很伤脑筋了。
直接修改getmy_1和getmy_0,这个首先是得分析出加密思路时才能作出的。
另外修改getmy_1和getmy_0只是干掉简单的部分。
还有一些是很难干掉的:
给函数传递变量时,传递方在 变量上+F1(ID), 被调用的函数在 变量上--GET_IDX():
比如本来是
void f1(){
int i,j;
....
j=f2(i);
}
int f2(i){
return i*2;
}
修改为:
void f1(){
int i;
....
j=f2(i+F1(ID));
}
int f2(i){
return (i-GET_IDX())*2;
}
另外,包括一些全局部变量的处理,可以在一些函数里面加上F1(ID);
在;另外一些地方进行-GET_IDX()的操作,并不会将代码简单集中放到一点的。
当然,如果精准的理解了整个程序的加密思路来说,这个也可以花时间干掉,不过这种加密方式本身目前是很少有人用的。
总之这种加密强度远高于简单的if比较方式。这个是一个新的基本思路,我举的例子只是一些简单的例子,完全可以自己做得更加灵活。
F1当然是一样的啊。只是ID不同。
顺便回复上楼,我有个前提: 只要单片机具有真正唯一ID,这个意思包含: 单片的ID不可以复制。
你说那个地方只是怎么去拷贝程序出来, 如果单片机具有真正唯一ID, 拷贝程序是没有用的。
大家先别拍砖头,思路很不错。从复杂度上已经增加到了一定程度。
建议做成强制in-line,否则对破解人来说太明显……因为大量的逻辑都指向某一个或某两个函数……
别低估干这行的智商——所谓没有金刚钻,不揽瓷器活。另外,用减法做比较也是业内常识……其它还有用异或结果是否为0……这些都是常见的特征……
对, inline!好思路, 必须的!
代码尺寸就上去了哦~ 执行效率也随之受到影响……不过如果有内部的什么1~4个周期的硬件CRC之类,就可以
解决效率问题,并且彻底把算法隐藏好……问题是……这个CRC硬件最好是不公开的才行……有一些芯片还有一些特殊矩阵转置(permutation)外设——也都没有对外公开……
隐藏加密算法的加密应用范围受到影响,因为用的人多了,自然就公开了,公开加密算法,没有密钥但依然很难解密的才有生命力,楼主这种思路是能够增加破解的困难,不过只能给盗版者加工资。当然有些小产品,利润和市场本来不大,盗版的成本太高也的确能保护可怜的程序员
所有的单机程序都是可以破解的,真正要保护自己的成果其实并不是通过加密,而是通过网络服务,这就像杀毒软件,只要联上网,主动权永远掌握在自己手中,这样的软件根本就永不着加密。就像微软的WINXP,再怎么加密也会被破解,但是只要联网,就可以黑你屏,就像单机游戏,今天做出来,明天就被破解,可是网络游戏,你见过破解的吗?除非入侵服务器,只要一入侵就被发现。所以单片机要想
单片机唯一ID加 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)