代码改变世界

关于软件保护的矛与盾

2004-07-07 13:06  灵感之源  阅读(1624)  评论(6编辑  收藏  举报

这个世界,有矛就有盾,破解大师说:“Just a matter of time”,只不过是时间的问题而已。

每个作者都不希望自己的产品给破解,丢了客户,少赚了钱。软件保护应运而生,有能力的作者,自己给自己的产品添加了保护,方法很多,最经典的是用户注册,用户注册按区域可分本地注册和在线/联机注册,按功能可分安装注册和使用注册。

本地注册可再分:
1、作者给用户名和注册码,用户填写;
2、作者要求用户提供用户名,然后作者直接给一个许可文件,用户复制到指定目录便可;

联机注册可再分:
1、用户输入用户名和注册码,联机判断是否为黑名单,如果不是并且合法,则返回成功;
2、在线激活,这是Office/Windows XP开始搞的新玩意,Adobe公司也学了。实际上跟联机注册没有什么区别,关键是自动化高了点。

实际上,采用用户名和注册码这种做法比较多,导致了类似Serials这样的注册码大集合软件的出现,也衍生了大量的破解网站。

但大家也担心用户注册会给crack掉(如通用的注册Key、时间限制处理、直接修改注册判断等等),所以内置了各种反破解的方法:如

1、把关键字符串处理成不可阅读:这样那些依靠关键字来搜索破解入口的程序将难以实现其功能;
2、多点/随机判断:玩的就是抓迷藏,让你逮住了a也逮不了b;
3、伪装:写伪代码,让破解程序以为是判断入口;还有一种伪装就是把系统文件伪装成普通的Windows自带文件,让破解人无法识别是否为软件本身所有;
5、CRC:给每个文件弄个“身份证”,文件任何一个字节改动,都会判断出来;
6、内存中动态检测破解程序:程序从启动到关闭,始终检测是否有破解程序在运行,如果有,要么是关闭自己,要么是关闭破解程序;
5、关键数据加密:如使用次数、时间等等的限制,必然会要一个地方存储,如注册表、系统目录等等,破解程序就算能找到存放的地方,也难以破解。加密算法很多,常见的有xor、rc4、Blowfish、DES、Gost、Skipjack、Twofish、TEA、MD5(单向)、SHA等等,位数越高,越难破解。

如果作者不想那么辛苦,或者没有能力自己做,会选用保护程序,保护程序一般有以下几个功能:
1、用户注册;
2、时间、次数限制;
3、黑名单(用户和注册码);
4、版本过期;

之前的那个帖子,提到的Exe保护,就能实现上述的功能,而且是开源的。

有保护,也会有破解,我所接触的,是从DOS下就已经有破解这个东西了。

实际上,我觉得,知识产权是应该保护的,作者的辛勤劳动是值得尊重的。但要加密,如果需要1天的时间,解密,可能就只需要1分钟。这是作者的悲哀吗?不是的,因为这只是一个事实。我认为,作者与其把过多的心思放到保护上,倒不如放到业务逻辑处理上。

大家不是看见了Java如何容易给反编译?我自己就有破解Java的程序的源代码。连源代码能破解,那还有什么保护可言?.NET同理。

大家或许会说,不是有混淆器吗?是的,但仍然能反编译,现在的反编译功能牛得很。我尝试用Reflector反编译Reflector本身,代码出来虽然比较多的跳转和数字变量,估计用了混淆器,但核心代码仍然可见。

虽然我不鼓励大家搞开源,但我建议大家:多用心写代码吧!

附件:之前提到的一些加密代码(vb6/vb.net)