+){ //形成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;//未注册
}
由于直接读取内存单元中的数据来生成注册密钥和注册限制功能的代码部分,其执行速度特别快,对应用程序几乎没有任何影响。因此,可以在应用程序中增加若干个注册密钥生成函数和限制功能代码,使解密者知难而退,从而达到保护开发者的劳动成果的目的。这种增加注册密钥生成及判断限制功能的方法,其缺点是使应用程序的长度增加了,但这对于目前高档
计算机的大容量硬盘来说只不过是九牛一毛而已,所以该方法非常可行。