如何在Windows应用程序中实现电子注册功能
2008-11-13 19:28:28 来源:WEB开发网四、应用程序中密钥的读取及限制
当应用程序进行电子注册之后,安装程序会将注册密钥写入到应用程序中。在应用程序中,判断是否进行注册的方法就是重新生成注册密钥并进行判断处理。注册密钥的读取函数如下:
void ImeCmpkey(void)
{//Windows下注册密钥的读取函数
static unsigned int sum,sumi,sumj;
static BOOL flag;
static unsigned int far *pt;
static UINT Sel1,Sel2;
static WORD Seg,Off,Start;
static DWORD Bas,Lim;
flag=TRUE;
sum=0x2020;
__asm mov Sel1,ds; //将DS作为模板
Sel2=AllocSelector(Sel1); //分配一个新选择符
if(Sel2==NULL){
flag=FALSE;
pt=(unsigned int far*)0xf000fff0L;
} else {
Seg=0xffff; //绝对地址段址
Off=0x10; //绝对地址偏移
Start=0x0;
Bas=((unsigned long)Seg)<<4|Start;
Lim=(unsigned long)Off-1;
SetSelectorBase(Sel2,Bas);
SetSelectorLimit(Sel2,Lim);
pt=(unsigned int far*)((((unsigned long)Sel2)<<16)|Start);
}
for(sumj=0;sumj<4;sumj++){ //形成16位密钥
for(sumi=0;sumi<5;sumi++)
sum-=(*(pt+3+sumi)-0x2020);//形成解密密钥
sum^=0x0404< wsprintf((LPSTR)sImeG.ImeBuff+4*sumj,(LPSTR)"%04x",sum);
}
if(flag==TRUE) FreeSelector(Sel2);
sImeG.ImeBuff[16]==0;
for(sumi=0;sumi<16;sumi++)
sImeG.ImeBuff[sumi]+=(unsigned char)sumi;
if(lstrcmpi(sImeG.ImeBuff,sImeG.ImeKey)==0)
sImeG.UseFlag=FALSE;//已经注册
else sImeG.UseFlag=TRUE;
}
利用注册密钥读取函数,就可在应用程序的多处关键代码部分增加程序功能的限制。例如,本人使用的限制代码部分如下:
ImeCmpKey1();
if(lstrcmpi(sImeG.ImeBuff,sImeG.ImeKey)==0){
for(i=0;i<18;i++) sImeG.ImeBuff[i]=0;
sImeG.UseFlag=FALSE;//已经注册
sImeG.UseNum=0;
} else{
sImeG.UseFlag=TRUE;//未注册
}
由于直接读取内存单元中的数据来生成注册密钥和注册限制功能的代码部分,其执行速度特别快,对应用程序几乎没有任何影响。因此,可以在应用程序中增加若干个注册密钥生成函数和限制功能代码,使解密者知难而退,从而达到保护开发者的劳动成果的目的。这种增加注册密钥生成及判断限制功能的方法,其缺点是使应用程序的长度增加了,但这对于目前高档计算机的大容量硬盘来说只不过是九牛一毛而已,所以该方法非常可行。
更多精彩
赞助商链接