析论易语言软件加密技术(创世纪篇)

   学习易语言很久啦,全中文编程。

本文为全中文编写,不需要有PE文件格式知识,不需要掌握汇编或C语言的编程技巧,一些加密算法直接由易语言提供,特殊的加密算法大家可以翻译C语言代码、汇编代码或VB代码。

易语言加密技术有哪些:如下

一.易语言程序加密的目的 
1.保持软件的完整性 
2、保护软件开发者的权益 
二.易语言程序加密的原则
1.加密前要考虑周到且严密 
2.需要加密的内容要制定一个计划 
3.加密时制作好文档,以备以后的修改 
4.发布前问一下是否可以正式发布软件了 
三.防止程序内容被更改 
1.防止软件名称被更改 
2.防止窗口标题被更改 
3.防止LOGO图片被更改 
四.防止内存注册机 
1.不要使用简单判断 
2.采用MD5对比 
3.多注册码拷贝 
五.防止文件被暴破 
1.常用加壳软件介绍 
2.加壳后文件大小验证 
3.加壳后数据签名验证 
4.加壳后CRC验证 
六.防调试方法 
1.易语言的花指令 
2.反调试模块的使用 
3.反调试支持库的使用 
4.通过检查父进程得知是否被调试了 
5.使用多线程 
七.注册机制 
1.简单注册原理 
2.RSA算法注册 
3.数值计算支持库 
八.给奸人一些教训 
1.给破解者的教训 
2.给破解版使用者的教训 
3.行为不要过火 
九. 网络验证法 
1.实现的原理 
2.存在的几个问题 
十.加密狗加密 
1.加密狗的选用 
2.加密狗加壳法 
3.加密狗写存储器法 
十一.加密算法策略(暗桩) 
1.易数据库密码怎么泻露了 
2.利用吴氏加密算法 
3.海岛挖宝 
4.随机验证 
5.不同权限验证 
6.忽悠型的垃圾验证代码 
7.伪验证技术 
8.定时验证、延时验证、客户数据集累验证 
9.验证与专业知识相结合技术 
10.伪装,用易语言写自有支持库 
11.绝妙的暗桩设置 
12.发布不完整版本 
13.程序、数据结合加密技术 
14.自定义算法
15.加密框图 
软件加密目的:

1.保持软件的完整性

这里包括了文件名不被更改,文件版权信息不被更改,文件尺寸不被更改。
很多时候有的奸人拿到您的软件,他可以将文件名更改,将文件版权信息的字符串或图片更改,然后放上自己的东西,如放上病毒可以对其他电脑造成破坏,如果放奸人的弹出广告收益的是奸人,而不是作者。相反,使用这些软件的用户反而将作者痛骂一通,造成声誉上的损失。因此处于保护自己的完整权益来说,也是有必要保护软件的完整性。
例如QQ软件,曾出现过多款个人行为的补丁版,更改了QQ的一些信息与界面,为此QQ公司十分头痛,以后的一些事大家也知道,现在看是破解QQ的很少了,而且在安装QQ新版本时,它会检查是否有破解补丁存在,如果存在就不运行。

2、保护软件开发者的权益

也许你会说,一个不被破解的软件一定是一个没有加密的软件,那么看看下文您就会知道,那只是一个理想中的事情,除非您是有钱了没有事干的人,否则您开发软件的目的是什么我是很难知道的。
无论是个人还是公司,如果生产一个软件得不到收益,以及后继开发资金的鼓励,那么无疑这个软件是很难再开发下去的。这样的例子很多很多,我不想举例,国内已出现了很多软件的破解版,而一旦出现了破解,那么所造成的损失是非常大的。
 

二.易语言程序加密的原则

早先人们的加密方法是通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为“钥匙盘”。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的“钥匙盘”。
软盘加密还有其它一些技术,如弱位加密等等。
随着近年来软盘的没落,这种方法基本上退出了历史舞台。新的软件加密技术也越来越多了。

1.加密前要考虑周到且严密

说实话,有很多人在易语言论坛上发贴,说自己用易语言编写的软件有了破解,还非常高兴,有人用才会被破解,但我想,如果是很高兴的这样子,除非你的软件技术含量很低,或你是微软,想被别人破解,您不应该高兴,这有点象别人打了你一耳光,你还很高兴,你的知识产权或著作权已被奸人侵犯了,性质很恶劣,后果很严重。除了拿起法律武器,劳命伤财,还有就是加强加密方式。
如果被制作出注册机,情况是最糟糕的,作者需要全部更换全部用户的注册KEY文件,工作量 相当地相当地 大。因此一个好的软件保护发布前必须考虑周到,而且是面面俱到,否则出一个新版,发现一个破解,再出一个新版去修正,那样的事情是极其弱智的。

2.需要加密的内容要制定一个计划

一开始不明白如何加密的易语言用户,一般就找一下论坛上关于注册的例程套用到自己的程序中,认为这样就是加密了,实际上本节所要讲的是制作一个学习计划,将所有需要用到的知识与软件都收集到,这个计划就是一个加密计划,也是本书所要讲述的。

3.加密时制作好文档,以备以后的修改

在加密中有可能使用了多处加密,因此需要将文档写好,以防止以后忘记,实际上您可以在易语言中使用备注的方式作以说明,这些备注在编译时是不会被编译进目标EXE文件中的,大家可以放心写,同时也节省了写外部文档的时间。以后如果找时,可以直接搜索找到加密的地方。
 

4.发布前问一下是否可以正式发布软件了

制定一个风险评估标准,以考验一下程序的风险性,被破解的可能性,如果你是破解者,在不知道如何加密的情况下会如何去破解这个软件。
有一个参考的评估标准在下面。
共享软件注册加密自我评测表
评测方法:以下问题,若答案为是加1分。
1.  是否加壳?
2.  是否采用两种以上的不同的工具来对程序进行加壳/压缩?
3.  是否有软件自身的完整性检查功能?(CRC校验或其他)
4.  与软件保护相关的字符串是否有进行加密处理?
5.  是否采用了比较成熟的密码学算法?
6.  是否有多处验证点,调用多个不同函数或判断多个不同全局标志进行注册验证?
7.  是否有随机验证的功能?
8.  是否采用了在线验证功能?
9.  注册过程中是否尽量少地给用户提示信息?
10. 是否不依赖于GetLocalTime( )、GetSystemTime( )这样众所周知的函数来获取系统时间?
11. 是否有伪破解功能?
12. 是否在软件中嵌入了反跟踪的代码?
13. 是否对校验函数命名做了刻意隐蔽?
14. 是否将注册码、安装时间记录在多个不同的地方?
15. 是否在校验时故意加入冗余干扰代码来误导解密者?
16. 是否有自己独特的防破解措施?
建议:得分在6分以上才可以正式发布软件!
制作者:中国共享软件联盟·lcraz
 
 

三.防止程序内容被更改

从本节开始,已进入讲解加密的正题,但可能章节不必这样划分,即按加密/破解的方法来划分,如防反调试,反跟踪,反……。但笔者觉得,从一个一个小的知识点的进入是非常重要的。
下面的有些内容是我请教了酒桶醉死的经验后总结的,在此表示感谢。

1.防止软件名称被更改

这里是极为简单的方法:
判断(到大写(取执行文件名() = “我的程序.EXE”)
在上述中,为何使用到“判断”命令,而不是“如果”命令呢,大家可以想一下,“判断”命令的代码安全性要比“如果”命令高,这里不会举出一个汇编的例子,只要说明一下即可。即“判断”命令是多重分支结构,这样就增加了被破解的难度,因此,大家一定要注意这样一件事情,就是在进行加密比较时一定不要使用比较的语句,那样很容易被奸人使用破解工具下断点,那么正确的做法应该是如何的呢,请看下面代码:
计次循环首(到数值(是否注册成功()),)
全局_注册成功 = 1
计次循环尾()
通过上面的代码可以看出,这里没有使用判断语句,而采用了一个循环命令去参与。其中“是否注册成功()”确实是返回了一个逻辑值,但通过“到数值()”命令后就会被为0或1之间的一个数字,会用易语言的人都知道,一个循环命令中,如果循环数为1,会执行循环中的命令,否则为0不进入循环。生成机器码后,奸人会很难找到判断的汇编码,大大加强了保护性。
 
上述的基本方法是有了,但请您将这个方法隐藏于您的程序代码行的某一深处,实际上加密是各种方法的综合,现在所教的只是其中的一种,大家要将多种加密方式用于一个软件之中。这需要大量的时间学习与体会。
加密第1 定理:“如果()”语句一定不要出现在加密算法中。
加密第2 定理:用“循环”类命令代替判断语句。

2.防止窗口标题被更改

窗口标题是否被别人更改这个也可以通过与上述同样的方法实现验证。
判断(_启动窗口.标题 = “我的程序.EXE”)
大家也许会说,这些好象没有必要吧,谁会这么无聊,将软件的名称与窗口标题更改呢,大家看这样一个例子吧:有一个电脑培训班,采用了明伦五笔练习打字软件进行电脑培训班,他们破解了,且修改了明伦打字软件的版权信息,改为自己电脑培训班的标志,产生的教学效果即:学生认为这家培训班的技术实力很强,自己可以开发打字软件,而且经常弹出电脑培训班的标志与广告,产生了很好的广告效果,学生介绍学生,更多的学生参与进来了。
从上述事件看,很显然明伦打字软件的作者一点好处也没有,全部被破解者侵占了。因此一个好的软件保护必须是全面而且周到的。
另外,我要提醒大家的是,这样的语句也是非常不保险的,这样的话很容易被奸人改了字符串,以致于字符串也被更改了,或很快能找到比较的地方,从而轻松跳过去。较为理想的是将字符串打乱,即将“我的程序.EXE”以“字符()”、“取代码()”、“取反()”、“异或()”等命令用字符串相加的方法加在一起成为一个字串后再比较。
判断(取数据签名(_启动窗口.标题) = 取数据签名(“我的程序.EXE”))

3.防止LOGO图片被更改

有的人怕程序信息被更改,采用了图片显示程序标题的方式,这样这种图片较不易被奸人修改,但可能也有个别高手进行修改,因此图片的大小是知道的,这样可以用以下语句进行判断:
计次循环首(到数值(取字节集长度(_启动窗口。底图)=342488)),)
其中上述的数字是您已知的图片大小尺寸字节数,而不是乱写得来的。
也可以将图片放在易语言的资源中,直接进行比较。
计次循环首(到数值(_启动窗口。底图)=#图片1),)
以上方法虽然软件的体积大了一些,但带来的直接好处是,程序量一大,为破解带来了更大的困难,虽然损失了体积,但保证了安全。
你的关于窗口也要这样保护起来哦。
使用数据操作支持库中的“加密数据()”、“解密数据()”命令加密图片后存放在图片资源中,用时再解密显示出来。例如您的一些口令就直接用这个加密就可以了。解密时注意直接放在一行代码中比较,不要存到一个变量中,这样在内存中是找不到明文的。

四.防止内存注册机

“内存注册机”的原理就是在不用分析原程序的加密算法,实现直接读取原程序在加密计算过程中内存里显示出的明文注册码。
很多易语言软件加密时,算法是足够复杂了,但是就是KEY文是存在内存中的,这样就极易为破解。破解者只要写一个小程序,将这个内存地址显示出来,就一切OK了。特别是现在还有自动生成此类内存注册机的软件,只要填入内存地址,一下就生成了。

图:

解决这个问题的办法是推荐使用RSA注册法,如果你不想采用,那就要一些技巧了。
 

1.不要使用简单判断

不要使用如果这样简单的判断语句,使用循环命令进行判断。
在程序中与你的数据相结合进行判断最好。
 

2.采用MD5对比

你的注册码判断过程最好不要直接判断两个注册码文本的方法,正确的应该是取文本的MD5码,再用取到的这两个MD5码进行对比,即用户输入在注册编辑框中的文本信息与注册码文本信息进行MD5的直接对比。有时奸人会输入一个假的注册号,然后在内存中寻找这个数据后再进行分析,如果转换为MD5判断后,奸人在内存中是轻易找不到自己输入的数据的;
 

3.多注册码拷贝

即在内存中复制大量的注册码,在验证时随机取一个进行判断就可以。这样的好处是奸人要跟踪N多个注册码内存,不知在哪一处就验证了,这会让他烦死。
注册码分开放在N个地方也是个好方法。
 

五.防止文件被暴破

暴破是指破解者在模拟算法失败的情况下,恼羞成怒,狗急跳墙,一气之下暴力破解,将软件的壳脱掉,将要求注册的部分直接跳过去,这样直接产生的后果是文件大小被改变了。
首先要说的是:一般暴力破解前奸人都要跟踪查看你关于注册文字的一些关键字,请大家不要将注册信息的明文写在软件中,如“请注册”,“注册成功!”,“注册失败!”,这些文字请打乱后显示,有可能的话再加密,这样破解者不容易找到位置。奸人有时用一种简单的字符分析工具很容易找到这些敏感的字,因此尽量避免明文显示。
其次,不要使用信息框进行提示是否注册成功,这个信息框的API函数的使用情况很容易被奸人找到,可以单独制作一个提示窗口,上面显示注册成功与否加密后的文字,或直接在窗口中放一张提示是否注册成功的图片也行。
再次,你的注册码判断最好不要直接判断注册码,而是用两个MD5进行对比,即用户输入在注册编辑框中的文本信息与注册码文本信息进行MD5的直接对比。有时奸人会输入一个假的注册号,然后在内存中寻找这个数据,如果转换为MD5判断后,奸人在内存中是轻易找不到自己输入的数据的;
最后,你的注册判断不要使用“如果”这样简单的命令,而是使用前面所说的循环命令进行判断。
 
加壳软件的作用就是防止自己的程序被暴破。首先破解者会脱壳,如果有的壳很硬,或有加密算法,这为脱壳带来麻烦。其次,加壳后,在外部DLL中存一个MD5的校验,这将防止脱壳后运行,这样奸人就不能进行运行调试了。
加壳软件分为普通壳与加密壳。加壳可压缩文件大小,并且将一些本来清晰的字串进行了打乱的效果。
普通壳的作用是压缩资源,使文件尺寸变小,一般可使易语言缩小一半以上的尺寸,有的还可以减少系统资源占用。其他编程语言生成的EXE文件加壳后有可能变大,例如C语言生成的程序本来就小,压缩不了尺寸,这时再加上一个壳,尺寸反而会变大。
普通壳有:UPX,ASPACK,ASProtect,PKLITE,PECompact等。
加密的壳有:幻影,软件保护神等。
加密的壳可以提供直接的注册码功能。加密的壳由于是公用壳,很多人都去购买使用,一般容易被奸人看中脱壳,灵活性也差。如果被破解了,那么后果是十分严重的。因此推荐的就是一个普通壳,如UPX,然后进行MD5判断是否被脱壳就可以了。
 
下面,再介绍一下常用的加壳软件。图:

加壳软件,图

壳加完后,余下的工作就是防止脱壳了,一般来说,很多人都想要一个很强的壳,但一方面任何壳都有可能被破解,另一方面壳的兼容性就有很大的问题。
如采用强壳的《系统管理》采用了一个国外出品的强壳,确实是很难脱掉的,但由于破解版的原因,在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就是块数据的计算值,它的全称是“Cyclic Redundancy Check”,中文名是“循环冗余码”,“CRC校验”就是“循环冗余校验”。
CRC有什么用呢?它的应用范围很广泛,最常见的就是在网络传输中进行信息的校对。其实我们大可以把它应用到软件保护中去,因为它的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。呵呵,是不是很厉害呢?所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被奸人用16进制工具暴力破解过了。
CRC的本质是进行XOR运算,运算的过程我们不用管它,因为运算过程对最后的结果没有意义;我们真正感兴趣的只是最终得到的余数,这个余数就是CRC值。
 
易语言用户林子深提供了一个CRC32.EC的易模块,这个模块可以在论坛上或资源网上搜索到。大家可以直接拿过来用,导入易语言后如下图所示:

调用方式可为如下代码:
判断(取循环风俗冗余校验和(读入文件(取执行文件名()))= 18293823767)
其中上述的数字为主程序的CRC码值。
大家可以利用上述特性,即结果是数值的特性,不用进行比较,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否则就是被改过的。
例如下述代码:
程序被改 =  1
计次循环首(取绝对值(取循环风俗冗余校验和(读入文件(取执行文件名()))- 18293823767),)
程序被改 =  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取得进程内容。
大家可以搜索易语言论坛,用户名为“笨笨啊”,或关键字为“父进程”可以找到这个源代码。
下图是在易语言中调试程序时,父进程为易语言:


加密第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钥匙由“公钥”、“私钥”、“公共模数”三部分组成,为了生成符合要求的随机密钥,可以下载使用 http://dywt.com.cn/RSATool2v14.rar 第三方工具软件(内有操作说明)。然后将所有人员的“公钥”和“公共模数”成对向外公布,“私钥”由被授予人员自行妥善保管。
被授权人员使用“私钥”和“公共模数”对指定数据进行签署,然后将签署后的结果文本随同被签署数据一起发送,接收者收到后,使用该签署者公开的“公钥”和“公共模数”及签署结果文本对被签署数据进行验证,如验证通过则说明该数据必定是此签署者所认可的,且没有经过任何篡改。
说明二,数字签名用作软件 注册系统 的实现步骤:
1、欲注册用户提供注册信息(如硬件代码、用户姓名等);
2、软件作者使用自己的私钥对该注册信息进行数字签署得到签署结果文本;
3、将此签署结果文本作为注册钥匙文件发送给用户;
4、在用户端的软件使用相同的用户信息、注册钥匙文件及软件作者的公钥进行签名验证,如果通过表明已经注册,否则表示未注册。使用本方法在私钥未泄露的前提下,可以绝对避免破解者做出软件的注册机。
②RSA工具使用简介
RSATool工具运行界面如下图所示


RSATool 2.14 工具软件使用指南:
(软件下载地址:http://eyuyan.com/RSATool2v14.rar)
 
为了生成符合要求的随机RSA密钥,请类似如下操作:
 
1、在“Number Base”组合框中选择进制为 10 ;
2、单击“Start”按钮,然后随意移动鼠标直到提示信息框出现,以获取一个随机数种子;
3、在“KeySize(Bits)”编辑框中输入 32 ;
4、单击“Generate”按钮生成;
5、复制“Prime(P)”编辑框中的内容到“Public Exp.(E)”编辑框;
6、在“Number Base”组合框中选择进制为 16 ;
7、记录下“Prime(P)”编辑框中的十六进制文本内容。
8、再次重复第 2 步;
9、在“KeySize(Bits)”编辑框中输入您所希望的密钥位数,从32到4096,位数越多安全性也高,但运算速度越慢,一般选择1024位足够了;
10、单击“Generate”按钮生成;
11、单击“Test”按钮测试,在“Message to encrypt”编辑框中随意输入一段文本,然后单击“Encrypt”按钮加密,再单击“Decrypt”按钮解密,看解密后的结果是否和所输入的一致,如果一致表示所生成的RSA密钥可用,否则需要重新生成;
12、到此生成完成,“Private Exp.(D)”编辑框中的内容为私钥,第7步所记录的内容为公钥,“Modulus (N)”编辑框中的内容为公共模数,请将上述三段十六进制文本保存起来即可。
 
③一个简单的RSA注册机
例如:我们已通过上述RSA工具得到以下三个变量:
 
公钥:
20063
私钥:
7FC4638275AF6B27AFD040FED32A941D227154ECDE37ABFF73D72DB50F9FC70C75BC3AF0EC26016BC706D953A9C5D6831E0DDD27B42A182CB92A6E426693511E42EB0BF9D64459809D5EC305E13B2A85BA004BA934232305D3DA1205E7AD1D01744BBCF286B23D64CC68371FDD39DAA43861920DA3DE5F9335A77983BFD08A83
公共模数:
CEB774FCCE9DB84A4452A0774264FC55F35A8D8AA9D1FC5EBD3E0880B7B62A4EF834FD6E855CD84A4D04F3BBDE32180FC3EE45AB5582C2320A6575C6ECF923A24EAF59F22F930631347E0E3B0477A89FCE22FE741F5053EC5320AAF6489CC407056361F01E031A02DB52CB0CBDFBB11F72C340354C6CAB78D97630EB8A6A5431
初始化代码如下:




软件加密技术,还要防止别人破解。

end。

转载于:https://my.oschina.net/bigfool007139/blog/525023

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值