在看了上回的SitMan v2.0的序號產生器後,不會用,好像作者是寫成QB的一個Function函式吧!:-)
自己跟蹤了一下,然後用TC2.0寫了一個,支援中文註冊名喲。
下面是序號產生器:
===========================================
#include <stdio.h>
#include <math.h>
main()
{ int SL; /* edi is SL as NamestrLength*/
unsigned long int ecx,esi,edi; /*這裡一定要是 unsigned long int型,否則將不支援中文註冊名*/
unsigned long int edx,ebx,eax; /*同上*/
unsigned char Namestr[20]; /*定義一個長20的陣列來存放註冊名,下面的陣列是程式提供的一個字串*/
static unsigned char Conststr[37]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
unsigned char SNstr[19]={'h','s','F','9','8','0','2','1','4','m','e','e','t','M','i','s','s','Y'};/*假註冊碼*/
/* 這個假註冊碼的4-9位必需是數字,其它可以為數字也可為字母,我隨便寫了一個,由於這4-9位將是你*/
/* 的正確的註冊碼中的數字,而且它影響後面的9位註冊碼,你可以改成你喜歡的數字,而不用我的*/
/* 這個軟體的註冊碼生成很怪吧?它先用你的註冊名算出註冊碼的前3位,然後再用你的假註冊碼的4-9位*/
/* (一定要是數字)和前3位組成新的字串來算出註冊碼的後9位,註冊碼一共是18位*/
printf ("This is a CrAck program for ----\n SitMan v2.0 Beta \n");
input:
printf("Your Name is: "); /* 支援中文名,當然也支援英文名*/
gets(Namestr); /*得到你的註冊名
*/
SL=strlen(Namestr); /*
註冊名的長度 */
if(SL<3)
/* 註冊名長度小於3 ,提示重新輸入*/
{printf("Name 's Length MUST great than 3\n Try Again ");
goto input;};
if (SL>20)
{printf("Why you like such a long Name? \n Try Short Name Again ");
goto input;};
/*開始計算你的註冊碼*/
ecx=1 ; /* mov ecx,01 */
esi=1 ; /* mov esi,01 b62f */
do
{
ebx=1;/*mov ebx,01*/
edi=SL; /* mov edi,eax */
ecx=1; /* mov ecx,01 */
/* b64c */do
{
eax=Namestr[ecx-1];
eax=eax*ebx;
edx=0;
eax=eax+esi;
eax=eax+ecx;
ebx=0x165;
edx=eax&0xffff0000; /*cdq */
/*edx=(int)eax%(int)ebx;eax=eax/ebx;*/
edx=eax-eax/ebx*ebx;
ebx=edx;
ecx=ecx+1;
edi=edi-1;}
while (edi>0);
eax=ebx;
ecx=0x24;
edx=eax&0xffff0000; /*cdq */
/*edx=(int)eax%(int)ecx;eax=eax/ecx; idiv ecx*/
edx=eax-eax/ecx*ecx;
eax=Conststr[edx];
SNstr[esi-1]=eax;
esi=esi+1;
}while (esi<4); /* jnz b634 esi<4? */
/*上面是計算你的註冊碼的前3位,下面的將計算你的註冊碼的後9位*/
ebx=1; /*mov ebx,01*/
esi=10; /*mov esi.0a */
do{
ecx=1;
do{
eax=SNstr[ecx-1];
eax=eax*ebx; edx=0; /* imul ebx*/
eax=eax+ecx;
eax=eax+esi;
ebx=0x179;
edx=eax&0xffff0000; /*cdq*/
edx=eax-eax/ebx*ebx;
ebx=edx;
ecx=ecx+1;}
while(ecx<10);
eax=ebx;
ecx=0x24;
edx=eax&0xffff0000; /*cdq*/
edx=eax-eax/ecx*ecx;
eax=Conststr[edx];
SNstr[esi-1]=eax;
esi=esi+1;}
while(esi<19);
/*算完了,大功告成,打個Kiss! */
printf("Your SN is:%s \n ",SNstr); /*這就是你的註冊碼*/
printf(" \n Enjoy it! \n");
printf(" ----Cracked By HSF(hsFang) 2001.10.28\n");
}
=============================================
大功告成,打個Kiss!
hsf0214