|
发表于 2009-11-30 17:01:34
|
显示全部楼层
//-----------------------------------------**/
#include <windows.h>
#include <stdio.h>
char Serial[32] = {
0
}; // 定义31位注册码的buf空间
char* GetSerial(char* UserID)
{
WORD v1, v2, bl, v_si, v3, v4;
int len,i = 0;
byte v_asc, v_f, sn1;
char* p;
const char* Findstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const char* Qwer_str = "Qwert yuiop asdfg hjkl zxcvbnm";
v_si = *UserID;
bl = 1;
v1 = v_si * 100;
v2 = v_si << 9;
len = strlen(UserID) + 1;
p = new char[len];
memset(Serial, 0, 32);
memset(p, 0, len);
strcpy(p, UserID);
*(p + len - 1) = 1;
do {
v_asc = *(p + bl % len);
v3 = v_asc ^ (v_si >> 8);
v4 = v3 ^ (*(Qwer_str + bl - 1));
sn1 = v4 + len;
sn1 = sn1 % 0x3E + 1;
v_f = *(Findstr + sn1 - 1);
*(Serial + bl - 1) = v_f;
v_si = v_si + v_f;
v_si = v_si * v1 + v2;
bl ++ ;
} while (bl != 0x1F);
return Serial;
}
int main()
{
char* myid = "ID1860529470";
printf("%s\n", GetSerial(myid));
return 0;
} |
|