網際快車(FlashGet) V1.40 國際版

看雪資料發表於2015-11-15

目標軟體:  網際快車(FlashGet) V1.40 國際版

軟體大小:  1729 KB

軟體性質:  共享軟體

應用平臺:  Win9x/NT/2000/XP  


軟體介紹:

  下載的最大問題是什麼――速度,其次是什麼――下載後的管理。網際快車FlashGet

(JetCar)就是為解決這兩個問題所寫的,透過把一個檔案分成幾個部分同時下載可以成倍

的提高速度,下載速度可以提高100%到500%。網際快車可以建立不限數目的類別,每個類

別指定單獨的檔案目錄,不同的類別儲存到不同的目錄中去,強大的管理功能包括支援拖

拽,更名,新增描述,查詢,檔名重複時可自動重新命名等等。而且下載前後均可輕易管

理檔案。


使用工具:  W32dasm v8.93 黃金修正版本、TRW2000 v1.22 娃娃修正版。


破解過程:  

軟體註冊時,先將註冊資訊儲存在登錄檔中的:HKEY_CURRENT_USER\Software\JetCar\

JetCar\General 子鍵中,然後在下一次啟動時進行驗證。

所以使用 W32Dasm 反彙編,串式參考:"RegPass",發現有

:0041C3E1 6864144F00              push 004F1464

:0041C5B6 6864144F00              push 004F1464

兩處呼叫,經過觀察: 41C3E1 處的作用是註冊時將註冊資訊壓入註冊,所以來到

41C5B6:

0167:0041C5B6  PUSH     DWORD 004F1464
0167:0041C5BB  LEA      ECX,[ESP+1C]
0167:0041C5BF  PUSH     DWORD 004EF1AC
0167:0041C5C4  PUSH     ECX
0167:0041C5C5  MOV      ECX,EBX
0167:0041C5C7  CALL     004B483A
0167:0041C5CC  ADD      EBX,035C
0167:0041C5D2  MOV      EDI,01
0167:0041C5D7  PUSH     EAX
0167:0041C5D8  MOV      ECX,EBX
0167:0041C5DA  MOV      [ESP+3C],EDI
0167:0041C5DE  CALL     0049E6AF
0167:0041C5E3  LEA      ECX,[ESP+14]
0167:0041C5E7  MOV      [ESP+38],EBP
0167:0041C5EB  CALL     0049E576         /* 獲得你輸入的郵件地址  */
0167:0041C5F0  MOV      EDX,[ESI]
0167:0041C5F2  MOV      EAX,[EDX-08]     /* 其位數送入 EAX */
0167:0041C5F5  TEST     EAX,EAX
0167:0041C5F7  JZ       NEAR 0041C739    /* 為空則 Game Over ! */
0167:0041C5FD  MOV      EAX,[EBX]        /* 序列號送入 EAX */
0167:0041C5FF  MOV      ECX,[EAX-08]     /* 將其位數送入 ECX */
0167:0041C602  TEST     ECX,ECX
0167:0041C604  JZ       NEAR 0041C739    /* 為空則 Game Over ! */
0167:0041C60A  MOV      ECX,ESI
0167:0041C60C  CALL     0049A227
0167:0041C611  MOV      ECX,ESI
0167:0041C613  CALL     0049A1DB
0167:0041C618  MOV      ECX,[ESI]
0167:0041C61A  CMP      DWORD [ECX-08],BYTE +05
0167:0041C61E  JNG      NEAR 0041C739  /* 郵件地址長度小於 5h 就 Game Over !*/
0167:0041C624  PUSH     DWORD 004F1488
0167:0041C629  MOV      ECX,ESI
0167:0041C62B  CALL     00499E42       /* 測試你輸入的郵件地址是否合法 */    
0167:0041C630  TEST     EAX,EAX
0167:0041C632  JL       NEAR 0041C739  /* 不合法則Game Over ! */  
0167:0041C638  PUSH     DWORD 004F1484
0167:0041C63D  MOV      ECX,ESI
0167:0041C63F  CALL     00499E42
0167:0041C644  TEST     EAX,EAX
0167:0041C646  JL       NEAR 0041C739
0167:0041C64C  MOV      ECX,EBX
0167:0041C64E  CALL     0049A227
0167:0041C653  MOV      ECX,EBX
0167:0041C655  CALL     0049A1DB         /* 獲得你輸入的序列號 */
0167:0041C65A  MOV      EDX,[EBX]        /* 將其送入 EDX */
0167:0041C65C  MOV      EAX,[EDX-08]     /* 長度送入 EAX */
0167:0041C65F  CMP      EAX,BYTE +2C     /* 比較序列號是否等於 2Ch 位 */
0167:0041C662  JNZ      NEAR 0041C739    /* 不等於就 Game Over ! */  
0167:0041C668  PUSH     DWORD 004F147C   /* “fgc-” 入棧  */
0167:0041C66D  MOV      ECX,EBX
0167:0041C66F  CALL     00499E42         /* 測序列號試前 4 為是否為 fgc-  */
0167:0041C674  TEST     EAX,EAX
0167:0041C676  JNZ      0041C67E         /* 不是跳向下一步比較  */
0167:0041C678  MOV      [ESP+10],EDI
0167:0041C67C  JMP      SHORT 0041C696
0167:0041C67E  PUSH     DWORD 004F1474   /* “fgf-” 入棧  */
0167:0041C683  MOV      ECX,EBX
0167:0041C685  CALL     00499E42         /* 測序列號試前 4 為是否為 fgf-  */
0167:0041C68A  TEST     EAX,EAX  
0167:0041C68C  JNZ      NEAR 0041C739    /* 不是則 Game Over ! */

從上面我們知道要成功註冊應滿足:

1:郵件地址合法,且長度應大於 5 位。

2:序列號長度為 44 位,前四位為“fgc-” 或 “fgf-”。


所以重新輸入序列號繼續:

0167:0041C692  MOV      [ESP+10],EAX
0167:0041C696  PUSH     BYTE +2C
0167:0041C698  MOV      ECX,EBX
0167:0041C69A  CALL     0049E9A6          /* 獲得你輸入的序列號 */
0167:0041C69F  MOV      EBP,EAX
0167:0041C6A1  XOR      ESI,ESI
0167:0041C6A3  ADD      EBP,BYTE +04
0167:0041C6A6  XOR      EDI,EDI
0167:0041C6A8  MOV      EAX,[EBP+00]
0167:0041C6AB  MOV      ECX,EDI
0167:0041C6AD  ADD      EBP,BYTE +04
0167:0041C6B0  SUB      ECX,BYTE +00
0167:0041C6B3  MOV      [ESP+1C],EAX
0167:0041C6B7  JZ       0041C6D5            /* 跳向 41C6D5 */

.................................(這裡暫時省略一部分)

0167:0041C6D5  MOV      CL,[ESP+1E]         /* 序列號第 7 位送入CL */
0167:0041C6D9  MOV      DL,AH               /* 序列號第 6 位送入DL */
0167:0041C6DB  XOR      ECX,EDX             /* EDX 與 ECX 做異或運算 */
0167:0041C6DD  MOVSX    EDX,BYTE [ESP+1F]   /* 序列號第 8 位送入EDX */
0167:0041C6E2  AND      ECX,BYTE +7F        /* ECX 與 7F 做與運算 */
0167:0041C6E5  IMUL     ECX,EDX             /* ECX 乘以 EDX */
0167:0041C6E8  MOVSX    EAX,AL              /* 序列號第 5 位送入EAX */
0167:0041C6EB  ADD      ECX,EAX             /* ECX 加 EDX */
0167:0041C6ED  MOV      ESI,ECX             /* ECX 送入 ESI */
0167:0041C6EF  MOV      EAX,[ESP+10]
0167:0041C6F3  TEST     EAX,EAX            
0167:0041C6F5  JZ       0041C703            
0167:0041C6F7  MOVSX    ECX,BYTE [004EF643]
0167:0041C6FE  CMP      EDI,BYTE +02
0167:0041C701  JZ       0041C70A
0167:0041C703  MOVSX    ECX,BYTE [EDI+004EF640]
0167:0041C70A  MOV      EAX,ESI             /* ESI 送入 EAX */
0167:0041C70C  XOR      EDX,EDX             /* EDX 清 0 */
0167:0041C70E  DIV      ECX                 /* 除以 ECX */
0167:0041C710  MOV      EAX,EDI
0167:0041C712  SUB      EAX,BYTE +00
0167:0041C715  JZ       0041C721            /* 跳向 41C721 */
0167:0041C717  DEC      EAX
0167:0041C718  JNZ      0041C725
0167:0041C71A  CMP      EDX,BYTE +08
0167:0041C71D  JNZ      0041C730
0167:0041C71F  JMP      SHORT 0041C725
0167:0041C721  TEST     EDX,EDX
0167:0041C723  JNZ      0041C730      /* EDX 為 0 就 Game Over !*/            
0167:0041C725  INC      EDI
0167:0041C726  CMP      EDI,BYTE +02
0167:0041C729  JNL      0041C74E
0167:0041C72B  JMP      0041C6A8            /* 從這裡跳走 */    
0167:0041C730  PUSH     BYTE -01
0167:0041C732  MOV      ECX,EBX
0167:0041C734  CALL     0049E9F5
0167:0041C739  POP      EDI
0167:0041C73A  POP      ESI
0167:0041C73B  POP      EBP
0167:0041C73C  XOR      EAX,EAX
0167:0041C73E  POP      EBX
0167:0041C73F  MOV      ECX,[ESP+20]
0167:0041C743  MOV      [FS:00],ECX
0167:0041C74A  ADD      ESP,BYTE +2C
0167:0041C74D  RET    

從上面我們知道:序列號第 7 位和 7C2E00 加第 6 位的和做異或運算的值與7F做

與運算,之後再乘以第 8 位,最後再加上序列號第 5 位的 HEX 值的和除以 6B,

餘數不為0就會Game Over !

即:((SN[7] XOR (7C2E00+SN[8])AND 7F)*SN[8]+SN[5])MOD 6B = 0

然後重新填入序列號,會來到:

0167:0041C6BC  MOVSX    ESI,BYTE [ESP+1E]     /* 序列號第 11 位送入 ESI */
0167:0041C6C1  MOVSX    EDX,BYTE [ESP+1F]     /* 序列號第 12 位送入 EDX */
0167:0041C6C6  MOVSX    ECX,AH                /* 序列號第 10 位送入 ECX */
0167:0041C6C9  AND      ESI,ECX               /* ESI 與 ECX 做與運算 */
0167:0041C6CB  IMUL     ESI,EDX               /* 然後乘以 EDX */
0167:0041C6CE  MOVSX    EAX,AL                /* 序列號第 9 位 送入 EAX */
0167:0041C6D1  ADD      ESI,EAX               /* ESI 加上 EAX */
0167:0041C6D3  JMP      SHORT 0041C6EF        /* 跳向 41C6EF */

......................................

0167:0041C6EF  MOV      EAX,[ESP+10]          /* 將 [ESP+10] 的值送入 EAX */
0167:0041C6F3  TEST     EAX,EAX               /* 測試 EAX */
0167:0041C6F5  JZ       0041C703              /* EAX 為 0 就 Game Over !*/
0167:0041C6F7  MOVSX    ECX,BYTE [004EF643]  
0167:0041C6FE  CMP      EDI,BYTE +02
0167:0041C701  JZ       0041C70A
0167:0041C703  MOVSX    ECX,BYTE [EDI+004EF640]
                                   /* 將 [EDI+004EF640] 的值送入ECX */
0167:0041C70A  MOV      EAX,ESI               /* ESI 送入 EAX */
0167:0041C70C  XOR      EDX,EDX               /* EDX 清 0 */
0167:0041C70E  DIV      ECX                   /* 除以 ECX */
0167:0041C710  MOV      EAX,EDI
0167:0041C712  SUB      EAX,BYTE +00
0167:0041C715  JZ       0041C721
0167:0041C717  DEC      EAX
0167:0041C718  JNZ      0041C725
0167:0041C71A  CMP      EDX,BYTE +08          /* 比較餘數是否等於 8 */
0167:0041C71D  JNZ      0041C730              /* 不是就 Game Over !*/
0167:0041C71F  JMP      SHORT 0041C725        /* 天堂之門 */

從上面我們知道:序列號第 11 位與序列號第 10 位做與運算之後乘以序列號第 12 位,再

加上序列號第9位的 HEX 制除以 41C703 處的 ECX 的制,餘數為 8 就可註冊成功。

即: ((SN[10] AND SN[11])*SN[12]+SN[9]) MOD 65 = 8


最後總結:

1:郵件地址合法,且長度應大於 5 位;

2:序列號長度為 44 位,前四位為“fgc-” 或 “fgf-”;

3:((SN[7] XOR (7C2E00+SN[8])AND 7F)*SN[8]+SN[5])MOD 6B = 0;

4:((SN10 AND SN11)*SN12+SN9) MOD 65 = 8。


OK,這下可以做序號產生器了!:)

TC2.0 序號產生器原始碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{ long a,b,c,d;
 int e,f,g,h,i,k,temp;
 int sn[62]={'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','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'};
 char name[15],mail[30];

 randomize();
 k=random(2);

 printf("**************************************************************\n");
 printf("*                  FlashGet(JetCar) v1.40 Keygen             *\n");
 printf("*                 Made by fengma(fengma@2911.net)            *\n");
 printf("*                         2003-1-12                          *\n");
 printf("**************************************************************\n");
 
input_name:
 printf("\nInput your name:");
   gets(name);
   if(strlen(name)==0)
     {printf("\nYour must input your name!\n");
      goto input_name;
     }
input_mail:
 printf("\nAnd your E-mail:");
   gets(mail);
   if(strlen(mail)<=5)
     {printf("\nYour must input your E-mail correctly!\n");
      goto input_mail;
     }

 printf("\nYour register code:");
   if(k==0)
     printf("fgc-");
   else
     printf("fgf-");

   for(i=0;;i++)
     { a=random(62);
b=random(62);
       c=random(62);
       d=random(62);
        if (((sn[c]^(7745024+sn[b])&127)*sn[d]+sn[a])%107==0)
           break;
     }
      printf("%c%c%c%c",sn[a],sn[b],sn[c],sn[d]);

    for(i=0;;i++)
     { e=random(62);
       f=random(62);
       g=random(62);
       h=random(62);
        if (((sn[f]&sn[g])*sn[h]+sn[e])%101==8)
            break;
     }
      printf("%c%c%c%c",sn[e],sn[f],sn[g],sn[h]);

    for (i=13;i<=44;i++)
     { temp=random(62);
       printf("%c",sn[temp]);
     }
     
 printf("\n\n\n");
 printf("Happy new year!\n\nBye!\n");  
}


整理:
用 戶 名:fengma
郵件地址:fengma_cn@msn.com
序 列 號:fgf-amy6tCrQN1uNTQHWk5JWnc1sphkRVIRsuPm5LY5x

風馬 於 10:44 03-1-12

相關文章