SuperCleaner V2.50 漢化版的演算法跟蹤

看雪資料發表於2003-03-05

SuperCleaner V2.50 漢化版的演算法跟蹤
 
軟體大小:  430 KB
軟體語言:  簡體中文
軟體類別:  漢化補丁 / 共享版 / 解除安裝清除
應用平臺:  Win9x/NT/2000/XP
軟體介紹:
   是幫助使用者清洗他們的計算機硬碟內不必要的檔案的程式。它能掃描你的系統讓你選擇
不再需要的檔案進行刪除。並能備份檔案已避免你誤刪除有用的檔案,此備份功能將不必要
的檔案扔進再迴圈箱,這樣可以讓你再必要的時候恢復資訊。


【作者宣告】:本人是個初學者,只是感興趣,沒有其它目的。失誤之處敬請諸位大俠賜教!

【破解工具】:0llydbg_cn v1.09
【過    程】:
這個軟體的演算法比較簡單,用0llydbg載入後,ctrl+N開啟"模組中的名稱"視窗,找到USER32.GetDlgItemTextA回車.在所有的地址下斷點,執行程式出現啟動視窗進入註冊框.填好使用者名稱:fxyang; 序列號:7894561230123456註冊,被0llydbg中斷.
 不久後來到這裡:
================================================================================
00417250   SUB     ESP, 100
00417256   MOV     AL, BYTE PTR DS:[42F3E0]
0041725B   PUSH    EBX
0041725C   PUSH    EBP
0041725D   PUSH    ESI
0041725E   PUSH    EDI
0041725F   MOV     BYTE PTR SS:[ESP+10], AL
00417263   MOV     ECX, 3F
00417268   XOR     EAX, EAX
0041726A   LEA     EDI, DWORD PTR SS:[ESP+11]
0041726E   REP     STOS DWORD PTR ES:[EDI]
00417270   STOS    WORD PTR ES:[EDI]
00417272   STOS    BYTE PTR ES:[EDI]
00417273   MOV     EDI, DWORD PTR SS:[ESP+114]   ;  EDI <==SS:[12E818]=0012EA3C,(ASCII "fxyang")
0041727A   PUSH    EDI                           ; /String
0041727B   CALL    DWORD PTR DS:[<&KERNEL32.lstr>; \lstrlenA
00417281   MOV     ESI, EAX                      ;  ESI<==6 (使用者名稱長度)
00417283   XOR     ECX, ECX
00417285   XOR     EAX, EAX
00417287   TEST    ESI, ESI
00417289   JLE     SHORT SuperCle.0041729E
0041728B   MOV     EDX, DWORD PTR DS:[42C3E8]    ;  EDX <== DS:[42C3E8]=0026
00417291  /MOVSX   EBX, BYTE PTR DS:[EAX+EDI]   ;  EBX <==DS:[12EA3C]=66 ('f')
00417295  |ADD     EBX, EDX                     ;  EBX =EBX+EDX=66+26=8C
00417297  |ADD     ECX, EBX                     ;  ECX =ECX+EBX=0+8C=8C
00417299  |INC     EAX                          ;  //這是把使用者名稱的各位hex值+26後相加==>ECX
0041729A  |CMP     EAX, ESI
0041729C  \JL      SHORT SuperCle.00417291
0041729E  MOV     EBX, DWORD PTR SS:[ESP+118]
004172A5  PUSH    ECX                           ; /ECX=使用者名稱的各位hex值+26後相加=371
004172A6  PUSH    SuperCle.0042C3FC             ; |format ="%ld-"
004172AB  PUSH    EBX                           ; |s
004172AC  CALL    DWORD PTR DS:[<&USER32.wsprin>; \這個函式把上面計算的值按上面的格式變換成"881-"放在DS:[12E828]記憶體中
004172B2  ADD     ESP, 0C
004172B5  XOR     ECX, ECX
004172B7  XOR     EAX, EAX
004172B9  TEST    ESI, ESI
004172BB  JLE     SHORT SuperCle.004172D1
004172BD  MOV     EDX, DWORD PTR DS:[42C3EC]    ;  EDX <==DS:[42C3EC]=0034
004172C3  /MOVSX   EBP, BYTE PTR DS:[EAX+EDI]   ;  EBP<==DS:[12EA3C]=66 ('f')
004172C7  |IMUL    EBP, EDX                     ;  EBP =EBP*EDX=66*34
004172CA  |ADD     ECX, EBP                     ;  ECX=ECX+EBP=0+14B8
004172CC  |INC     EAX                          ;  //這是把使用者名稱的各位hex值*34後相加==>ECX
004172CD  |CMP     EAX, ESI
004172CF  \JL      SHORT SuperCle.004172C3
004172D1  PUSH    ECX                           ; /ECX=84A4
004172D2  LEA     ECX, DWORD PTR SS:[ESP+14]    ; |
004172D6  PUSH    SuperCle.0042C3FC             ; |format ="%ld_"
004172DB  PUSH    ECX                           ; |s
004172DC  CALL    DWORD PTR DS:[<&USER32.wsprin>; \這個函式把上面計算的值按上面的格式變換成十進位制"33956-"放在SS:[12E714]記憶體中
004172E2  ADD     ESP, 0C
004172E5  LEA     EDX, DWORD PTR SS:[ESP+10]    ;  EDX <== 0012E714,(ASCII "33956-")
004172E9  PUSH    EDX                           ; /EDX <== 0012E714,(ASCII "33956-")
004172EA  PUSH    EBX                           ; |EBX  =0012E828,(ASCII "881-")
004172EB  CALL    DWORD PTR DS:[<&KERNEL32.lstr>; \把上面式子連線
004172F1  XOR     ECX, ECX
004172F3  XOR     EAX, EAX
004172F5  TEST    ESI, ESI
004172F7  JLE     SHORT SuperCle.0041730C
004172F9  MOV     EDX, DWORD PTR DS:[42C3F0]    ;  EDX <==DS:[42C3F0]=0C
004172FF  /MOVSX   EBP, BYTE PTR DS:[EAX+EDI]   ;  EBP<==DS:[12EA3C]=66 ('f')
00417303  |ADD     EBP, EDX                     ;  EBP=EBP+EDX=66+C=72
00417305  |ADD     ECX, EBP                     ;  ECX=ECX+EBP=0+72=72
00417307  |INC     EAX                          ;  //這是把使用者名稱的各位hex值+0C後相加==>ECX
00417308  |CMP     EAX, ESI
0041730A  \JL      SHORT SuperCle.004172FF
0041730C  PUSH    ECX                           ; /ECX=2D5
0041730D  LEA     EAX, DWORD PTR SS:[ESP+14]    ; |EAX<==SS:[12E714]
00417311  PUSH    SuperCle.0042C3FC             ; |format ="%ld-"
00417316  PUSH    EAX                           ; |s
00417317  CALL    DWORD PTR DS:[<&USER32.wsprin>; \這個函式把上面計算的值按上面的格式變換成十進位制"725-"放在SS:[12E714]記憶體中
0041731D  ADD     ESP, 0C
00417320  LEA     ECX, DWORD PTR SS:[ESP+10]    ;  ECX<==SS:[12E714]"725-"
00417324  PUSH    ECX                           ; /StringToAdd
00417325  PUSH    EBX                           ; |EBX =0012E828,(ASCII "881-33956-")
00417326  CALL    DWORD PTR DS:[<&KERNEL32.lstr>; \把上面式子連線
0041732C  XOR     ECX, ECX
0041732E  XOR     EAX, EAX
00417330  TEST    ESI, ESI
00417332  JLE     SHORT SuperCle.00417348
00417334  MOV     EDX, DWORD PTR DS:[42C3F4]    ;  EDX<== DS:[42C3F4]=0E
0041733A  /MOVSX   EBP, BYTE PTR DS:[EAX+EDI]   ;  EBP<==DS:[12EA3C]=66 ('f')
0041733E  |IMUL    EBP, EDX                     ;  EBP =EBP*EDX=66*0E
00417341  |ADD     ECX, EBP                     ;  ECX=ECX+EBP=0+594=594
00417343  |INC     EAX                          ;  //這是把使用者名稱的各位hex值*0E後相加==>ECX
00417344  |CMP     EAX, ESI
00417346  \JL      SHORT SuperCle.0041733A
00417348   PUSH    ECX                           ; /ECX= ; /<%ld> = 23B6 (9142.)
00417349   LEA     EDX, DWORD PTR SS:[ESP+14]    ; |
0041734D   PUSH    SuperCle.0042C3F8             ; |format ="%ld"
00417352   PUSH    EDX                           ; |s
00417353   CALL    DWORD PTR DS:[<&USER32.wsprin>; \這個函式把上面計算的值按上面的格式變換成十進位制"9142-"放在SS:[12E714]記憶體中
00417359   ADD     ESP, 0C
0041735C   LEA     EAX, DWORD PTR SS:[ESP+10]    ;  EAX <==0012E714,(ASCII "9142")
00417360   PUSH    EAX                           ; /StringToAdd
00417361   PUSH    EBX                           ; |EBX=; |ConcatString = "881-33956-725-"
00417362   CALL    DWORD PTR DS:[<&KERNEL32.lstr>; \把上面式子連線
00417368   POP     EDI
00417369   POP     ESI
0041736A   POP     EBP
0041736B   POP     EBX
0041736C   ADD     ESP, 100
00417372   RETN
============================================================================

註冊碼計算的總結:  條件註冊碼由四組數字組成
   1.使用者名稱的各位hex值+26後相加後變換成十進位制數就是第一組註冊碼    
   2.使用者名稱的各位hex值*34後相加後變換成十進位制數就是第二組註冊碼
   3.使用者名稱的各位hex值+0C後相加後變換成十進位制數就是第三組註冊碼
   4.使用者名稱的各位hex值*0E後相加後變換成十進位制數就是第四組註冊碼
   5.把上面各組用"-"連線就是正確的註冊碼
例如:
  使用者名稱:       fxyang
  得到的註冊碼: 881-33956-725-9142

==============================================================================
下面看看註冊碼的比較部分:

00417120   PUSH    EBX
00417121   MOV     EBX, DWORD PTR DS:[<&KERNEL32>;  KERNEL32.lstrlenA
00417127   PUSH    EBP
00417128   MOV     EBP, DWORD PTR SS:[ESP+C]     ;  EBP <==SS:[12E930]=0012E93C,(ASCII "789456123123456")
0041712C   PUSH    ESI
0041712D   PUSH    EDI
0041712E   PUSH    EBP                           ; /String
0041712F   CALL    EBX                           ; \lstrlenA
00417131   MOV     EDI, DWORD PTR SS:[ESP+18]    ;  EDI <==SS:[ESP+10]=0012E828,(ASCII "881-33956-725-9142")
00417135   MOV     ESI, EAX
00417137   PUSH    EDI                           ; /String
00417138   CALL    EBX                           ; \lstrlenA
0041713A   CMP     ESI, EAX                      ;  ESI=10  EAX=12 (長度比較)
0041713C   JNZ     SHORT SuperCle.00417145       <==一定要跳
0041713E   POP     EDI
0041713F   POP     ESI
00417140   POP     EBP
00417141   XOR     EAX, EAX

----------------------------------------------
00417143   POP     EBX
00417144   RETN
00417145   XOR     ECX, ECX
00417147   TEST    ESI, ESI
00417149   JLE     SHORT SuperCle.0041715E
0041714B   MOV     EAX, EDI
0041714D   SUB     EBP, EDI
0041714F   /MOV     DL, BYTE PTR DS:[EAX+EBP]    ;  註冊碼的逐位比較
00417152   |MOV     BL, BYTE PTR DS:[EAX]
00417154   |CMP     DL, BL
00417156   |JNZ     SHORT SuperCle.0041713E
00417158   |INC     ECX
00417159   |INC     EAX
0041715A   |CMP     ECX, ESI
0041715C   \JL      SHORT SuperCle.0041714F
0041715E   POP     EDI
0041715F   POP     ESI
00417160   POP     EBP
00417161   MOV     EAX, 1
00417166   POP     EBX
00417167   RETN



                                                             fxyang

                                                             2003.3.5

相關文章