版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
?易语言软件加密技术?序感谢朋友们的留言,以下排名不分先后。何金:一定程度的防破是必要的。goomoo:收藏,谢谢!!Liigo:这么经典的文章竟然不署名,佩服!笨笨啊:先收藏,应该是好东西。火儿:花了两个多小时才看完……看完才发现,自己的软件根本属于赤裸裸那型。icemanwd:世界上没有破解不了的软件,只能延迟破解的时间而已。走随小月:易书空前的著作,收藏,消化吸收中……yjls:写的太好,希望易公司今后发行易书里绑定。迪克:很好的文章,我已经学了几招。7620367:这个要反复学习。bbs171:真的不错。雷锋的四句名言是:对待同志要象春天般的温暖〔我在帮助易友们提高易语言水平〕;对待工作要象夏天般的炽热〔我是工作狂看我写这么多就知道了〕;对待个人主义要象秋风扫落叶一样〔对支持破解的人要坚决反对〕;对待敌人要象严冬一样残酷无情〔打击盗版是大家共同的责任〕。友情广告位全中文全可视跨平台编程软件——中国共享软件联盟htt易语言学习园地QQ:10153314易容大师中时空网络(://3cts)提供优质的虚拟主机效劳,杜雪QQ:2331096迪克条码清心网站BBS171:新网互联高级代理,CN可先注册后付款!舍曼妮QQ:366221
前言本文为全中文编写,不需要有PE文件格式知识,不需要掌握汇编或C语言的编程技巧,一些加密算法直接由易语言提供,特殊的加密算法大家可以翻译C语言代码、汇编代码或VB代码。本文中将“Cracker〞一词翻译为“奸人〞,意为“奸邪小人〞之义。本人对破解者一向深恶痛绝,有人说中国的软件开展中破解者有一份功绩,可我说这话不对,看看因盗版而产生的微软对操作系统及软件业的垄断,国内软件业在盗版的夹缝中生存……,如此下去,软件作者没有收益,将不再会有优秀的软件推出。防止盗版,匹夫有责,我想通过本书的推出可以加强易语言用户的加密能力,将盗版杀死在大家共同的手中。本书集成了多位作者的公开著述,在此一并表示感谢。其中局部文字内容根据易语言的特性作了修正。文中不署作者姓名,以防止奸人对他们的软件的刻意破解。随着采用易语言编制程序的人们越来越多,写一个软件易被奸人破解的情况也越来越多了,有个别用户甚至于疑心易语言是否有平安性。从技术性上来说,我只能说加密技术与编程语言无关,一个编程语言的平安性一般指所生成的机器码是否稳定、可靠,而不是防破解方面,如果想要很好地防止破解,那么掌握一门加密技术是非常必要的。本书考虑到使用易语言的用户大局部对PE文件结构不太熟悉,因此没有采用很底层的方法去教学,而是采用与易语言直接表达的方式试图说明如何加密。本书根本上是按以下的顺序进行讲解的:破解技术反破解技术1反破解技术2反破解技术3防改文件文件名验证LOGO图片验证窗口标题验证防改文件大小暴破加壳后数据签名验证加壳后CRC验证文件大小验证防调试花指令反调试模块反调试支持库内存注册机不进行判断,用循环代替字符串打乱器及时清内存算法注册机RSA算法数值计算支持库其他多处验证点随机验证命名刻意隐蔽
目录TOC\o"1-3"\h\z?易语言软件加密技术? 1一.易语言程序加密的目的 51.保持软件的完整性 52、保护软件开发者的权益 5二.易语言程序加密的原那么 51.加密前要考虑周到且严密 52.需要加密的内容要制定一个方案 63.加密时制作好文档,以备以后的修改 64.发布前问一下是否可以正式发布软件了 6三.防止程序内容被更改 71.防止软件名称被更改 72.防止窗口标题被更改 73.防止LOGO图片被更改 8四.防止文件被暴破 81.常用加壳软件介绍 82.加壳后文件大小验证 123.加壳后数据签名验证 124.加壳后CRC验证 13五.防调试方法 141.易语言的花指令 142.反调试模块的使用 153.反调试支持库的使用 154.通过检查父进程得知是否被调试了 165.使用多线程 17六.注册机制作 171.简单注册原理 172.RSA算法注册 183.数值计算支持库 24七.给奸人一些教训 241.给破解者的教训 242.给破解版使用者的教训 273.行为不要过火 27八.网络验证法 271.实现的原理 272.存在的几个问题 28九.加密狗加密 281.加密狗的选用 292.加密狗加壳法 303.加密狗写存储器法 30十.加密算法策略 311.易数据库密码怎么泻露了 312.利用吴氏加密算法 343.海岛挖宝 344.随机验证 355.不同权限验证 366.忽悠型的垃圾验证代码 377.伪验证技术 398.定时验证、延时验证、客户数据集累验证 409.验证与专业知识相结合技术 4010.伪装,用易语言写自有支持库 4011.绝妙的暗桩设置 4112.发布不完整版本 4113.自定义算法 4114.加密框图 42附录1加密已形成密码学 43附录2?如何用简单方法防止破解? 44附录3代码与数据结合技术 45
〔正文〕一.易语言程序加密的目的在此有必要说明一下为何要为自己的程序进行加密,初步认为有以下两点:1.保持软件的完整性这里包括了文件名不被更改,文件版权信息不被更改,文件尺寸不被更改。很多时候有的奸人拿到您的软件,他可以将文件名更改,将文件版权信息的字符串或图片更改,然后放上自己的东西,如放上病毒可以对其他电脑造成破坏,如果放奸人的弹出广告收益的是奸人,而不是作者。相反,使用这些软件的用户反而将作者痛骂一通,造成声誉上的损失。因此处于保护自己的完整权益来说,也是有必要保护软件的完整性。例如QQ软件,曾出现过多款个人行为的补丁版,更改了QQ的一些信息与界面,为此QQ公司十分头痛,以后的一些事大家也知道,现在看是破解QQ的很少了,而且在安装QQ新版本时,它会检查是否有破解补丁存在,如果存在就不运行。2、保护软件开发者的权益也许你会说,一个不被破解的软件一定是一个没有加密的软件,那么看看下文您就会知道,那只是一个理想中的事情,除非您是有钱了没有事干的人,否那么您开发软件的目的是什么我是很难知道的。无论是个人还是公司,如果生产一个软件得不到收益,以及后继开发资金的鼓励,那么无疑这个软件是很难再开发下去的。这样的例子很多很多,我不想举例,国内已出现了很多软件的破解版,而一旦出现了破解,那么所造成的损失是非常大的。二.易语言程序加密的原那么早先人们的加密方法是通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为“钥匙盘〞。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的“钥匙盘〞。软盘加密还有其它一些技术,如弱位加密等等。随着近年来软盘的没落,这种方法根本上退出了历史舞台。新的软件加密技术也越来越多了。1.加密前要考虑周到且严密说实话,有很多人在易语言论坛上发贴,说自己用易语言编写的软件有了破解,还非常快乐,有人用才会被破解,但我想,如果是很快乐的这样子,除非你的软件技术含量很低,或你是微软,想被别人破解,您不应该快乐,这有点象别人打了你一耳光,你还很快乐,你的知识产权或著作权已被奸人侵犯了,性质很恶劣,后果很严重。除了拿起法律武器,劳命伤财,还有就是加强加密方式。如果被制作出注册机,情况是最糟糕的,作者需要全部更换全部用户的注册KEY文件,工作量相当地相当地大。因此一个好的软件保护发布前必须考虑周到,而且是面面俱到,否那么出一个新版,发现一个破解,再出一个新版去修正,那样的事情是极其弱智的。2.需要加密的内容要制定一个方案一开始不明白如何加密的易语言用户,一般就找一下论坛上关于注册的例程套用到自己的程序中,认为这样就是加密了,实际上本节所要讲的是制作一个学习方案,将所有需要用到的知识与软件都收集到,这个方案就是一个加密方案,也是本书所要讲述的。3.加密时制作好文档,以备以后的修改在加密中有可能使用了多处加密,因此需要将文档写好,以防止以后忘记,实际上您可以在易语言中使用备注的方式作以说明,这些备注在编译时是不会被编译进目标EXE文件中的。节省了写外部文档的时间。4.发布前问一下是否可以正式发布软件了制定一个风险评估标准,以考验一下程序的风险性,被破解的可能性,如果你是破解者,在不知道如何加密的情况下会如何去破解这个软件。有一个参考的评估标准在下面。共享软件注册加密自我评测表评测方法:以下问题,假设答案为是加1分。是否加壳?是否采用两种以上的不同的工具来对程序进行加壳/压缩?是否有软件自身的完整性检查功能?〔CRC校验或其他〕与软件保护相关的字符串是否有进行加密处理?是否采用了比拟成熟的密码学算法?是否有多处验证点,调用多个不同函数或判断多个不同全局标志进行注册验证?是否有随机验证的功能?是否采用了在线验证功能?注册过程中是否尽量少地给用户提示信息?是否不依赖于GetLocalTime()、GetSystemTime()这样众所周知的函数来获取系统时间?是否有伪破解功能?是否在软件中嵌入了反跟踪的代码?是否对校验函数命名做了刻意隐蔽?是否将注册码、安装时间记录在多个不同的地方?是否在校验时成心参加冗余干扰代码来误导解密者?是否有自己独特的防破解措施?建议:得分在6分以上才可以正式发布软件!制中国共享软件联盟·lcraz三.防止程序内容被更改从本节开始,已进入讲解加密的正题,但可能章节不必这样划分,即按加密/破解的方法来划分,如防反调试,反跟踪,反……。但笔者觉得,从一个一个小的知识点的进入是非常重要的。下面的有些内容是我请教了酒桶醉死的经验后总结的,在此表示感谢。1.防止软件名称被更改这里是极为简单的方法:判断〔到大写〔取执行文件名〔〕=“我的程序.EXE〞〕在上述中,为何使用到“判断〞命令,而不是“如果〞命令呢,大家可以想一下,“判断〞命令的代码平安性要比“如果〞命令高,这里不会举出一个汇编的例子,只要说明一下即可。即“判断〞命令是多重分支结构,这样就增加了被破解的难度,因此,大家一定要注意这样一件事情,就是在进行加密比拟时一定不要使用比拟的语句,那样很容易被奸人使用破解工具下断点,那么正确的做法应该是如何的呢,请看下面代码:计次循环首〔到数值〔是否注册成功〔〕〕,〕全局_注册成功=1计次循环尾〔〕通过上面的代码可以看出,这里没有使用判断语句,而采用了一个循环命令去参与。其中“是否注册成功〔〕〞确实是返回了一个逻辑值,但通过“到数值〔〕〞命令后就会被为0或1之间的一个数字,会用易语言的人都知道,一个循环命令中,如果循环数为1,会执行循环中的命令,否那么为0不进入循环。生成机器码后,奸人会很难找到判断的汇编码,大大加强了保护性。上述的根本方法是有了,但请您将这个方法隐藏于您的程序代码行的某一深处,实际上加密是各种方法的综合,现在所教的只是其中的一种,大家要将多种加密方式用于一个软件之中。这需要大量的时间学习与体会。加密第1定理:“如果〔〕〞语句一定不要出现在加密算法中。加密第2定理:用“循环〞类命令代替判断语句。2.防止窗口标题被更改窗口标题是否被别人更改这个也可以通过与上述同样的方法实现验证。判断〔_启动窗口.标题=“我的程序.EXE〞〕大家也许会说,这些好象没有必要吧,谁会这么无聊,将软件的名称与窗口标题更改呢,大家看这样一个例子吧:有一个电脑培训班,采用了明伦五笔练习打字软件进行电脑培训班,他们破解了,且修改了明伦打字软件的版权信息,改为自己电脑培训班的标志,产生的教学效果即:学生认为这家培训班的技术实力很强,自己可以开发打字软件,而且经常弹出电脑培训班的标志与广告,产生了很好的广告效果,学生介绍学生,更多的学生参与进来了。从上述事件看,很显然明伦打字软件的作者一点好处也没有,全部被破解者侵占了。因此一个好的软件保护必须是全面而且周到的。另外,我要提醒大家的是,这样的语句也是非常不保险的,这样的话很容易被奸人改了字符串,以致于字符串也被更改了,或很快能找到比拟的地方,从而轻松跳过去。较为理想的是将字符串打乱,即将“我的程序.EXE〞以“字符〔〕〞、“取代码〔〕〞、“取反〔〕〞、“异或〔〕〞等命令用字符串相加的方法加在一起成为一个字串后再比拟。判断〔取数据签名〔_启动窗口.标题〕=取数据签名〔“我的程序.EXE〞〕〕3.防止LOGO图片被更改有的人怕程序信息被更改,采用了图片显示程序标题的方式,这样这种图片较不易被奸人修改,但可能也有个别高手进行修改,因此图片的大小是知道的,这样可以用以下语句进行判断:计次循环首〔到数值〔取字节集长度〔_启动窗口。底图〕=342488〕〕,〕其中上述的数字是您的图片大小尺寸字节数,而不是乱写得来的。也可以将图片放在易语言的资源中,直接进行比拟。计次循环首〔到数值〔_启动窗口。底图〕=#图片1〕,〕以上方法虽然软件的体积大了一些,但带来的直接好处是,程序量一大,为破解带来了更大的困难,虽然损失了体积,但保证了平安。你的关于窗口也要这样保护起来哦。使用数据操作支持库中的“加密数据〔〕〞、“解密数据〔〕〞命令加密图片后存放在图片资源中,用时再解密显示出来。例如您的一些口令就直接用这个加密就可以了。解密时注意直接放在一行代码中比拟,不要存到一个变量中,这样在内存中是找不到明文的。四.防止文件被暴破暴破是指破解者在模拟算法失败的情况下,恼羞成怒,狗急跳墙,一气之下暴力破解,将软件的壳脱掉,将要求注册的局部直接跳过去,这样直接产生的后果是文件大小被改变了。在此,先介绍一下常用的加壳软件。1.常用加壳软件介绍加壳软件分为普通壳与加密壳。加壳可压缩文件大小,并且将一些本来清晰的字串进行了打乱的效果。普通壳的作用是压缩资源,使文件尺寸变小,一般可使易语言缩小一半以上的尺寸,有的还可以减少系统资源占用。其他编程语言生成的EXE文件加壳后有可能变大,例如C语言生成的程序本来就小,压缩不了尺寸,这时再加上一个壳,尺寸反而会变大。普通壳有:UPX,ASPACK,ASProtect,PKLITE,PECompact等。加密的壳有:幻影,软件保护神等。加密的壳可以提供直接的注册码功能。加密的壳由于是公用壳,很多人都去购置使用,一般容易被奸人看中脱壳,灵活性也差。如果被破解了,那么后果是十分严重的。下列图是UPXShellv3.10软件的运行界面:下列图是ASPACK软件的运行界面:下列图是PKLITE软件的运行界面:下列图是PECompact软件的运行界面:下列图是“幻影〞加壳软件的运行界面:下列图是“软件保护神〞加壳软件的运行界面:壳加完后,余下的工作就是防止脱壳了,一般来说,很多人都想要一个很强的壳,但一方面任何壳都有可能被破解,另一方面壳的兼容性就有很大的问题。如采用强壳的?系统管理?采用了一个国外出品的强壳,确实是很难脱掉的,但由于破解版的原因,在WIN98下运行时经常会死机。正式版的价格也非常高,根本上要1000元RMB左右。而常用的普通壳虽然强度并不高,但通过易语言编程进行校验,可以保护您的壳不被轻易脱掉。加密第3定理:用最普通的壳,让弱手们去脱脱看!我还有校验等着呢。2.加壳后文件大小验证加壳后一些数据平安得到了保证。这包括一些没有加工过的字符串,例如:数据库密码,加密算法密码。加压缩壳后,易语言的EXE文件尺寸一般会变小,一般1.5MB的软件会变小为800KB左右。那么最常用的文件大小验证可以用如下易语言代码:判断〔取文件尺寸〔取执行文件名〔〕〕=843674〕上述代码中的数值是经过查看编译及加壳后文件属性大小生成的,但由此造成两种不方便的地方:一是由于易语言造成每次编译后的文件大小是不一样的,因此很难将这个数值取对,二是这个值放在哪里好,如果放在主程序中的话,那么每次生成的文件大小不一样,就会造成取不准,比拟不了的现象。建议大家在比拟时可以将代码写成以下形式:判断〔取文件尺寸〔取执行文件名〔〕〕≥900000〕通过以上运算符的改变后,根本上可以知道是否被脱了壳了,因为脱了壳后程序的体积会增加很多。3.加壳后数据签名验证易语言自带一个“数据操作支持库〞,根本可以满足平安加密的需要。如下列图所示:这里较为常用的命令是“取数据摘要〔〕〞,这个命令是采用了MD5算法,不同数据的MD5码都不一样,因此本命令可以用作保证重要数据不会被篡改。对于不同的数据,其得出的结果是不一样的。如果奸人将您的软件脱壳了、改动了,那么前后所取得的结果也是不一样的。“取数据摘要〔〕〞得出的结果是返回一段字节集数据的MD5数据摘要编码文本。一般是32位字节的数据。但这样带来了这样一个问题:即我们取得了加壳后软件的数据摘要,但是放在软件中后再编译再加壳再取数据摘要后,本次取值与前面所取的值是不一致的。采取的方法一般是将数据摘要文本存放在外部。一般会采用以下的方式:第一种方式:加密后存放在一个文件中。第二种方式:加密后存放在DLL中。第一种方式可以直接存在一个文件中,也可以夹存在其他文件中,如图片文件中,或音乐文件中,或DLL文件中〔硬写在DLL段中〕。第二种方式可取得主程序的数据摘要后,直接在DLL程序的源程序中写比拟代码。然后编译为DLL文件,由主程序调用此比拟DLL。这样保证了主程序的数据摘要与主程序别离从而加强了主程序的平安性。4.加壳后CRC验证我们很有必要给自己的软件加上更好的保护。CRC校验就是其中的一种不错的方法。CRC是什么东西呢?其实我们大家都不应该会对它陌生,回忆一下?你用过RAR和ZIP等压缩软件吗?它们是不是常常会给你一个恼人的“CRC校验错误〞信息呢?我想你应该明白了吧,CRC就是块数据的计算值,它的全称是“CyclicRedundancyCheck〞,中文名是“循环冗余码〞,“CRC校验〞就是“循环冗余校验〞。CRC有什么用呢?它的应用范围很广泛,最常见的就是在网络传输中进行信息的校对。其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节〔甚至只是大小写的改动〕,它的值就会跟原来的不同。呵呵,是不是很厉害呢?所以只要给你的“原〞程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比拟,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被奸人用16进制工具暴力破解过了。CRC的本质是进行XOR运算,运算的过程我们不用管它,因为运算过程对最后的结果没有意义;我们真正感兴趣的只是最终得到的余数,这个余数就是CRC值。易语言用户林子深提供了一个CRC32.EC的易模块,这个模块可以在论坛上或资源网上搜索到。大家可以直接拿过来用,导入易语言后如下列图所示:调用方式可为如下代码:其中上述的数字为主程序的CRC码值。大家可以利用上述特性,即结果是数值的特性,不用进行比拟,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否那么就是被改正的。例如下述代码:程序被改=1程序被改=0-跳出循环〔〕计次循环尾〔〕返回〔程序被改〕上述代码中,“取绝对值〔〕〞是将负数也转换为正数,以方便进行计次循环。上述代码中,数值型变量“程序被改〞为1表示没有被改动过,如果为0表示被改动过。返回的数值就可以进行一些陷阱的计算了。我的方案的缺点分析:CRC-32的值其实可以由奸人自行计算得出后,重新写入到程序验证处。这样的话,我们做的工作岂不是没有意义了?其实解决的方法还是有的,我们可以在计算CRC-32值之前,对参与转换的字符串加点手脚,例如对这个字符串进行移位、xor等操作,或者把自己的生日等信息参加到字符串中,随你的便什么都行,总之不是单纯的文件的内容就行了,然后在最后比拟的时候,也用同样的方法反计算出CRC-32值。这样得到的CRC-32就不是由文件的内容计算出来的,相信对破解者的阻力也会加大不少。总结:以上的方法大家都可以在软件中采用,最好写到一个DLL文件中,然后多放几个需要验证的子程序,随时以备调用即可。五.防调试方法1.易语言的花指令加花指令的方法有通用性,即所有的反汇编器都可以用这种方法来抵挡。这种方法主要是利用不同的机器指令包含的字节数并不相同,有的是单字节指令,有的是多字节指令。对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,也就是操作码的位置,这样才能正确地反汇编这条指令,否那么它就可能反汇编成另外一条指令了。并且,多字节,指令长度不定,使得反汇编器在错误译码一条指令后,接下来的许多条指令都会被错误译码。所以,这种方法是很有效的。易语言新版本中增加了自动插入花指令的功能,并且插入后虽然文件体积大了一些,但不会造成运行错误。大家可以点击菜单“工具〞→“系统配置〞。弹出的窗口如下列图所示。不采用花指令时,反编译出来的代码几乎是跟源代码一一对应的,这样一来我们的程序还有什么秘密可言呢?完全可以从反编译的结果中理解程序的功能。其实花指令就是人为地构造一些“陷阱〞和一些无用的字节,起到迷惑破解者和隐藏信息的作用。在这里,易语言为你构造了这些“陷阱〞。大家只要将上述配置项翻开就可以了。同时也提醒大家,在发布新版本时采用以下的方式:第一周发布的是花指令级别为1,第二周发布的是花指令级别为2,第三周发布的是花指令级别为3,第四周发布的是花指令级别为1……,周而复始,这样破解者根本跟不上你变换的速度。加密第4定理:每周发布一个新版本,让破解的速度赶不上发布的速度。2.反调试模块的使用目前易语言论坛上出现了一些模块或支持库,带有反调试的功能,当启用后,就会查看进程中有无调试器,如SOFTICE等调试工具,对易语言的调试也同样有效。由林子深提供的另一个模块:“星光灭绝〞模块大家也可以尝试用一下,为何说是尝试呢,这些模块并不稳定,并且极易造成WIN98下程序死机。并且翻开易语言也会认为是调试器,从而会自动退出。大家自己在易语言论坛上搜索吧。不推荐大家使用。3.反调试支持库的使用海洋的支持库也提供了反调试的功能,具体是海洋增强支持库。但要注意兼容性问题,一定要在多个操作系统下进行严格的测试后才能发布。4.通过检查父进程得知是否被调试了一般情况下,运行的程序的父进程是EXPLOER,在易语言中调试运行的父进度是易语言,而在破解人手中运行的父进程是用于破解的调试软件。因此我们就有必要判断程序的你进程是否是EXPLOER或易语言,如果不是,非常有很大的可能是在奸人的调试软件中被调用了,这时就好办了。哈哈。易语言论坛的用户“笨笨啊〞提供了一个取进程与父进程的模块,并且有模块源代码,程序主要是由API取得进程内容。大家可以搜索易语言论坛,用户名为“笨笨啊〞,或关键字为“父进程〞可以找到这个源代码。下列图是在易语言中调试程序时,父进程为易语言:下列图是易语言编译后运行,其父进程是EXPLORER.EXE,编号为860:加密第5定理:一个正常EXE的父进程是EXPLORER.EXE不过这里要注意的是:奸人有可能将调试程序的名称改为EXPLORER.EXE,这样可以伪装一下吗?不可以,你需要检查一下名称为EXPLORER.EXE的进程有几个,进程ID是不是一样的?如果有两个不同的进程ID,那么这时再判定就可以知道是不是被奸人调试了。5.使用多线程在Debug的手册里可以看到Debug工具的局限:第一个局限是只能下4个内存区域的断点,每个断点不能控制超过两个字节,这样内存断点不能控制超过16个字节的区域;第二个局限是对多线程只能同时跟踪一个线程。因此利用其的第二个弱点,大家可以多开几个线程进行来回验证。多线程的编程方法参看易语言。一般开5-8个线程就够奸人忙活的了。加密第6定理:使用5个以上多线程来回验证注册。六.注册机制作1.简单注册原理在易语言安装后的程序“\e\lib\krnln\samples\软件注册.e〞就是演示了软件注册的原理。其中有一个子程序是重复取硬件码的,存在取硬件码失败的情况,因此要重复多取几次,如果取失败就用一个默认的硬件码代替。这个大家一定要看一看,注册机的原理就是:用户在使用过软件一段时间后,认为软件较为理想,要求向作者注册,而此软件中提供了用户本机上的硬件号,用户将此硬件号发给作者,作者给出一个注册码,用户拿到此注册码后填写,软件就注册成功。注册码的计算是由硬件号产生的,计算过程只有作者知道。例如:用户机器上的硬件号为34,作者返回的注册码为1904。用户在注册码输入栏中输入1904,那么注册成功。作者是这样计算的,34X56=1904。那么软件中也是这样计算的。以上介绍的只是例子,大家也许会说,从1输到9999,总有一个会遇上的,但事实是硬件码不会这样简单,可以是16进制的,而计算也不会这么简单,可能会用上矩阵也说不定,因此相比拟而言,靠猜想的方法去破解是愚蠢的。下面看一下易语言自带例程中的程序代码,此为要求用户输入注册码时的判断语句:此为判断语句调用的返回注册码的子程序:通过以上检查是否输入的硬件码与注册码对映。而软件作者手上有一个注册机,可以生成此硬件代码,大家可以在此例程上加一个按钮,此按钮的代码如下:这样作者就可以很轻松地得到注册码,然后将这个注册码发给用户用于注册了。上述只是在一个理想的状态中实现的,即没有奸人对你的软件进行破解。如果奸人看上了你的软件,只靠这么简单的方法,那么一定会吃大亏的。因此大家在注册码生成的计算上要想尽一切方法使之复杂化,如:采用位异,采用加上计算数值,采用……有些方法将在后面章节中进行介绍。2.RSA算法注册①RSA简介使用RSA非对称密钥算法对指定字节集数据进行签署,支持32到4096之间任意合法的RSA位数,返回签署后的结果文本。说明一,电子签名系统简要实现方法:首先给所有具有签署权利的人员授予不同的RSA钥匙,RSA钥匙由“公钥〞、“私钥〞、“公共模数〞三局部组成,为了生成符合要求的随机密钥,可以下载使用://dywt/RSATool2v14.rar第三方工具软件〔内有操作说明〕。然后将所有人员的“公钥〞和“公共模数〞成对向外公布,“私钥〞由被授予人员自行妥善保管。被授权人员使用“私钥〞和“公共模数〞对指定数据进行签署,然后将签署后的结果文本随同被签署数据一起发送,接收者收到后,使用该签署者公开的“公钥〞和“公共模数〞及签署结果文本对被签署数据进行验证,如验证通过那么说明该数据必定是此签署者所认可的,且没有经过任何篡改。说明二,数字签名用作软件注册系统的实现步骤:1、欲注册用户提供注册信息〔如硬件代码、用户姓名等〕;2、软件作者使用自己的私钥对该注册信息进行数字签署得到签署结果文本;3、将此签署结果文本作为注册钥匙文件发送给用户;4、在用户端的软件使用相同的用户信息、注册钥匙文件及软件作者的公钥进行签名验证,如果通过说明已经注册,否那么表示未注册。使用本方法在私钥未泄露的前提下,可以绝对防止破解者做出软件的注册机。②RSA工具使用简介RSATool工具运行界面如下列图所示:有很多人说RSA工具不会用,其实RSA工具的使用方法吴涛已说明得非常清楚了。下面引用吴涛说明书的原文:吴涛写的RSATool工具使用说明书如下:RSATool2.14工具软件使用指南:〔软件下载地址:://eyuyan/RSATool2v14.rar〕为了生成符合要求的随机RSA密钥,请类似如下操作:1、在“NumberBase〞组合框中选择进制为10;2、单击“Start〞按钮,然后随意移动鼠标直到提示信息框出现,以获取一个随机数种子;3、在“KeySize(Bits)〞编辑框中输入32;4、单击“Generate〞按钮生成;5、复制“Prime(P)〞编辑框中的内容到“PublicExp.(E)〞编辑框;6、在“NumberBase〞组合框中选择进制为16;7、记录下“Prime(P)〞编辑框中的十六进制文本内容。8、再次重复第2步;9、在“KeySize(Bits)〞编辑框中输入您所希望的密钥位数,从32到4096,位数越多平安性也高,但运算速度越慢,一般选择1024位足够了;10、单击“Generate〞按钮生成;11、单击“Test〞按钮测试,在“Messagetoencrypt〞编辑框中随意输入一段文本,然后单击“Encrypt〞按钮加密,再单击“Decrypt〞按钮解密,看解密后的结果是否和所输入的一致,如果一致表示所生成的RSA密钥可用,否那么需要重新生成;12、到此生成完成,“PrivateExp.(D)〞编辑框中的内容为私钥,第7步所记录的内容为公钥,“Modulus(N)〞编辑框中的内容为公共模数,请将上述三段十六进制文本保存起来即可。③一个简单的RSA注册机例如:我们已通过上述RSA工具得到以下三个变量:公钥:20063私钥:7FC4638275AF6B27AFD040FED32A941D227154ECDE37ABFF73D72DB50F9FC70C75BC3AF0EC26016BC706D953A9C5D6831E0DDD27B42A182CB92A6E426693511E42EB0BF9D64459809D5EC305E13B2A85BA004BA934232305D3DA1205E7AD1D01744BBCF286B23D64CC68371FDD39DAA43861920DA3DE5F9335A77983BFD08A83公共模数:CEB774FCCE9DB84A4452A0774264FC55F35A8D8AA9D1FC5EBD3E0880B7B62A4EF834FD6E855CD84A4D04F3BBDE32180FC3EE45AB5582C2320A6575C6ECF923A24EAF59F22F930631347E0E3B0477A89FCE22FE741F5053EC5320AAF6489CC407056361F01E031A02DB52CB0CBDFBB11F72C340354C6CAB78D97630EB8A6A5431初始化代码如下:注册窗口设计界面如下:注册按钮代码如下:上面的程序窗口插在用户的程序中,当需要注册时即弹出注册。作者手中的注册机软件界面如下:〔注意保密〕生成按钮代码如下:〔注意保密〕上述程序已在易语言4.0中运行通过。运行抓图如下所示:加密第7定理:RSA算法虽然很强,但弱在钥匙文件如何保密上。④算法实现中的考前须知上述代码中取硬件码的命令没有采用重复取,而只取了一次,在实际操作中需要正规地多取几次,获取硬件码失败也要作相应的默认处理。并且硬件码好要转换为另一串字符串。上述代码中所有字串均未作分解处理,实际编程中需要分解,且分别隐藏到程序各处。最好也加上密。上述代码中注册码文本较长,可直接读取一个文本文件进行比拟。即生成的注册码存在一个文本文件中,在点击注册按钮后,直接找这个文本文件的内容进行比照。文本文件的文件名可以是硬件号的名称。上述是根本算法演示,其中的注册算法还可以再进行加工,变得更复杂一些。上述中注有〔注意保密〕字样的代码与程序需要软件作者严格保密,不对外公开。大家再看一个易语言大奖赛获奖作品:“家电维修〞的例子,大家也可以在易语言新建窗口中找到这个程序,看看注册窗口的代码吧,如果您按这样的做法去发布软件,会有什么平安性可言呢。⑤设计RSA的变形算法重要提示:上述是对RSA整体进行一次性验证,虽说RSA是一个非常强的加密算法,但是这样的算法太简单,很容易被破解,那么需要通过以下的方法进行变形。以下所举的例子只是一个参考,你自己的方法越乖僻越变态越好。例如,可以采用分解RSA算法,每次只验证一小局部,以保证在程序的各个地方进行不同种类的验证,返回的值有的可设计为数值型,有的可设计为逻辑形,以利于在程序中不同地方调用,调用后可以根据数据进行运算,如果是破解版,那么使用破解版的人得出的结果一定是错误的。采用双RSA密匙、多RSA码也是个好方法,但最好两者之间再混合一下,采用RSA与数值计算支持库混合的方法可以加强加密强度。另外,密匙字串需要分开存放,全局变量中放一些,程序集变最中放一些,局部变量中放一些,常量中放一些,字符串一定要打乱,不可存为一个变量中,还可以RSA之上再加密,如RSA密钥是加密格式的,验证完后立即清变量……要注意的事项还是很多,一定要考虑周密一些,即要到达加密的目的,也不要太复杂了,以免自己也被搞糊涂了。如果有错误,误将正版用户当盗版用户对待就不太好了。⑥⑦⑧⑨⑩3.数值计算支持库易语言提供的数值计算支持库很有特色,其特点就是可以计算任意位数,因此大家可以根据这个特性来制作加密算法,考虑到奸人如果制作一个注册机就必须去研究易语言,及易语言的数值计算支持库才能去破解,但即使这样,也不能轻松就能写出注册机,试想一下,数值计算支持库本身就花了很长时间写出,因此奸人们是无论如何也是制造不出注册机的。并且一般来说,奸人如果出注册机,一般都希望文件小一些,从而也不会用易语言写注册机程序,一般采用C语言写,即使写了也要带上很大的系统支持库与数值计算支持库,太累了吧,哈哈。在此建议的是将RSA算法与数值计算支持库相结合的方法,这样的注册机根本上就不会再有了,只要防止内存注册机出现即可。内存注册机的防止可以通过不进行判断的方式解决。而防止暴力破解是通过对软件加壳后,在外部CRC验证保证程序完整性,程序内部再多重检查,加上几个暗桩,这样通过层层把关,最终就可以确保万无一失了。由于PE文件格式的局限性,任何加密程序都有可能被破解,我们所要做的仅仅是加强加密的复杂度,让奸人知难而退,消耗他们的时间与精力,浪费他的时间就是在杀他。七.给奸人一些教训实际上,我们的用户已区分为以下四种人:共享试用者、正版注册者、破解使用者、破解版使用者。当我们需要给破解者一些教训时,一定要将正常用户区分开,否那么正常用户有所损失,那么就根本不会来购置您的软件,您的声誉也会下降的。1.给破解者的教训有句名言:“软件很生气,后果很严重!〞。给破解者的教训要深刻一些,最好让他刻骨铭心,永世不忘。对于一个破解新手来说,很草率地去破解一个成熟的软件,对他来说是灾难的开始,给破解者制造麻烦,让破解者知难而退是一件有乐趣的事。这事一定不要忘记做哦,否那么我这文章就白写了。一个通常的教训如下:但如果你想变态地去教训奸人,那么我也没有方法阻止你了,毕竟你已在授权文件中警告过他不要动你的东西了。哈哈。下面是将文件删除到回收站,及清空回收站的代码:2.给破解版使用者的教训上面是对于奸人的教训,但对于一般破解使用者来说,也要给予配当的惩罚,但不能太过严厉,不能对他们的机器造成严重破坏。一般来说给予一次广告时机,或设置一些小损失即可。常见的有以下,其他的请你根据你自己软件的内容进行适当的创意吧。第1种:建议发现是破解版使用者在用时,可为你的软件加一些贴面广告,这样您会有一些收益,以补充你的一些损失。第2种:建议一段时间让他正常用,这破解版使用者如果较多的内容,说明他很在乎你这个软件,并且认为破解正常,已可以正常使用了,这时等他的数据量大时,将数据库锁定,他一定欲哭无泪,只好请你帮他解锁,购置您的软件了。易表的作者就是用这种方法实际上这是一种暗桩操作,即在发布几个月后再检查是否是正版,或在数据库存储到一定时间后再检查是否是正版用户,这样的加密方法值得大家学习。可能您很生气,想让破解版使用者得不到好的下场,最好不要删除重要数据。且我个人是不建议大家这样做的。加密第8定理:加密的结果是双赢才行,用户真正认识到了来注册,同时也能用上正版了。3.行为不要过火作者给奸人一些教训是正当的,可是软件会存在BUG,写加密程序也会有BUG存在。如果将正版用户的数据损坏了就不太好了,毕竟大家还是要靠口碑生存的。即使您是对的,但如果盗版用户多,那么如果太严厉了,就没有人更敢用你的软件了。如江民事件,就是前车〔JU〕之鉴。如果您能搞出一个即让破解者假象破解,为你作宜传,而又能争取到用户,那样是最皆大欢喜的了。易表就是一个例子,他的软件外表上被破解了,但实际上还存在暗桩,结果用了一段时间后,用户的重要数据被锁定了,只能乖乖注册。加密第9定理:口碑好的软件才能传播得更广。八.网络验证法现在有的人说网络验证法是最可靠,且是从未被破解过的加密方法。确实这种方法很难破解,因为注册码始终是在作者手上的,这样怎么去破解呀。加密第10定理:一个好的网络验证法至今没有人能破解。1.实现的原理网络验证法有些类似于网络游戏中的验证。网络验证方法,即建立一个网络效劳器程序,由软件作者自己保管,运行于效劳器端,客户端通过编程放在共享软件中。客户所拿到的共享软件程序中带有客户端程序,当需要验证时,客户端的硬件码通过网络传送到效劳器中,效劳端程序将加密后的注册码通过网络传回给客户,客户软件中的客户端组件接收到后,在内存中解密进行判定,如果注册了就通过,否那么就失败。作者的效劳器端上保存了用户的注册码数据库,随时供验证之用。在此可以防止以下被破解的事况:首先,通过网络验证即使奸人拦截到了注册码,也是加密过的,如果去解密也很困难,并且效劳器是由软件作者保管的,这样奸人可能始终接触不到注册码。或者他要去学习网络拦截也说不定。其次可以预防暴力破解,软件作者可将重要数据直接放在效劳器中,通过不停验证取得数据,从而被破解的客户端被暴力破解后立即成为无效软件。再次,即使软件被破解了,软件的作者也可以较轻松地升级客户端程序,及升级效劳器端的注册码数据库,从而减少破解造成的损失,让破解者阴谋失败。最后,软件作者可以轻松看到监视客户端的使用情,如果发现有重复名称的验证,或不正常地取数据,就可以立即停止客户的使用。2.存在的几个问题1.用户的程序必须是需要通过上网才能使用的,不上网,将不能验证,也不能使用。2.软件作者必须要保证效劳器的稳定,如果效劳器死机或掉线,那么客户机将不能使用,因此也要具备一定的防攻击能力。效劳器维护人员技术要求较高,要有一定的效劳器反黑经验。3.网络验证也不能一次全部验证,这样并不保险,需要分段进行验证。并且给予暗桩的设计。4.可能存在客户太多,一个效劳器接收不过来,需要两个以上效劳器的情况,或就直接架设两个以上效劳器,用于备用。现在的电信与网通经常打架,可考虑一个接电信网,一个架网通网,以备不时之需。九.加密狗加密本文的目的是让大家了解加密狗,它并不是那样神密而可怕,大家一定要克服恐惧感哦。加密狗是个极其好用的工具,根本上如果用上一个好的型号的加密狗,可以为您省不少心,想想看吧,有一个技术团队在身后做支持呢。易语言论坛上有人说:“不要花太多心思到加密上,而是要完善软件功能!〞当然将心思放在加密上我也不想,这都是拜小人所赐呀。因此如果您想节约时间的话,只要买个好狗,加一个壳就可以了。加密第11定理:如果您想不要花太多心思到加密上而想要一个很强的加密,加密狗是最好的选择。说老实话,现在的狗都比以前好多了,以前还听说有狗被防制或模拟了,现在的狗呀,越做越好了。总之,大家放心用吧。软件狗是一种智能型加密工具。它是一个安装在并口、串口等接口上的硬件电路,同时有一套使用于各种语言的接口软件和工具软件。当被狗保护的软件运行时,程序向插在计算机上的软件狗发出查询命令,软件狗迅速计算查询并给出响应,正确的响应保证软件继续运行。如果没有软件狗,程序将不能运行,复杂的软硬件技术结合在一起防止软件盗版。真正有商业价值得软件一般都用软件狗来保护。平时常见的狗主要有“洋狗〞〔国外狗〕和“土狗〞〔国产狗〕。这里国外狗主要指美国的彩虹和以色列的HASP,国产狗主要有金天地〔现在与美国彩虹合资,叫“彩虹天地〞〕、深思、尖石。总的说来,加密狗在软件接口、加壳、反跟踪等方面技术较好,根本上复制很困难。1.加密狗的选用加密狗一般分为串口狗与USB加密狗。串口即打印口,为16针口可以同进串接多个串口型加密狗。如下列图所示:现在也已有一种微型加密狗的推出:USB口为直接插入USB接口,每个接口只能插一个。如下列图所示:从目前的资料来看,一般加密狗产商都想淘汰并口型的加密狗,而主推USB口的加密狗。一只USB加密狗的批发价现在大50元左右。USB设备是专门为多设备连接而设计,有着严格的标准,从接口本身就防止了设备间的冲突。所以USB狗不会与遵守USB标准的设备有任何冲突。而因为并口只是为单设备工作设计的,很多并口设备并没有考虑与其它外设公用并口的情况,为降低本钱,往往独占了并口资源,使得并口的其它设备不能正常工作。因此建议使用USB狗较好。USB接口本身具有电源线,可为外设提供稳定的工作电源,从而对USB狗的工作电压、功耗等要求大大降低,加密狗的工作条件得到很大改善。而并口本身没有电源线,并口狗要依靠并口的信号线或数据线提供电源,所以在因并口负载能力低等情况下,并口狗的芯片因得不到正常供电很难保证正常工作。因此建议使用USB狗较好。2.加密狗加壳法一般的加密狗软件都提供傻瓜加密工具:加壳工具。这种壳是针对加密狗进行的。加密狗有内嵌和外壳两种加密方式。外壳加密就是对exe、exp、数据文件直接进行加密的方式;内嵌加密是在各个语言环境中直接以函数调用形式出现的加密方式。操作系统支持Dos16/32、Windows3x/9x/ME/NT/2000/XP的各种版本,如有的狗提供有37种内嵌语言加密模块,四种外壳加密工具。加壳式加密的软件运行界面与前述的普通壳的加密界面是类似的,也是要提交需要加密的原文件,然后会生成加密后的新文件,这个大家不认为太神密了。内嵌一般采用供货商提供DLL,就是API调用,以到达调用加密模块的目的。各个狗的调用都不相同,一般会提供C语言或VB语言调用的实例,大家模仿这类程序即可。有论坛人士说:“心思放太多到反破解上也不是一件好事啊!〞,我觉得给别人破解了更不好,是吧!如果不想放太多心思在反破解上,建议还是采取加密狗加壳的方法,方便、快捷,其他时间就可以研究如何将软件完善就行了。因为有一个加密的团队在支持你呀。3.加密狗写存储器法有的加密狗带有存储器,大小不一,有的是1024字节,这样大家也可以将一些重要的信息放在这里面。实际上您也可以将RSA的一些数据放在这里,以供程序双重检查。同样也是通过DLL调用的。十.加密算法策略本章所要讲述的是:加密不要拘泥于一种形式,要懂得变化之道,这样才能让破解者无从下手,这是我的软件加密之最精髓的一点。前文所说只是一些最根底的知识,大家还需要一点变通之法,加密方法越奇怪越好,变态一些也没有关系。看过?倚天屠龙记?的话,可以想想张三丰教张无忌太极拳时的那段对话,哈哈。1.易数据库密码怎么泻露了易语言论坛上个别用户说自己的数据库密码被别人知道了,那么我们看一下他是如何加数据库密码的,代码如下:翻开(取运行目录()+“\工资库.edb〞,,,,,“K39DKEKD944〞,)好了,我们编译一下,编译成一个EXE文件,然后改文件后缀为TXT,这样我们就可以不用PE专业工具,而是直接用记事本翻开了。然后在记事本中搜索这个密码,大家看到了什么?看下列图中反白的局部:晕死,你这样编程,当然数据库密码会被别人知道了。将前述代码改动一下,将密码分解为假设干单个字符串,然后分别放于全局变量中定义一局部,再在程序集变量中放一局部,这样就不会有问题了。如下面的试验,只改动一小局部:口令=“K〞+到文本(13×3)+字符(68)+“K〞+“E〞+“K〞+“D〞+到文本(18÷2)+到文本(22+22)翻开(取运行目录()+“\工资库.edb〞,,,,,口令,)再按前述的查看方法,可以看到,数据库前后的密码被处理过的局部都看不到了,如下列图所示:大家应该明白了吧,如果上述代码全部处理好的话,一定不会让别人找到口令的。实际上,对于重要的加密口令来说,都需要分开存放,并且用取字符,位移或取反的方法,以及加减乘除的方法都可以得到一个隐藏很深的字符串。加密第12定理:相关加密的字符串一定要打乱加密。作业1:制作一个“字符串搅乱器〞,要求如下:输入一字符串或其他类型的内容,输出为经过“字符,取代码,取反,位或,位与,加减乘除,平方,开方〞等命令随机配合相加的易语言源代码。界面根本如下:作业2:制作一个内窥器,将你的密码或加密字存入,它可以自动分解,在编译好的EXE文件中查找是否有相同字符串。这是自己用易语言制作的一个工具,怎么样,比专用的工具还要好用吧。作业3:为了不给奸人创造温馨舒适的破解环境,我们要混乱我们的代码,将软件中所有的子程序名全部替换成随机生成的子程序名然后加上正常的备注。例如Func_3dfsa_fs32zlfv()这个函数是什么意思?恐怕只有天知道了。可以用易语言写一个易语言“名称混乱器〞,根本思路为:将易语言源代码复制为文本,然后用混乱器将名称一一对应进行混乱,然后粘贴回易语言中,这样子程序名称和变量名称等都变为不可预知的字符了,因此加强了保密性。但注意,只有当你要发布软件时才使用之,而且一定注意备份源代码。否那么当你看不懂你自己的代码时可别怪我呀!字符串位置内容是否在EXE中找到是否在资源骇客中找到组件名称属性可看到组件标记属性组件内容属性组件标题属性菜单名称组件列表工程属性可看到全局变量名称看不到全局变量值内容程序集变量名称程序集变量值内容局部变量名称局部变量值内容常量名称常量值内容可看到自定义数据类型名称DLL命令名称可看到DLL库文件名在DLL库中对应命令名DLL参数名图片资源名称声音资源名称程序集名称子程序名称子程序参数名称子程序变量名称模块引用名称过滤器内容可看到信息框文本可看到2.利用吴氏加密算法我们将吴涛在易语言中提供的自有加密算法称之为吴氏算法。吴涛提供了两种加自有加密算法:一种是易数据库的加密。还有一种是配置菜单中的易语言源代码口令保护。易语言的易用性就在这里了,大家一定要充分利用这些现成的东西。使用易语言自带的易数据库的加密功能目前是非常可靠的,这是吴涛研制的自有算法,目前还没有破解易数据库的工具推出。这样就使得一些重要的东西存放在加密后的易数据库中十分平安。易语言源代码口令保护也是一个吴涛自有算法,加密后的源代码连易语言公司也不能解密。因此我一般用它保护注册机和商业程序,所以我的注册机和商业程序的源代码在我用过的每台电脑中都有,但口令只有我知道,没有口令保证打不开,哈哈。下列图为使用配置菜单后弹出的窗口,大家可以为易语言源代码加上保护口令。3.海岛挖宝听过海盗船长的故事吧,故事中海盗将宝物分开存放,这样即使找到一处其他地方也没有损失,而且不仅如此,他们也将藏宝图也分成一块一块的存放。金鹿鼎记的小说总看过吧,皇帝将藏宝图分八册存放,一一找到是非常困难的哦。韦小宝这个天才也花了两三年的时间才找到全部哦。软件中一些比拟重要的文本型字符的保护也是这样,你可以分开位置存放,分段、分开类型存放,用时再转换数据类型。分开存放是指分不同的全局变量、程序集变量与局部变量存放。加密第13定理:相关加密的局部一定要分开存放。对于RSA验证也要这样不要一次性地全部验证了,这样一点意义也没有。应该是软件启动时验证一局部,在软件运行中验证一局部。在Debug的手册里可以看到Debug工具的局限:第一个局限是只能下4个内存区域的断点,每个断点不能控制超过两个字节,这样内存断点不能控制超过16个字节的区域。假设你的注册局部有300行,你可以分成30个子程序调用或重复的子程序。放一些垃圾代码也不会损失什么。作业:将RSA验证的一次性验证改为分三次验证,并且每次返回不同的数据类型。4.随机验证随机验证很重要,例如你的一处验证是一直存在的,奸人就很容易地下断点跟踪了。因此在软件启动时进行一次正常验证外,其他情况下的验证最好是随机的,在30分之一或50分之一的时机进行验证,这样奸人会不停地试你的软件在哪一处进行了验证,因此破解的时间会相当地长。加密第14定理:足够多的随机验证足以上破解者累死。随机验证包括随机进入不同的验证子程序。或随机最大数大一些,只有30分之一的时机验证。或在窗口中放上一些颜色与底图一样的图片框,这样奸人不一定会点击这里,但用户万一点中了,就会触发验证。我们假设所有软件都能被破解,包括易语言在内,那么如果他破解的速度跟不上你发布新软件的速度,那么他永远在破最新版而累死。或者说他破解的时间比你写一个软件的代价大,这时还不如他直接写这个软件来得合算。反破解的任务之一就是让奸人累死,或浪费他的生命。下面的方法也可以使用:你可以在读到待验证的注册码、公钥、注册文件后,通过定义10000个数组,存入上述同样的内容以备以后进行验证,这最多浪费一些内存。验证时随机使用其中的一个进行验证,由于奸人不知你用的是数组中的哪一个进行的比对,而且是随机的,每次验证的值都不一样,不让奸人吐血才怪呢。计次循环首〔10000,计次〕数组[计次]=“123456〞’复制一万个公开注册码或公钥,破解者知道也无所谓。计次循环尾数组[取随机数〔1,10000〕]你不要立刻检查注册码,10000份拷贝你只要以后随机找一份用就行了,破解的人不知道你正在用的是那一个,同时你可以事先编好且运行时不断使用一些假的读取注册码数组的调用干扰破解者。这种方法对程序的性能影响微缺乏到,只是浪费一点内存。因为Debug对内存下断点的局限,这种情况他要下断点,累死的就是破解的人了。5.不同权限验证在启动时进行一次验证是非常必要的,这样让奸人知道确实是验证了,以让他心理放松警惕,而这次的验证只是一局部验证,并没有完全验证。还有的建议在启动时将注册信息读入后不要进行验证,保不定在哪里进行验证,个人认为这样让破解者提高了警惕性,会认为软件作者很有经验。麻痹敌人也很重要呀。例如,在启动时验证通过一次,验证级别加强一级,然后再在其他的地方再进行验证就可以了。下面代码是确认了一个级别计次循环首(到数值〔验证1〕,)已注册=1计次循环尾〔〕…………在另一个触发子程序中再通过这个级别再验证:计次循环首〔已注册〕计次循环首(到数值〔验证2〕,)已注册=2跳出循环〔〕计次循环尾〔〕跳出循环〔〕计次循环尾〔〕在其他触发子程序中再通过这个级别再验证:计次循环首〔已注册〕计次循环首(到数值〔验证3〕,)已注册=3跳出循环〔〕计次循环尾〔〕跳出循环〔〕计次循环尾〔〕有时也可以将级别降一降,怎么降,当然是不考虑级别直接验证了:6.忽悠型的垃圾验证代码前面已讲过花指令的原理,在程序中人为地再放一些垃圾代码以忽悠奸人也是一个好方法。垃圾代码就是一些假的验证代码,根本上是明文的,这样的代码上百上千,足以让奸人累死。加密第15定理:大量添加垃圾代码虽然是无奈之举,但很管用。作业1:制作一个常量迷幻器要求:制作一个常量代码自动生成器。可随机生成成百上千个易语言源代码形式,可直接拷贝到易语言中成为常量。变量也可以这样制作。写好这样一个程序后,就可以自动生成垃圾代码,然后复制,粘贴到易语言的常量表中即可。如下列图所示:变量也可以这样生成,不过生成的变量可以任意拷贝为全局变量,或程序集变量,或局部变量。制作时的名称可以为中文名称,直接编译后不会在EXE文件中找到同名的中文名称。因此您可以放心地将这些名称定义为:“垃圾常量1〞、“垃圾变量1〞等等以示与正常代码进行区别。作业2:制作一个代码迷乱器本次作业性质同上,也是自动生成易语言的一些无用垃圾代码,以迷乱奸人的破解,让他找到的全是垃圾代码,从而大大延长了破解时间。通过直接拷贝编辑框中的内容,粘贴到您的代码中,可自动完成任务,如下列图所示:上图所生成的是一些明文的加密方法的垃圾代码,让奸人去研究这些垃圾吧。上述子程序名称最好也有时调用一下,反正不会真正产生作用的,用多线程调用最好。或者您平时注意多收集一些别人用于加密时的子程序,拷贝到一个易语言程序中,保存,这样的代码作为垃圾代码放在你有用的程序中,虽然增加了一些程序的体积,但平安性是大大提高了。并且根本上没有牺牲软件性能与稳定性。7.伪验证技术还是先举一个例子说明吧,易表软件在10.0版本前已发现有大量的注册机存在,于是易表作者其后改变了加密方式,易表10.0推出后还是出现了注册机,并且这种注册机注册过的软件可以使用。于是有些用户用注册机取得的注册码使用了,过了一段时间,当盗版用户将重要数据存入易表后,突然有一天数据库被锁定了,于是只好注册易表,并且让易表作者为数据库解锁。从这里可以根本上判定易表新版本采用了伪验证技术,即在较为明显的地方提供了一级验证,这种验证方式没有经过太强的加密,而二级验证在一定的条件下才触发,而这个条件是检查到了用户输入了重要的数据,或大量的数据,或使用次数较多。根本原理是注册文件由前后两个注册码拼接而成。一般情况下只进行第一个注册码的验证,而当条件成熟时进行第二个注册码验证。这是一种双赢的策略,易表作者即收到了注册费,付费的人还会抱歉,并且感谢易表作者。哈哈,大家要学习这招哦。但本方法对于数据库应用及数据量大时检查最好,而对于一些没有生成数据的用户无效。加密第16定理:伪验证可以迷惑一般破解者,甚至自己发布一个伪注册机。8.定时验证、延时验证、客户数据集累验证过一段时间后再验证,如你在2005年1月发布一个软件,那么就内定2005年6月后触发验证时机。或您的软件是一个数据库产品,那么您可以在程序中设置如果数据库大于5MB时就进行验证,并且最好您能确定这些数据是不重复的,刻意参加的。如易表设置了伪验证,这时市场上出现了新的注册机,当用户用这个注册机后,提示是注册成功了,但当用户输入重要数据后的某个日子,突然打不开数据库了,用户很着急,因为以为是破解成功了,所以将重要的资料输入了,只能拿钱向易表作者进行注册了。而且还千恩万谢,懊悔自己不该用破解。哈哈,一举两得呀。这个方法对于数据库应用软件来说是绝好的方法。作业:制作一个算法程序放在你的数据库软件中,这个子程序可以统计你的数据库软件使用时,用户输入的是否是拷贝的东西,还是正常的数据。当统计到1000时触发验证。方法思路为:可以通过查看用户有没有使用复制与粘贴快捷键,或资料进行排序,如果有大量重复的,就说明是奸人在拷贝数据破解,否那么是一个资料一个资料的输入的,说明是正常使用的重要资料,这时进行比照就好了。本方法对有资料的破解使用者有极好的控制作用,通过第6条的伪验证技术与本技术结合,那么就可以知道是不是正版用户,并且可以锁定数据库,等他注册后再给他解锁。加密第17定理:加密的结果应该是双赢,伪验证是一个上策。9.验证与专业知识相结合技术将验证与专业知识相结合,让奸人必须学习专业知识后才能真正去破解,这样所花的功夫比自己写一个软件的代价还要大,而有的专业知识不是专家是不知道的,因此是一个较好的加密方法。前述中采用了“到数值〔验证1〔〕〕〞这样的代码返回的是0或1两者之间的一个数,可以用乘法进行混合计算,如:音量=播放位置X到数值〔验证1〔〕〕当验证正确时返回的是1,这时的结果是正确的,否那么返回0,这时的结果为0,是错误的。这样的代码可以混合到您的专业知识中,如:算命软件可将天干地支、生辰八字中的某个地方进行此类计算,计算类软件可以将某种特殊的计算过程如此结合计算,绘图类软件可将绘图中的算法局部参加此类计算,音响设计类、机床设计软件……加密第18定理:你知道的专业知识,破解者不一定了解哦。让专业知识与验证相结合吧。10.伪装,用易语言写自有支持库大家可以将DLL文件的扩展名改为易语言的支持库文件FNE扩展名,这样进行非独立编译后,与其他FNE文件混合在一起,甚至您可以用易语言写一个支持库,将其中一局部作为验证局部。易语言的支持库文件FNE文件其实就是一个DLL文件,只不过扩展名改变了而已,用易语言写支持库的方法金眼睛已发过一篇贴子,进行过说明,请大家在易语言论坛上搜索金眼睛的贴子就可以找到了。作业:找到金眼睛关于用易语言写支持库的贴子,并且自己写一个支持库。11.绝妙的暗桩设置应该想到的用代码实现的暗桩前面都讲了不少,下面是一些特别的暗桩供奸人品味的。大家可以在一些不起眼的地方再放一些暗桩,如:在窗口最小化事件中随机验证,如在某个组件鼠标被移动事件中验证,有时需要将数据完整性验证放在更高一级的验证中,不要一上来就检查文件是否被更改。同一验证可以使用屡次,这样奸人认为你已经验证过了,没有必要会再验证一次,而相反这时又产生了验证,让奸人防不胜防。如启动时就立即检查程序完整性,如果发现被更改,那就立即退出程序,而在一些子程序中也随机放这样的验证。更多的暗桩大家自己设计最好。加密第19定理:加密重要的是暗桩的设置,破解不完全就是一个无效破解。12.发布不完整版本有的软件作者在发布共享软件时,放在外面的是不完整版本,将更多的数据资料在注册后提供。这样做也可以,只是麻烦一些而已。如有的图形制作软件,将图片资源另外打包,用户注册后再给完全版的图片。也有的将DLL文件中的验证局部作了空处理,而在注册后提供真正的注册DLL文件及注册码。还有的直接将KEY文件放在了DLL文件中另外提供。加密第20定理:不要发布完整版本,以静制动。13.自定义算法前面讲过采用RSA与数值计算支持库交叉计算的方法,这就是一种自有的算法,如果能用上数值计算支持库中的矩阵、等高级功能就更好了。多重RSA交叉打乱:大家也可以多用一些RSA密钥,如用5个,10个都无所谓,重要的是将这些注册码都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论