我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 共享软件的注册加密法 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

klo



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
家族: YD一族
发贴: 473
威望: 0
浮云: 1105
在线等级:
注册时间: 2007-01-10
最后登陆: 2008-06-30

5come5帮你背单词 [ special /'speəl/ a. 特别的,特殊的,特别好的,格外的;n. 物别的事或物 ]


共享软件的注册加密法

Internet网络的迅速发展,为软件高效传播开辟更加广阔的天地。如国内著名的金蜘蛛软件下载中心,就是一个典型的发布软件集散地。发布共享软件主要包括两种形式:日期限制形式和电子注册形式。日期限制形式允许下载软件的用户使用软件一段时间,如一个月等,如果用户认可该软件,可购买该软件的注册序列号继续使用;电子注册形式就是根据用户所用机器的硬件信息产生注册码,并在软件中对某些先进或常用功能进行限制,如果用户要使用其全部功能,必须将软件采集的有关硬件信息反馈给开发者,并交一定的注册费可获得该软件在自己机器中的注册码,才能正常使用。

前一种形式很容易给盗版者造成可乘之机,如果制作盗版者购买了一个注册序列号并公布于天下,则所有用户使用这个注册号都可进行正常使用;后者对用户来说注册手段稍显复杂些,对开发者来说也需要一定的编[屏蔽]功夫,但其具有“八点锁紧”功能,防盗性却是不容置疑。本文根据自己的实践,将后者的实现过程介绍给想要制作发布共享软件的读者。

一、注册源
在WIN98/95的保护模式下,要根据硬件信息形成注册码可不是一件容易的事,在实模式下可通过硬盘端口1F6H和1F7H直接读取硬盘的序列号等信息作为注册的数据源,但这一方法在保护模式下却被亮出了红牌。利用BIOS中的主板序列号、BIOS版本序列号或主机出厂日期和标志等,完全可以作为注册码的注册源。如ROMBIOS中F000H-FFFFH区域中就存在与硬件配置有关的信息,还可以采集其它一处或几处主板等的信息作为注册码的生产基地。例如可根据F000H:FFF5H-F000H:FFFFH 中存放的主机出厂日期和主机标志值,产生应用程序的注册码。由于计算机产品的更新换代比较快,而且所有用户使用的计算机不可能配置都完全相同,所以注册码产生的源也不会完全相同。而且这些硬件信息内容在任何操作系统下均完全相同,兼容性非常好,更不会因为操作系统的更新而造成注册功能失效。

注册源确定之后,关键的问题就是共享软件安装程序如何采集注册源信息,并让用户将其返回给开发者。最简单的方法就是将采集到的注册源信息经过位操作加密后存放到一个文本中,形成注册码的数据源资料。这个注册源数据串可稍长一些,但不宜过长,使用户能够通过电子邮箱、电话或信件顺利转给开发者为宜。如笔者安装程序是用C语言编制的,如果将上述内存地址作为注册源,数据串文本文件名为KEYID.DOC,长度为20个字符。其示例代码如下:
Copy code
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
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
unsigned char Buff[18];
unsigned char Buff1[18];
unsigned int keyrom[9];
unsigned int sum,sum1,sumi,sumj;
unsigned int far *pt=(unsigned int far *)0xf000fff6L;
unsigned int i=0,j=0,m,imecom;
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>=2){
printf("KEYID:");
scanf("%s",rbuff);//接受键盘输入远程注册源
j=strlen(rbuff);
if(j!=20) exit(1);
for(i=0;i='a')&&(rbuff[i]='A')&&(rbuff[i]='0')&&(rbuff[i]0;i--) sImeG.ImeKey[16-i]^=(unsigned char)i;
for(i=0;iZcMyOk[i]) break;
}
if(i==16){
sImeG.ZcFlag=FALSE;
sImeG.ZcCount=0x0;
lpImeL->UseNum=0x0;
for(i=0;iUseNum>=0x3f80){
if(ImeCmpKey()==~0){
sImeG.ZcFlag=TRUE;
} else {
sImeG.ZcFlag=FALSE;
lpImeL->UseNum=0x0;
}
} else lpImeL->UseNum+=sImeG.iWord;
注册点二:
if(ImeCmpKey()==~0){
sImeG.ZcFlag=TRUE;
return;
} else {
sImeG.ZcFlag=FALSE;
lpImeL->UseNum=0x0;
}


五、注册口
对于共享软件,不管其实现何种功能,最好采取再线注册方式,这样可以减少用户很多重复操作。同时应该采取多个注册入口,如本人软件可以在增加或删除词组等时进行注册,只要一处注册成功整个软件就算注册成功,并注意对注册口输入的注册码进行再加密处理。
笔者共享软件中注册口代码示例代码如下:
Copy code
if(sImeG.ZcFlag==TRUE){
if((cCharCode==0x8)||(cCharCode==0x4b)){
if(sImeG.ZcCount>0){ //删除键处理
if(sImeG.ZcCountZcMyOk[sImeG.ZcCount]=0x0;
sImeG.iSel = 0x1;
sImeG.FScrCz = TRUE;
UpdateInList();
} else MessageBeep(-1);
} else if (cCharCode==0xd){//回车键处理
if(sImeG.ZcCount==0x10){
sImeG.ZcFlag=FALSE;
sImeG.ZcCount=0x0;
sImeG.iSel = 0x0;
ScrnCode(sImeG.iStart);
sImeG.FScrCz = TRUE;
UpdateInList();
for(i=16;i>0;i--)
lpImeL->ZcMyOk[16-i]^=(unsigned char)i;
lpImeL->ZcMyOk[16]=0;
for(i=0;iZcMyOk[i]) break;
}
if(i==16){//写入注册码
for(i=0;i64)){
wsprintf((LPSTR)sImeG.ImeBuff,(LPSTR)"系统路径非法!");
ErrMessageBox((LPSTR)sImeG.ImeBuff);
for(i=0;iZcMyOk[i]=0x0;
ShowMessTs(8);
} else {
lstrcat(FileName,(LPSTR)"\\");
lstrcat(FileName,(LPSTR)"WBCOOL.IME");
if((hTmp=_lopen(FileName,READ_WRITE))==-1){
wsprintf((LPSTR)sImeG.ImeBuff,(LPSTR)"程序打开出错!");
ErrMessageBox((LPSTR)sImeG.ImeBuff);
for(i=0;iZcMyOk[i]=0x0;
ShowMessTs(8);
} else {
_llseek(hTmp,0x12345L,SEEK_SET);//12345为注册码地址
_lwrite(hTmp,lpImeL->ZcMyOk,16);
_lclose(hTmp);
ShowMessTs(7);
}
}
} else {
for(i=0;iZcMyOk[i]=0x0;
}
ShowMessTs(8);
}
} else MessageBeep(-1);
} else if ((cCharCode>=0x30)&&(cCharCode='A')&&(cCharCodeZcMyOk[sImeG.ZcCount]=cCharCode;
sImeG.szSel[0][sImeG.ZcCount+6]=cCharCode;
sImeG.ZcCount++;
sImeG.szSel[0][sImeG.ZcCount+6]=0x11;
sImeG.iSel = 0x1;
sImeG.FScrCz = TRUE;
UpdateInList();
} else MessageBeep(-1);
} else MessageBeep(-1);
return(iRet);
}


总之,共享发布软件的制作应做到:注册源要选准、注册算法要多变、注册码要再加密、注册机要管好、注册点要多方位、注册方式要在线、注册入口要多点。这样才能确保软件的安全可靠。


[ 此贴被kangtalc在2007-01-10 21:05重新编辑 ]
顶端 Posted: 2007-01-10 19:57 | [楼 主]
我来我网·5come5 Forum » 程序员之家

Total 0.008044(s) query 4, Time now is:11-23 19:02, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号