| sum=0x1234; sum1=0x7456; for(sumj=0;sumj<4;sumj++){//形成16位注册码 for(sumi=0;sumi<5;sumi++){ sum+=keyrom[sumi]; //形成前4位码 sum1+=keyrom[sumi]; } sum^=0x1234<<sumj; //进行移位异或处理 sum1^=0x7456<<sumj; sprintf(Buff+4*sumj,"%04x",sum); sprintf(Buff1+4*sumj,"%04x",sum1); } //形成16位注册码 printf("\nWIN-KEY:"); printf(Buff); printf("\nDOS-KEY:"); printf(Buff1); exit(1); } else { sum=0x1234; sum1=0x7456; for(sumj=0;sumj<4;sumj++){//形成16位注册码 for(sumi=0;sumi<5;sumi++){ sum+=(*(pt+sumi)+0x1818)^0x5858; sum1+=(*(pt+sumi)+0x1818)^0x5858; } sum^=0x1234<<sumj; sum1^=0x7456<<sumj;//进行移位异或处理 sprintf(Buff+4*sumj,"%04x",sum); sprintf(Buff1+4*sumj,"%04x",sum1); } printf("\nWIN-KEY:"); printf(Buff); printf("\nDOS-KEY:"); printf(Buff1); } } |
三、注册码 当用户注册成功后,注册码就被写到共享软件的相应位置。这时共享软件必须对用户注册码进行实时检测与判断,才能实现注册限制功能。这时要求共享软件必须内部取得注册源数据,并利用注册机中相同的算法产生内部注册码。这就要求共享软件直接读取ROM BIOS的注册源信息,并在共享软件中需要限制的功能处增加注册码检测判断功能,这需要根据共享软件的实际需要、软件大小和实现的难易程度来确定限制的数量,使盗版者很难进行解密。这样既使计算机中多个共享软件使用相同的注册源,也不会发生注册冲突问题;既使是使用了相同的注册源数据,由于注册算法的不同注册码也不会相同;即使解密者知道注册算法的注册源地址,由于无法知道注册算法而且注册点遍布整个共享软件,也很难进行盗版。因此,这一注册方法使共享软件有效地跨越各种系统平台。 要在共享软件内部产生注册码,必须在共享软件中读取ROM BIOS数据源内存数据。WINDOWS保护模式下必须利用段选择符方法和API编程接口提供的函数才能实现: 1.AllocSelector(Selector)分配一个与参数相同的空选择器 2.FreeSelector(Selector) 释放分配的选择器 3.SetSelectorBase() 设置选择器描述符物理起始地址 4.GetSelectorBase() 获取选择器描述符物理起始地址 5.SetSelectorLimit() 设置选择器描述符访问界限 6.GetSelectorLimit() 获取选择器描述符访问界限
|