转贴:ddcrack的APISPY32 2.4的注册机 (2千字)
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void main(void)
{
char * name="";
char regname[8];
char regcode[17];
unsigned int table[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
unsigned long eax;
unsigned int bl,cl,dl=0xBB;
int i,j,k,s,base;
unsigned int inc1,inc2;
int flag=0,success=1;
clrscr();
printf("\n************************************************************************\n");
printf("APISPY32 V2.4 Registration Key Generator\n");
printf("Author: ddcrack ( 2001/06/15 )\n");
printf("************************************************************************\n\n");
printf("Registration Name ( more than 5 letters ): ");
scanf("%s",name);
printf("\n");
if(strlen(name)<5)
do
{
printf("\nInput Registration Name again ( 5 letters at least ): ");
scanf("%s",name);
printf("\n");
}
while (strlen(name)<5);
if(strlen(name)>=8)
for(i=0;i<8;i++) regname[i]=*(name+i);
else
{
for(i=0;i<strlen(name);i++) regname[i]=*(name+i);
for(i=0;i<(8-strlen(name));i++) regname[strlen(name)+i]=*(name+i);
}
for(i=0;i<8;i++)
{ for(j=0;j<16;j++)
{ for(k=0;k<16;k++)
{ cl=table[j];
cl=cl<<4;
cl=cl|table[k];
bl=0x50+(unsigned int)i;
cl=cl^bl;
eax=1;
for(s=0;s<7;s++)
{ eax=eax*cl;
if(eax>0x00008899) eax=eax%0x00008899;
}
eax=eax%dl;
if(eax<0x00000020) continue;
if(eax==(unsigned long)regname[i])
{
if(j<=9) inc1=0x30; else inc1=0x37;
if(k<=9) inc2=0x30; else inc2=0x37;
if(i<=3)
{ regcode[2*i]=(char)(table[j]+inc1);
regcode[2*i+1]=(char)(table[k]+inc2);
}
else
{ regcode[2*i+1]=(char)(table[j]+inc1);
regcode[2*i+2]=(char)(table[k]+inc2);
}
flag=1;
break;
}
else flag=0;
}
if(flag==1) break;
}
if(flag==0)
{ printf("\nSorry! No such registration key which matchs your name.\n");
success=0;
break;
}
}
if(success==1)
{ printf("Registration Key: ");
randomize();
base=random(16);
if(base<=9) regcode[8]=(char)(base+0x30);
else regcode[8]=(char)(base+0x37);
for(i=0;i<17;i++) printf("%c",regcode[i]);
printf("\n");
}
getch();
}
