[原創]Focus Magic V3.01 註冊演算法分析

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

【破解作者】GoOdLeiSuRe
【作者郵箱】zhmwf@sohu.com
【作者主頁】http://sstudio.home.xdjm.net
【破解日期】2004/11/22

【軟體名稱】Focus Magic V3.01
【軟體大小】4.18MB
【下載地址】不記得在哪下載了,應該很容易搜尋到。
【軟體簡介】它能提供一些獨特的相片處理功能讓模糊或缺失的圖片在經過修整之後能被修復成接近原狀,其特效與一般影像處理軟體不同,著重在圖片的清晰化、以及缺裂部分的推導,能與市面上大部分的商業美工軟體做結合。Focus Magic 目前已經廣泛地被數字攝影師、廣告和出版行業所使用,也用在建檔案組織(像美國國家檔案局)、法醫鑑定專家和相片修復專家使用。

【加殼方式】沒有加殼
【使用工具】OllyDbg v1.10
【破解平臺】Windows XP SP2
【破解宣告】我水平很菜,偶得一點心得,願與大家分享,錯誤難免,肯請指正。
【破解過程】
輸入註冊資訊:
    User Name: GoOdLeiSuRe
    Registration Code: 123456789
下斷點:BPX MessageBoxA
    點選“Register”進行註冊,程式在顯示出錯對話方塊時攔截下來。
    幸運的是中斷所在的過程就是進行註冊計算與儲存的過程。

00408330  /$  81EC 14010000       SUB ESP,114
00408336  |.  8D8424 B0000000     LEA EAX,DWORD PTR SS:[ESP+B0]
0040833D  |.  53                  PUSH EBX
0040833E  |.  55                  PUSH EBP
0040833F  |.  8BAC24 20010000     MOV EBP,DWORD PTR SS:[ESP+120]
00408346  |.  56                  PUSH ESI
00408347  |.  8B35 5CB24200       MOV ESI,DWORD PTR DS:[<&USER32.GetDlgItemT>;  USER32.GetDlgItemTextA
0040834D  |.  57                  PUSH EDI
0040834E  |.  6A 64               PUSH 64                                    ; /Count = 64 (100.)
00408350  |.  50                  PUSH EAX                                   ; |Buffer
00408351  |.  68 F5030000         PUSH 3F5                                   ; |ControlID = 3F5 (1013.)
00408356  |.  55                  PUSH EBP                                   ; |hWnd
00408357  |.  FFD6                CALL ESI                                   ; \GetDlgItemTextA    取得使用者名稱 "GoOdLeiSuRe"
00408359  |.  8D4C24 28           LEA ECX,DWORD PTR SS:[ESP+28]
0040835D  |.  6A 64               PUSH 64                                    ; /Count = 64 (100.)
0040835F  |.  51                  PUSH ECX                                   ; |Buffer
00408360  |.  68 F6030000         PUSH 3F6                                   ; |ControlID = 3F6 (1014.)
00408365  |.  55                  PUSH EBP                                   ; |hWnd
00408366  |.  FFD6                CALL ESI                                   ; \GetDlgItemTextA    取得輸入的註冊碼 "123456789"
00408368  |.  8A4424 28           MOV AL,BYTE PTR SS:[ESP+28]
0040836C  |.  84C0                TEST AL,AL                                 ;  是否輸入空註冊碼?
0040836E  |.  0F84 0E030000       JE FocusMag.00408682
00408374  |.  8D7C24 28           LEA EDI,DWORD PTR SS:[ESP+28]              ;  輸入的註冊碼
00408378  |.  83C9 FF             OR ECX,FFFFFFFF
0040837B  |.  33C0                XOR EAX,EAX
0040837D  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
0040837F  |.  F7D1                NOT ECX
00408381  |.  49                  DEC ECX
00408382  |.  8BD9                MOV EBX,ECX                                ;  以上幾行計算輸入的註冊碼長度
00408384  |.  83FB 05             CMP EBX,5                                  ;  輸入的註冊碼 < 5 ?
00408387  |.  0F8C B7010000       JL FocusMag.00408544
0040838D  |.  83FB 09             CMP EBX,9                                  ;  輸入的註冊碼 <> 9 ?
00408390  |.  75 12               JNZ SHORT FocusMag.004083A4
00408392  |.  8D7C24 28           LEA EDI,DWORD PTR SS:[ESP+28]
00408396  |.  83C9 FF             OR ECX,FFFFFFFF
00408399  |.  884424 2D           MOV BYTE PTR SS:[ESP+2D],AL                ;  取輸入註冊碼的前五位
0040839D  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
0040839F  |.  F7D1                NOT ECX
004083A1  |.  49                  DEC ECX
004083A2  |.  8BD9                MOV EBX,ECX                                ;  以上幾行計算取得的輸入碼的長度(5位)
004083A4  |>  33C9                XOR ECX,ECX
004083A6  |.  85DB                TEST EBX,EBX                               ;  新取得碼的長度 <= 0 ?
004083A8  |.  7E 19               JLE SHORT FocusMag.004083C3
004083AA  |>  8A440C 28           /MOV AL,BYTE PTR SS:[ESP+ECX+28]           ;  迴圈取新碼的各個字元的ASCII碼
004083AE  |.  3C 30               |CMP AL,30                                 ;  取得的ASCII碼 < 30 ?
004083B0  |.  0F8C 8E010000       |JL FocusMag.00408544
004083B6  |.  3C 39               |CMP AL,39                                 ;  取得的ASCII碼 > 39 ?
004083B8  |.  0F8F 86010000       |JG FocusMag.00408544
004083BE  |.  41                  |INC ECX
004083BF  |.  3BCB                |CMP ECX,EBX
004083C1  |.^ 7C E7               \JL SHORT FocusMag.004083AA                ;  這個迴圈是判斷新碼是否為數字
004083C3  |>  83FB 05             CMP EBX,5                                  ;  新碼長度 <= 5 ?
004083C6  |.  7E 6C               JLE SHORT FocusMag.00408434
004083C8  |.  8B541C 23           MOV EDX,DWORD PTR SS:[ESP+EBX+23]
004083CC  |.  8A441C 27           MOV AL,BYTE PTR SS:[ESP+EBX+27]
004083D0  |.  8D4B FB             LEA ECX,DWORD PTR DS:[EBX-5]
004083D3  |.  899424 8C000000     MOV DWORD PTR SS:[ESP+8C],EDX
004083DA  |.  8BD1                MOV EDX,ECX
004083DC  |.  8D7424 28           LEA ESI,DWORD PTR SS:[ESP+28]
004083E0  |.  8DBC24 91000000     LEA EDI,DWORD PTR SS:[ESP+91]
004083E7  |.  888424 90000000     MOV BYTE PTR SS:[ESP+90],AL
004083EE  |.  C1E9 02             SHR ECX,2
004083F1  |.  F3:A5               REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[>
004083F3  |.  8BCA                MOV ECX,EDX
004083F5  |.  83E1 03             AND ECX,3
004083F8  |.  33C0                XOR EAX,EAX
004083FA  |.  F3:A4               REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ES>
004083FC  |>  40                  /INC EAX
004083FD  |.  8D48 05             |LEA ECX,DWORD PTR DS:[EAX+5]
00408400  |.  3BCB                |CMP ECX,EBX
00408402  |.^ 7C F8               \JL SHORT FocusMag.004083FC
00408404  |.  8DBC24 8C000000     LEA EDI,DWORD PTR SS:[ESP+8C]
0040840B  |.  83C9 FF             OR ECX,FFFFFFFF
0040840E  |.  33C0                XOR EAX,EAX
00408410  |.  C6841C 8C000000 00  MOV BYTE PTR SS:[ESP+EBX+8C],0
00408418  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
0040841A  |.  F7D1                NOT ECX
0040841C  |.  2BF9                SUB EDI,ECX
0040841E  |.  8D5424 28           LEA EDX,DWORD PTR SS:[ESP+28]
00408422  |.  8BC1                MOV EAX,ECX
00408424  |.  8BF7                MOV ESI,EDI
00408426  |.  8BFA                MOV EDI,EDX
00408428  |.  C1E9 02             SHR ECX,2
0040842B  |.  F3:A5               REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[>
0040842D  |.  8BC8                MOV ECX,EAX
0040842F  |.  83E1 03             AND ECX,3
00408432  |.  F3:A4               REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ES>
00408434  |>  0FBE4424 2C         MOVSX EAX,BYTE PTR SS:[ESP+2C]             ;  "5" 第5(長度)位字元
00408439  |.  0FBE5424 28         MOVSX EDX,BYTE PTR SS:[ESP+28]             ;  "1" 第1位字元
0040843E  |.  8D0C80              LEA ECX,DWORD PTR DS:[EAX+EAX*4]           ;  ECX = ASC("5") + ASC("5")*4 = 109
00408441  |.  8D0448              LEA EAX,DWORD PTR DS:[EAX+ECX*2]           ;  EAX = ASC("5") + ECX*2 = B*ASC("5") = 247
00408444  |.  0FBE4C24 29         MOVSX ECX,BYTE PTR SS:[ESP+29]             ;  "2" 第2位字元
00408449  |.  0FBEAC02 7CF14200   MOVSX EBP,BYTE PTR DS:[EDX+EAX+42F17C]     ;  "9" Form "3982015674" 由第(長度)位字元定位這組數字串;由(EDX+1)定位數字
00408451  |.  0FBEBC01 7CF14200   MOVSX EDI,BYTE PTR DS:[ECX+EAX+42F17C]     ;  "8" Form "3982015674" 由(ECX+1)定位數字
00408459  |.  8B5424 2A           MOV EDX,DWORD PTR SS:[ESP+2A]              ;  "3" 第3位字元
0040845D  |.  8B4424 2C           MOV EAX,DWORD PTR SS:[ESP+2C]              ;  "5" 第5位字元
00408461  |.  52                  PUSH EDX                                   ;  Arg2
00408462  |.  50                  PUSH EAX                                   ;  Arg1
00408463  |.  83ED 30             SUB EBP,30                                 ;  字元 -> 數字
00408466  |.  83EF 30             SUB EDI,30                                 ;  字元 -> 數字
00408469  |.  E8 A2FEFFFF         CALL FocusMag.00408310
0040846E  |.  8B4C24 33           MOV ECX,DWORD PTR SS:[ESP+33]              ;  "4" 第4位字元
00408472  |.  8B5424 34           MOV EDX,DWORD PTR SS:[ESP+34]              ;  "5" 第5位字元
00408476  |.  8D3480              LEA ESI,DWORD PTR DS:[EAX+EAX*4]           ;  ESI = 5*EAX  其中EAX為對應的第(Arg2-30+1)位數字
00408479  |.  51                  PUSH ECX                                   ;  Arg2
0040847A  |.  52                  PUSH EDX                                   ;  Arg1
0040847B  |.  D1E6                SHL ESI,1                                  ;  加倍 ESI = A*EAX
0040847D  |.  E8 8EFEFFFF         CALL FocusMag.00408310
00408482  |.  83C4 10             ADD ESP,10
00408485  |.  03F0                ADD ESI,EAX                                ;  ESI = ESI + EAX
00408487  |.  8D4424 18           LEA EAX,DWORD PTR SS:[ESP+18]
0040848B  |.  50                  PUSH EAX                                   ; /pSystemTime
0040848C  |.  FF15 A0B04200       CALL DWORD PTR DS:[<&KERNEL32.GetSystemTim>; \GetSystemTime
00408492  |.  8B4424 18           MOV EAX,DWORD PTR SS:[ESP+18]              ;  年份/月份
00408496  |.  B9 0A000000         MOV ECX,0A
0040849B  |.  25 FFFF0000         AND EAX,0FFFF                              ;  年份
004084A0  |.  99                  CDQ                                        ;  EDX 清零
004084A1  |.  F7F9                IDIV ECX                                   ;  EAX = EAX \ A ; EDX = EAX | A
004084A3  |.  8B4424 1A           MOV EAX,DWORD PTR SS:[ESP+1A]              ;  月份/星期
004084A7  |.  33C9                XOR ECX,ECX
004084A9  |.  25 FFFF0000         AND EAX,0FFFF                              ;  月份
004084AE  |.  3BD7                CMP EDX,EDI                                ;  (年份/A)的餘數 <> EDI ?
004084B0  |.  75 09               JNZ SHORT FocusMag.004084BB
004084B2  |.  3BC6                CMP EAX,ESI                                ;  月份 <> ESI ?
004084B4  |.  75 05               JNZ SHORT FocusMag.004084BB
004084B6  |.  B9 01000000         MOV ECX,1                                  ;  上面條件相等時置ECX=1
004084BB  |>  66:837C24 1E 0E     CMP WORD PTR SS:[ESP+1E],0E                ;  日 > E ?
004084C1  |.  77 1B               JA SHORT FocusMag.004084DE
004084C3  |.  46                  INC ESI
004084C4  |.  83FE 0D             CMP ESI,0D                                 ;  ESI <> D ?
004084C7  |.  75 0D               JNZ SHORT FocusMag.004084D6
004084C9  |.  47                  INC EDI
004084CA  |.  83FF 0A             CMP EDI,0A                                 ;  EDI <> A ?
004084CD  |.  75 02               JNZ SHORT FocusMag.004084D1
004084CF  |.  33FF                XOR EDI,EDI
004084D1  |>  BE 01000000         MOV ESI,1
004084D6  |>  3BD7                CMP EDX,EDI
004084D8  |.  75 04               JNZ SHORT FocusMag.004084DE
004084DA  |.  3BC6                CMP EAX,ESI                                ;  EAX = ESI ?
004084DC  |.  74 04               JE SHORT FocusMag.004084E2                 ;  若ECX=0則要跳,否則可不跳
004084DE  |>  85C9                TEST ECX,ECX
004084E0  |.  74 5B               JE SHORT FocusMag.0040853D                 ;  不能跳,ECX <> 0
004084E2  |>  83FB 05             CMP EBX,5                                  ;  EBX <= 5 ?
004084E5  |.  7E 52               JLE SHORT FocusMag.00408539                ;  最好跳
004084E7  |.  BE 05000000         MOV ESI,5
004084EC  |>  8DBC24 C0000000     /LEA EDI,DWORD PTR SS:[ESP+C0]
004084F3  |.  83C9 FF             |OR ECX,FFFFFFFF
004084F6  |.  33C0                |XOR EAX,EAX
004084F8  |.  8D56 FC             |LEA EDX,DWORD PTR DS:[ESI-4]
004084FB  |.  F2:AE               |REPNE SCAS BYTE PTR ES:[EDI]
004084FD  |.  F7D1                |NOT ECX
004084FF  |.  49                  |DEC ECX
00408500  |.  3BCA                |CMP ECX,EDX
00408502  |.  7C 39               |JL SHORT FocusMag.0040853D
00408504  |.  8A8434 BB000000     |MOV AL,BYTE PTR SS:[ESP+ESI+BB]
0040850B  |.  3C 60               |CMP AL,60
0040850D  |.  7E 02               |JLE SHORT FocusMag.00408511
0040850F  |.  04 E0               |ADD AL,0E0
00408511  |>  3C 41               |CMP AL,41
00408513  |.  7C 17               |JL SHORT FocusMag.0040852C
00408515  |.  3C 5A               |CMP AL,5A
00408517  |.  7F 13               |JG SHORT FocusMag.0040852C
00408519  |.  0FBEC0              |MOVSX EAX,AL
0040851C  |.  83E8 40             |SUB EAX,40
0040851F  |.  B9 0A000000         |MOV ECX,0A
00408524  |.  99                  |CDQ
00408525  |.  F7F9                |IDIV ECX
00408527  |.  80C2 30             |ADD DL,30
0040852A  |.  EB 02               |JMP SHORT FocusMag.0040852E
0040852C  |>  B2 30               |MOV DL,30
0040852E  |>  385434 28           |CMP BYTE PTR SS:[ESP+ESI+28],DL
00408532  |.  75 09               |JNZ SHORT FocusMag.0040853D
00408534  |.  46                  |INC ESI
00408535  |.  3BF3                |CMP ESI,EBX
00408537  |.^ 7C B3               \JL SHORT FocusMag.004084EC
00408539  |>  85ED                TEST EBP,EBP                               ;  EBP <> 0 ?正確值應為:EBP = 1
0040853B  |.  75 27               JNZ SHORT FocusMag.00408564                ;  一定要跳
0040853D  |>  8BAC24 28010000     MOV EBP,DWORD PTR SS:[ESP+128]
00408544  |>  6A 30               PUSH 30                                    ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00408546  |.  68 CCEE4200         PUSH FocusMag.0042EECC                     ; |Title = "Focus Magic"
0040854B  |.  68 68F54200         PUSH FocusMag.0042F568                     ; |Text = "Invalid Registration Code !
                                                                             ; |        If you have lost your registration code, or it
                                                                             ; |        does not work, then you can get your registration
                                                                             ; |        details emailed to you by going to :-
                                                                             ; |        http://www.focusmagic.com/newcode"
00408550  |.  55                  PUSH EBP                                   ; |hOwner
00408551  |.  FF15 94B14200       CALL DWORD PTR DS:[<&USER32.MessageBoxA>]  ; \MessageBoxA
00408557  |.  5F                  POP EDI
00408558  |.  5E                  POP ESI
00408559  |.  5D                  POP EBP
0040855A  |.  32C0                XOR AL,AL
0040855C  |.  5B                  POP EBX
0040855D  |.  81C4 14010000       ADD ESP,114
00408563  |.  C3                  RETN
00408564  |>  83FD 01             CMP EBP,1                                  ;  EBP <> 1 ?
00408567  |.  0F85 F6000000       JNZ FocusMag.00408663                      ;  這兒不能跳 EBP = 1 若EBP<>1、3,則顯示"專業版"?並非成功註冊。
0040856D  |.  8D5424 14           LEA EDX,DWORD PTR SS:[ESP+14]              ;  只要前面能跳至這兒就可以順利完成自動註冊了。
00408571  |.  52                  PUSH EDX                                   ; /pHandle
00408572  |.  68 8CE04200         PUSH FocusMag.0042E08C                     ; |Subkey = "SOFTWARE\Acclaim Software Ltd\Focus Magic"
00408577  |.  68 02000080         PUSH 80000002                              ; |hKey = HKEY_LOCAL_MACHINE
0040857C  |.  FF15 04B04200       CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKeyA>>; \RegOpenKeyA
00408582  |.  85C0                TEST EAX,EAX
00408584  |.  74 27               JE SHORT FocusMag.004085AD                 ;  這兒要跳
00408586  |.  8B8424 28010000     MOV EAX,DWORD PTR SS:[ESP+128]
0040858D  |.  6A 30               PUSH 30                                    ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0040858F  |.  68 4CF54200         PUSH FocusMag.0042F54C                     ; |Title = "Registry Entries Missing"
00408594  |.  68 0CF54200         PUSH FocusMag.0042F50C                     ; |Text = "Focus Magic is not installed properly.  Please re-install it"
00408599  |.  50                  PUSH EAX                                   ; |hOwner
0040859A  |.  FF15 94B14200       CALL DWORD PTR DS:[<&USER32.MessageBoxA>]  ; \MessageBoxA
004085A0  |.  5F                  POP EDI
004085A1  |.  5E                  POP ESI
004085A2  |.  5D                  POP EBP
004085A3  |.  32C0                XOR AL,AL
004085A5  |.  5B                  POP EBX
004085A6  |.  81C4 14010000       ADD ESP,114
004085AC  |.  C3                  RETN
004085AD  |>  8DBC24 C0000000     LEA EDI,DWORD PTR SS:[ESP+C0]              ;  以下應該是把輸入的正確註冊資訊寫入登錄檔
004085B4  |.  83C9 FF             OR ECX,FFFFFFFF
004085B7  |.  33C0                XOR EAX,EAX
004085B9  |.  8B5424 14           MOV EDX,DWORD PTR SS:[ESP+14]
004085BD  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
004085BF  |.  F7D1                NOT ECX
004085C1  |.  8B35 08B04200       MOV ESI,DWORD PTR DS:[<&ADVAPI32.RegSetVal>;  ADVAPI32.RegSetValueExA
004085C7  |.  51                  PUSH ECX                                   ; /BufSize
004085C8  |.  8D8C24 C4000000     LEA ECX,DWORD PTR SS:[ESP+C4]              ; |
004085CF  |.  51                  PUSH ECX                                   ; |Buffer
004085D0  |.  6A 01               PUSH 1                                     ; |ValueType = REG_SZ
004085D2  |.  50                  PUSH EAX                                   ; |Reserved => 0
004085D3  |.  68 80E04200         PUSH FocusMag.0042E080                     ; |ValueName = "User Name"
004085D8  |.  52                  PUSH EDX                                   ; |hKey
004085D9  |.  FFD6                CALL ESI                                   ; \RegSetValueExA
004085DB  |.  0FBE05 883E4300     MOVSX EAX,BYTE PTR DS:[433E88]             ;  38 "8"
004085E2  |.  83E8 30             SUB EAX,30
004085E5  |.  8D7C24 28           LEA EDI,DWORD PTR SS:[ESP+28]              ;  新碼 "12345"
004085E9  |.  C64424 13 00        MOV BYTE PTR SS:[ESP+13],0
004085EE  |.  8D0C80              LEA ECX,DWORD PTR DS:[EAX+EAX*4]           ;  ECX = 5 * EAX
004085F1  |.  8D0448              LEA EAX,DWORD PTR DS:[EAX+ECX*2]           ;  EAX = B * EAX
004085F4  |.  8A90 4DF34200       MOV DL,BYTE PTR DS:[EAX+42F34D]            ;  "1" Form "2190835647"
004085FA  |.  8A88 4EF34200       MOV CL,BYTE PTR DS:[EAX+42F34E]            ;  "9" Form "2190835647"
00408600  |.  885424 10           MOV BYTE PTR SS:[ESP+10],DL
00408604  |.  8A90 4FF34200       MOV DL,BYTE PTR DS:[EAX+42F34F]            ;  "0" Form "2190835647"
0040860A  |.  884C24 11           MOV BYTE PTR SS:[ESP+11],CL
0040860E  |.  83C9 FF             OR ECX,FFFFFFFF
00408611  |.  33C0                XOR EAX,EAX
00408613  |.  885424 12           MOV BYTE PTR SS:[ESP+12],DL
00408617  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
00408619  |.  F7D1                NOT ECX
0040861B  |.  8D4424 10           LEA EAX,DWORD PTR SS:[ESP+10]
0040861F  |.  51                  PUSH ECX                                   ; /BufSize
00408620  |.  8B4C24 18           MOV ECX,DWORD PTR SS:[ESP+18]              ; |
00408624  |.  50                  PUSH EAX                                   ; |Buffer
00408625  |.  6A 01               PUSH 1                                     ; |ValueType = REG_SZ
00408627  |.  6A 00               PUSH 0                                     ; |Reserved = 0
00408629  |.  68 A8E34200         PUSH FocusMag.0042E3A8                     ; |ValueName = "RCode"
0040862E  |.  51                  PUSH ECX                                   ; |hKey
0040862F  |.  FFD6                CALL ESI                                   ; \RegSetValueExA
00408631  |.  8B5424 14           MOV EDX,DWORD PTR SS:[ESP+14]
00408635  |.  52                  PUSH EDX                                   ; /hKey
00408636  |.  FF15 0CB04200       CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKey>>; \RegCloseKey
0040863C  |.  8B8424 28010000     MOV EAX,DWORD PTR SS:[ESP+128]             ;  以下這個對話方塊才是真正註冊成功時顯示的
00408643  |.  6A 30               PUSH 30                                    ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00408645  |.  68 CCEE4200         PUSH FocusMag.0042EECC                     ; |Title = "Focus Magic"
0040864A  |.  68 E4F44200         PUSH FocusMag.0042F4E4                     ; |Text = "Thankyou for registering Focus Magic"
0040864F  |.  50                  PUSH EAX                                   ; |hOwner = 0029025C
00408650  |.  FF15 94B14200       CALL DWORD PTR DS:[<&USER32.MessageBoxA>]  ; \MessageBoxA
00408656  |.  5F                  POP EDI
00408657  |.  5E                  POP ESI
00408658  |.  5D                  POP EBP
00408659  |.  B0 01               MOV AL,1
0040865B  |.  5B                  POP EBX
0040865C  |.  81C4 14010000       ADD ESP,114
00408662  |.  C3                  RETN
00408663  |>  83FD 03             CMP EBP,3                                  ;  EBP <> 3 ?顯示"專業版",估計是用來誤導的。
00408666  |.  75 1A               JNZ SHORT FocusMag.00408682
00408668  |.  8B8C24 28010000     MOV ECX,DWORD PTR SS:[ESP+128]
0040866F  |.  6A 00               PUSH 0                                     ; /Style = MB_OK|MB_APPLMODAL
00408671  |.  68 DCF44200         PUSH FocusMag.0042F4DC                     ; |Title = "RegType"
00408676  |.  68 CCF44200         PUSH FocusMag.0042F4CC                     ; |Text = "Professional"
0040867B  |.  51                  PUSH ECX                                   ; |hOwner
0040867C  |.  FF15 94B14200       CALL DWORD PTR DS:[<&USER32.MessageBoxA>]  ; \MessageBoxA
00408682  |>  5F                  POP EDI
00408683  |.  5E                  POP ESI
00408684  |.  5D                  POP EBP
00408685  |.  32C0                XOR AL,AL
00408687  |.  5B                  POP EBX
00408688  |.  81C4 14010000       ADD ESP,114
0040868E  \.  C3                  RETN

【演算法分析】程式在進行註冊時使用了二組資料:

第一組資料(用來生成RegCode記錄在登錄檔中):
0  5279631048
1  9275683014
2  3845721096
3  0234857961
4  5432986701
5  4530967821
6  3081497652
7  3140985672
8  2190835647
9  5476310928
第二組資料(用來驗證註冊碼是否成立):
0  7615804293
1  7816934250
2  7650239418
3  0912358647
4  8932106754
5  3982015674
6  1390487625
7  3190267854
8  3105867942
9  6584103297

    現在分析時間為“2004/11”,利用這些就夠了。設註冊碼為ABCDEFGHI(每個字母代表一個數字)。
    1)使用第二組中的一串數字,如“8932106754”;
    2)這串數字位於第4串,則E=4;
    3)為了使EBP=1,“1”位於“8932106754”的第5位,實際就由數字4定位,所以A=4;
    4)2004/10得餘數為4,“4”位於“8932106754”的第9位,故B=9;
    5)立一方程組:11(月份)=X+Y;X=10Z;Z=K1;Y=K2 => 設K1=K2(這樣一設就很容易解了)
       解得:K1=K2=1,“1”位於“8932106754”的第5位,實際就由數字4定位。
       這樣便確定了註冊碼的第3、4兩位:C=4,D=4;
    6)FGHI未用到,實際註冊碼僅用了5位;
    7)註冊碼為:49444

    由以上分析,很容易就寫出序號產生器了,在此略。

【破解總結】這個程式註冊時讀取了系統時間,所以註冊碼也會因時間不同而不同,這樣使得程式最終沒有依靠輸入的註冊碼為判斷依據,必將導致因為輕鬆爆破而使得軟體自注冊。

【版權宣告】本文純屬技術交流,轉載請註明作者並保持文章的完整,謝謝!


相關文章