Internet网络的迅速发展,为软件高效传播开辟更加广阔的天地。如国内著名的金蜘蛛软件下载中心,就是一个典型的发布软件集散地。发布共享软件主要包括两种形式:日期限制形式和电子注册形式。日期限制形式允许下载软件的用户使用软件一段时间,如一个月等,如果用户认可该软件,可购买该软件的注册序列号继续使用;电子注册形式就是根据用户所用机器的硬件信息产生注册码,并在软件中对某些先进或常用功能进行限制,如果用户要使用其全部功能,必须将软件采集的有关硬件信息反馈给开发者,并交一定的注册费可获得该软件在自己机器中的注册码,才能正常使用。
前一种形式很容易给盗版者造成可乘之机,如果制作盗版者购买了一个注册序列号并公布于天下,则所有用户使用这个注册号都可进行正常使用;后者对用户来说注册手段稍显复杂些,对开发者来说也需要一定的编程真功夫,但其具有“八点锁紧”功能,防盗性却是不容置疑。本文根据自己的实践,将后者的实现过程介绍给想要制作发布共享软件的读者。
一、注册源
在WIN98/95的保护模式下,要根据硬件信息形成注册码可不是一件容易的事,在实模式下可通过硬盘端口1F6H和1F7H直接读取硬盘的序列号等信息作为注册的数据源,但这一方法在保护模式下却被亮出了红牌。利用BIOS中的主板序列号、BIOS版本序列号或主机出厂日期和标志等,完全可以作为注册码的注册源。如ROMBIOS中F000H-FFFFH区域中就存在与硬件配置有关的信息,还可以采集其它一处或几处主板等的信息作为注册码的生产基地。例如可根据F000H:FFF5H-F000H:FFFFH 中存放的主机出厂日期和主机标志值,产生应用程序的注册码。由于计算机产品的更新换代比较快,而且所有用户使用的计算机不可能配置都完全相同,所以注册码产生的源也不会完全相同。而且这些硬件信息内容在任何操作系统下均完全相同,兼容性非常好,更不会因为操作系统的更新而造成注册功能失效。
注册源确定之后,关键的问题就是共享软件安装程序如何采集注册源信息,并让用户将其返回给开发者。最简单的方法就是将采集到的注册源信息经过位操作加密后存放到一个文本中,形成注册码的数据源资料。这个注册源数据串可稍长一些,但不宜过长,使用户能够通过电子邮箱、电话或信件顺利转给开发者为宜。如笔者安装程序是用C语言编制的,如果将上述内存地址作为注册源,数据串文本文件名为KEYID.DOC,长度为20个字符。其示例代码如下:
FILE *fp2;
unsigned int keyrom[9];
unsigned char buff[0x410];
unsigned char pathstmp[80];
unsigned char path[80]={"C:\\WBCOOL"};
unsigned int far *pt=(unsigned int far*)0xf000fff6L;
......
outportb(0x21,0x2);
strcpy(pathstmp,path);
strcat(pathstmp,"\\");
strcat(pathstmp,"KEYID.DOC");
for(i=0;i<5;i++)
keyrom[i]=(*(pt+i)+0x1818)^0x5858;//第一级加密算法
sprintf(buff,"KEYID:%04x%04x%04x%04x%04x",
keyrom[0],keyrom[1],keyrom[2],keyrom[3],keyrom[4]);
buff[0x1a]=0;
if((fp2=fopen(pathstmp,"wb"))==NULL)
{
printf("FILE %s CREATE ERROR!",pathtmp);
} else {
fseek(fp2,0L,SEEK_SET);
fprintf(fp2,"%s\xd\xa",buff);
fclose(fp2);
}
outportb(0x21,0x0);