真过分啦!居然断网半天,害的我-----算法都有人贴了,555~~~ (1千字)
我算了一个Name: jackyspy [CCG]
Serial: lZll-V2nT-VGlW-ZZWV
写了一个注册机, 算法有人贴了, 我就不再说了.
/*
软件名称: 棋隐(Chinese Chess Learner)
在VC 6.0下通过编译
*/
#include <stdio.h>
#include <windows.h>
BYTE anti_convert(BYTE c)
{
c-=0x30;
if(c<=0xD)
c=c*2+0x65;
else if(c<=0x1E)
c=0x5A-(BYTE)((c<<24)/0x555555+0.5);
return c;
}
BYTE convert2char(BYTE c)
{
if(c<26)
c+='A';
else if(c<52)
c+='G';
else if(c<62)
c-=4;
else if(c==62)
c='+';
else
c='*';
return c;
}
void main()
{
BYTE result[]="@2NAME748748",serial[]="0000000000000000";
// 其中result中的数值可以改变, 但是一定要遵循下面的规则:
// 要求字符为'0'-'N'之间或者0x8B-0x94之间, 第二个数为2,后六位必须是数字
// 而且要大于1000000(0x186A0)
BYTE ResortRef[]={2,8,3,7,0x0A,9,0x0F,0,6,1,0x0B,0x0D,4,0x0C,5,0x0E,0};
int i,temp;
for(i=1,temp=0;i<12;i++)
temp=temp*i+result[i];
temp=temp>=0?temp:-temp;
temp%=0x1A;temp+=0x41;
result[0]=(BYTE)temp;
for(i=1;i<12;i++)
result[i]=anti_convert(result[i]);
for(i=0;i<4;i++)
{
serial[i*4]=(result[i*3]&0xFC)>>2;
serial[i*4+1]=((result[i*3+1]&0xF0)>>4)+((result[i*3]&3)<<4);
serial[i*4+2]=((result[i*3+1]&0x0F)<<2)+((result[i*3+2]&0xC0)>>6);
serial[i*4+3]=result[i*3+2]&0x3F;
}
for(i=0;i<16;i++)
serial[i]=convert2char(serial[i]);
for(i=0;i<16;i++)
{
putchar(serial[ResortRef[i]]);
if(i%4==3)
putchar('-');
}
}
