SitMan v2.0 beta版的序號產生器(TC2.0編譯) (3千字)

看雪資料發表於2001-10-28

在看了上回的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

相關文章