好库网 好库网首页 | 我的好库
Delphi盒子

让自己的程序防破解-Delphi资料

发布者:delphibox
发布日期:2011/4/8 22:33:50   更新日期:2011/4/8 22:33:50
阅读次数:2683
评分:4.80
介绍: 让自己的程序防破解-Delphi资料
正文:

当发现自己为之工作了好几个月,甚至几年的程序被人破解的时候,所受的伤害是难以形容的。我作为一个共享软件作者,并不是因为我在乎那几块钱而已(我不想在这里做具体的计算,那会使我更加难过...),不,我总是使我的程序尽可能的便宜,使包括学生和自由软件作者在内的每个人都能用得起。

然而,我知道破解软件的魅力(如果你对程序破解者(Cracker)和黑客(Hacker)抱绝对的不宽容态度,那么请原谅。但是我的一位同学是心理学家,我们一直在寻找其原因)。破解一个受限制的软件程序就像解一个(有时是很狡猾)的谜语,而你可能沉迷于这种解迷的感觉(当我发现我祖母在几个月里整天沉迷在玩字谜游戏时想起这些的)。问题是(我们现在涉及到这种“游戏”的非法部分):程序破解者不会仅仅满足于只让自己了解他的“天赋”。他必须传播消息,发布他的“破解” (Cracker)(看一下破解包,多数是由以下部分组成:1、破解工具;2、简短的说明;3、一个巨大的文件,包含有似乎作者不亚于世界上任何伟人,或者被破解的程序像所有其它程序一样无法用那脆弱的保护方式来阻止破解者破解程序的进程的信息)。

但是现在,玩笑彻底结束了。发布这些破解包(让我们公正些:“研究其可能性“)给其他人,散布到网站上,新闻组,邮件列表,匿名FTP,光盘,"abonnements"以及任何其它地方,他们明显地破坏了所有那些花时间和精力在他们软件产品上的收益。虽然没有人可以说,所有收到或者下载破解程序的人永远也不会购买。但是散布破解程序的确是犯罪,就像有人在商场分发你车钥匙的拷贝——他是否以此赚钱又有何分别呢?

早些日子,我没有真正去花时间保护我的产品以防止被破解,但发现周围有它们的数个破解之后。我对自己说:为什么让它如此简单? 作为一个程序员,我当然知道,不,决不!——程序不可能是破解不了的,而且我知道,每个有吸引力的程序都迟早会有破解(至少是盗版或非法复制品)出现,但至少,我可以避免最糟糕的错误。

多数的高级语言程序员不再懂得汇编语言了,所以,他们使用的“保护措施“多数是很脆弱的。我对汇编懂得也不多,所以我决定开始仔细收集防破解(Anti-Crack)的技巧。我也努力“从另一方面努力学习”,你在这里看到的许多技巧我都是从典型的破解技术中捉摸出来的,包括网上各种各样的破解指南和阅读甚至是由专业破解者给出程序保护技巧(他们给我们这些技巧以给自己更大的挑战),我希望自己学得足够好,也想把我的经验在此与大家分享

有些技巧可能已经在其它文章中有所提及,但在此列出的最为完整。许多技巧都是针对Windows的,但他们可以被移植到其它操作系统中去。

这篇问答集是全新的,如果你觉得我遗漏了一些要点或者有用的、一个典型的Delphi程序员可以简单的加入其程序,以加强对程序保护的技巧,请告诉我,如果你允许,我会把它加到这里,否则我会告诉你我对它的体验。

不要用有意义的过程名字,例如: function RegistrationOK: Boolean;//译者按:注册确认

无论你在函数中编码多么奥妙和复杂,无论你相信于否一个有经验的破解者都会在10-20秒内删除之。

作为一种选择,你可以把程序中需要的一部分代码置入其内,如果破解者禁止了这个函数,你的程序将产生错误的结果。

不要用有意义的文件名比如License.Dat.。

用类似Asymetric(美国软件公司,代表软件Toolbook)的加密. 仅仅不寻常的文件名常常是不够的,好的加密(编码)可以让破解者忙几个月(如果他愿意)。

加上长时间延迟,当发现被自身被损坏时,不要发出警告,随后开始等待,也许是一或两天(破解者讨厌者东西)。

加入短暂延迟,当输入口令或做其它检测时,停一到两秒钟,使穷举无法继续。简单易行,但用处不大。

使用相互检查,在DLL和EXE中互相检查,这远谈不上安全,但可以使破解变得更困难。

在软件中使用自我修复,你知道就像纠错Modem和容错硬盘,这技术已经有许多年了,怎么没人用在保护软件上?这方法最大的优点是:如果破解者使用反编译工具,它会见到一串无用的列表。

修补你的软件!把代码变为每次调用不同的确认程序段,用“其人之道还治其人之身”。

把序列号放在不寻常的地方,比如数据库字段的属性中,经常听到或读到,“用一个DLL的名字,然后把它放到系统目录里”,听的太多了,不要用哦:)

把序列号放到不同的地方。

不要依靠系统时间,从一些文件取得时间,比如SYSTEM.DAT,SYSTEM.DA0和BOOTLOG.TXT,把它们和系统时间进行比较,要求它们比上次运行的时间晚(但是记住,许多用户近来在捉千年虫)。

不要用明文字符串告诉用户:"对不起,不过...(或类似的东西)"这些是首先寻找的目标,动态建立字符串或者加密它们。

用伪造的程序调用和字符串来灌水。

不要使用一个确认函数,每次你确认用户,把确认代码写在当前过程中。这样只是让破解者做更多的破解工作。

使用“保留字”,当使用硬密钥或口令时,使它们看来像程序代码或者函数调用 (比如.

73AF

或 "GetWindowText")。这确实工作的很不错,可以迷惑一些反编译工具。

没有“禁止”特征,如果你的程序有不保存数据版本(Crapware Version),不要包含“灰”色菜单项。没有保存项等于没有保存,就那么简单。

避免不必要的提示信息,唯一提醒用户他尚未注册的只是“关于”对话盒,此对话盒要动态建立,以便保密。这有两个原因:许多程序员有这样的观点:多余的提示信息会在他们的顾客中产生敌人,这是愚蠢的。一个可能是更重要的原因是:多余提示信息会引导对你代码的反向工程而且经常直接引导至你的程序保护代码。

经常更新,频繁的更新指:经常更换代码,典型(简单)的破解只修改你的硬字节代码位置,这可能当它还未面市已经过期了。并且保证上载到公共服务器,使你可以更好的控制程序,人们无法找到破解所针对的旧版本。是的,这样无法防止包括旧版本和破解包盗版,如果他们那么做了,你至少可以为把他们的硬盘挤满而做点贡献。

最后,花点时间考虑保护你自己的软件。它是否值得保护?它是否更应该改进你的软件?如果没人用你的软件,保护也就没有意义了,不要过高估计你软件“对世界的重要性”。

用一个连续的几KB长的数学公式使任何想破解它的人精神崩溃。这使用一个密码生成器几乎无效——阻止穷举攻击也是有效的。

小心运行时刻库!当写BETA版时,完全使用之,在正式版中重写部分函数,这至少可以使破解者的生活更艰苦些。

毁坏结果,毁坏结果有时是保护程序的有效措施。例如:想象一个图表程序,或者类似的程序,只是禁止打印然后根据一些注册码恢复打印是最常见的毁坏结果的程序。允许你打印。当产生要打印数据结构时,用某种方式破坏之,在打印前根据注册码或其它东西恢复。甚至,让破坏更奥妙,假设你有一个饼形图要打印,不改变任何东西,但加入一些不大的随机数值在你的数据中——这样就破坏了。图表看上去“不是很糟”,但是无论如何将无法使用(比如,如果是按20%的随机次序改变的)发现这样的保护,如果这和注册码相关联,无疑会使破解需要更对的时间,一是必须深入你内部的数据结构并找到可怕的破坏和恢复数据代码。

陷阱,一个我不太肯定,但听说有程序使用的方法:用CRC校验你的EXE文件,如果它被改变了,不要显示典型错误信息,等一天,然后用意思含糊的错误代码通知用户,当他们和你联系并告之错误代码时,你知道,是因为被破解了。记注:这样的陷阱可能被病毒或下载错误所触发,当你谴责可能是你未来的客户前,先考虑所有可能性。

不要依赖EXE压缩程序,几乎任何EXE压缩程序(Shrinker

WWPack32

NeoLite ——和所有著名的压缩软件)都有反压缩程序,所以,压缩程序的保护能力至少支持可配置的编码。以上(和其它)压缩程序的反压缩软件并未广泛流传,但是,不要依赖那些软件作为你程序仅有的一个“保护”。


评论 [发表评论]
账号 密码 还没帐号呢,现在注册一个?

免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。