如何保护自己的共享软件
如何保护自己的共享软件
2010年06月02日
共享软件是软件业比较热门的话题,在中国更是如此。成千上万的程序员以极大的热情投入到这个领域来,都憧憬着用辛勤的劳动来获得丰厚的回报。但实际并非如此,相当数量的人都弑羽而归。究其原因,除了选题和技术(这两点不在本文的讨论范围之类),最主要的就是破解(Crack)了。
由于中国大陆相关法律的薄弱性和偏袒性,因此国内的盗版和破解现象异常猖獗。对盗版业(如果还能够被称呼为一个产业的话),我们有一个笑话,那就是:美国人的盗版业还处于原始时期(私下地自己破解),西欧的盗版业则是手工作坊时期(用CD-Record私下复制、交换),而中国的盗版业十分宏伟壮丽,已远远领先于他们,进入了大机器工业时代(专人破解、制作、测试,最后用专业压盘机大规模复制和发散),我们应该感到自豪,不是吗?呵呵,我们已经站到了时代的最前沿!
悲哀!不知您看到这里笑不笑得起来?好像盗版是挺自然的事,完全可以目无法纪。下面是中国软件(www.csdn.net)上一些做共享兄弟们的真实故事(原句):“发布了半个月,就被强行破解, 2.0改进的一点算法,不能被强行破解,但发布近一月就被写注册机。3.0才发三天,又被写注册机。这软件我花了三年时间写的。好辛苦,得不偿失。我真想不通,编程高手们都做破解高手去了吗?这些网站怎么不会被人黑?”还有:“才一个星期就被破解了,黑客还跑到我的论坛上散布注册码!”,“上午才提交到Download上,下午就有注册机了,那位老兄还给我做了一个俄文版!”,“太狂了,Cracker破解了我的软件后,还给我发了一份!全都是国内的人干的……”。而这种帖子几乎每天都有,哭天抢地,唉!我们得罪了谁?没日没夜地熬夜遍程,我们得到的就是连绵的挖苦和不尽的羞辱吗?
不!决不!我们有理由也有能力保护自己的劳动成果!但问题是:如何保护?关注国内,网上关于破解资料和教程俯拾皆是,而关于软件保护方面的资料则是凤毛麟角;唯一的一本《加密与解密――软件保护技术及完全解决方案》还算不错,可我怎么看都像是一本Cracker教程!共享论坛上也都只是涉及一点点毛皮(都怕暴露自己的算法),因此只有靠自己钻研。下面是我的一些经验,某些关键地方还有例程(Delphi代码,使用C++的朋友自己稍微修改一下)。^_^
一、字符串 字符串在注册模块中非常重要!当一个Cracker破解你的软件时,首先做的就是摄取你的字符串。比如他会输入错误的注册码,得到你关于错误注册码的提示,通常是“无效的注册码,请重新输入!”或者“Invalid key, please input again!”等等,然后用WinDASM或IDA Pro等静态分析工具在被他脱壳后的程序中查找那个字符串,找到后进行分析。如果你的注册算法很简单,那么你就倒霉了,注册机诞生了!
我们来做个实验,假设我有固定的注册码(序列号),而且这个注册码放在程序中:
procedure TForm1.Button1Click(Sender: TObject); begin if Edit1.Text 'Registration Code' then ShowMessage('无效的注册码,请重新输入!') else ShowMessage('注册成功!'); end;
然后用Delphi5编译、连接后得到一个.exe程序,用WinDAsm打开之,反汇编,点击“参考”――“串式参考”,就可以看到所有程序中用到的字符串,找到你眼熟的那一句“无效的注册码,请重新输入!”,如图01所示:
双击定位,就……注册码出来了!看到没有?上面绿色的“Registration Code”就是,如图02所示!
当然,一般的软件没这么简单,但这绝对是一个入口点,找到了入口,仔细分析程序的汇编代码,稍加修改就可以写出注册机来。拼音加加的注册机就是这样的,如果没有注册,它会修改你浏览器的首页,强迫你每次浏览它的网页。你可以随便用什么十六进制编辑器打开拼音加加的主程序,查找它的网址,找到后改为你的首页或“about:blank”就破解了,注册机也可以在5分钟内写出来!
因此,我们要保护我们的字符串!让Cracker连入口都找不到!方法很简单:加密字符串。将你所用过的所有字符串加密既可。如下:
const {加密过后的字符串} Str01 = '旺Q?量?T