由于算法不同,注册密钥也不会完全相同;即使解密者知道加密算法的原始数据,由于无法知道加密算法,再加上加密算法贯穿于整个应用
程序,所以很难解密。因此,上述方法可以有效地实现跨越DOS、Windows 3.X和Windows 95平台的电子注册功能。此外,由于ROM 区关键点的内容不可能发生变化,所以即使将来推出新型的操作系统平台,这种方法仍然会很有效。
二、利用解密密钥建立联系
应用程序的加密部分完成之后,就需要建立相应的解密密钥。所谓解密密钥,就是将加密算法的原始数据经过加密之后,直接显示给用户并写入应用程序的相应位置。这样,用户既可以通过电话或
计算机网络给开发者提供注册功能的算法原始数据,也可以将安装后的应用程序寄给开发者。加密密钥既可以是ROM 区域内的原始数据(最好不要原样提供),也可以是由原始数据经过一定换算后形成的新的数据。因此,开发者提供的应用
程序中的加密算法部分应包括两部分:将机器ROM 区域内的数据经过解密密钥算法后形成解密密钥,再将解密密钥数据经注册算法后形成注册密钥。
应用程序中注册密钥的算法、注册密钥的长度、显示或提供给开发者的方式可自己确定,但解密密钥的长度和算法应与注册密钥完全相同。解密密钥也没有必要做得那么复杂,只需进行简单处理后就可以实现,例如本文
程序中实现的方法是将ROM中采集的数据简单地减去0x2020。
三、电子注册密钥生成
程序 开发者得到用户提供的解密密钥原始数据后,需要利用专用的密钥生成程序将其转换成注册密钥,并将注册密钥交给用户。注册密钥的算法与应用程序中判断注册密钥的加密算法程序应该完全相同。该程序一般应具有以下三种取得注册密钥算法原始数据的方式,以方便进行密钥的处理。该
程序的名称为READKEY.EXE,其功能如下:
(1)当READKEY不带参数时,则直接从当前机器中取得注册密钥;
(2)当READKEY带参数时,则从键盘输入解密密钥来获取注册密钥;
(3)当READKEY带EXE文件名参数时,则从相应应用程序的特定位置取得解密密钥,并生成注册密钥。
用户得到注册密钥后,重新安装一次应用程序或在需要输入注册密钥处直接输入密钥,则应用程序会自动将这个注册密钥存放到文件的特定位置处,当应用程序被他人拷贝到其它机器中之后,由于注册密钥随机器的不同而不同,所以应用程序的功能或使用次数仍然受限,要想在其它机器中使用该应用程序,则必须重新注册。
应用程序中解密密钥和注册密钥的位置,可先用特殊字符来标识,然后用DEBUG 等程序直接查找其位置,再修改其它程序中读取或写入数据的地址值。至于解密密钥显示和注册密钥的输入方式,可由开发者确定是用安装程序的方法还是在应用程序中直接处理的方法。
/*电子注册功能密钥读取程序清单READKEY.C*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void readser(void);
void readser1(void);
unsigned char Buff[18];
unsigned int keyrom;
unsigned int sum,sumi,sumj;
unsigned int far *pt= (unsigned int far *)0xf000fff6L;
unsigned int i=0,j=0,m;
unsigned char p;
unsigned int nn,nn1,nn2;
unsigned char rbuff[100],cc,cc1,cc2;
int fp;
void main(int argc,char *argv)
{ if((argc>3)|| ((argc==2) && (argv!='':''))){
printf("USAGE:READKEY 程序路径及名称.\n");
scanf("%s",rbuff); //手工输入加密密钥
printf("sss:%s,%u\n",rbuff,strlen(rbuff));
j=strlen(rbuff);
if(j!=