[原創]Focus Magic V3.01 註冊演算法分析
【破解作者】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
由以上分析,很容易就寫出序號產生器了,在此略。
【破解總結】這個程式註冊時讀取了系統時間,所以註冊碼也會因時間不同而不同,這樣使得程式最終沒有依靠輸入的註冊碼為判斷依據,必將導致因為輕鬆爆破而使得軟體自注冊。
【版權宣告】本文純屬技術交流,轉載請註明作者並保持文章的完整,謝謝!
相關文章
- MouseStar V3.01註冊演算法分析 (18千字)2015-11-15演算法
- Magic convertor 2.8註冊碼演算法分析
- OCG (9千字)2015-11-15演算法
- supercleaner註冊演算法分析2015-11-15演算法
- 一個軟體的MD5註冊演算法【原創】2004-12-29演算法
- SpeedFlash註冊演算法分析(VB)2015-11-15演算法
- 財智老闆通3.04註冊版---註冊演算法分析2003-03-16演算法
- Instant Source 註冊演算法分析+註冊器原始碼2015-11-15演算法原始碼
- 【原創】星空視訊俱樂部 V1.75註冊演算法簡析2015-11-15演算法
- 【原創】Oracle的動態監聽註冊2008-04-14Oracle
- Screen Demo Maker 3.0 註冊演算法分析2003-07-15演算法
- <<Anti-Hack>> 2.0註冊演算法分析2003-06-06演算法
- Personal Antispy 1.14 註冊演算法分析2015-11-15演算法
- 冰盾濾鏡註冊演算法分析2015-11-15演算法
- [原創]破解-分析Crackme演算法2009-06-13演算法
- DLL Show V4.4 註冊演算法分析2015-11-15演算法
- Disk
Chief 1.2 簡單註冊演算法分析2015-11-15演算法
- E族百變桌面6.0註冊演算法分析2015-11-15演算法
- FolderView 1.7
註冊演算法分析 (14千字)2015-11-15View演算法
- ffmpeg分析系列之一(註冊該註冊的)2010-11-04
- LanSee 註冊演算法2015-11-15演算法
- 原創-XNview v1.65演算法分析2015-11-15View演算法
- 新狐傳真群發2.0註冊演算法分析2003-06-29演算法
- 網路精確時鐘 2.25註冊演算法分析2003-07-30演算法
- 重新貼過註冊演算法分析 (16千字)2001-10-23演算法
- 長沙vod點歌系統(註冊演算法分析)2015-11-15演算法
- Netscan pro 3.3 註冊演算法分析全過程2015-11-15演算法
- 【原創】TextPad 4.7.3序列號演算法分析2015-11-15演算法
- 公務員之路3.0註冊分析2015-11-15
- 東晨庫管網路版 6.5註冊演算法分析2003-08-14演算法
- EffeTech HTTP Sniffer 3.2註冊演算法分析 (5千字)2002-06-24HTTP演算法
- Green Tea 2.60註冊碼演算法分析 (3千字)2000-07-17演算法
- VB控制元件21Hex DockIt註冊演算法分析2015-11-15控制元件演算法
- 海嘯錄音機Ver2.1註冊演算法分析2015-11-15演算法
- FCKeditor原始碼分析(一)—–fckeditor.js的中文註釋分析(原創)薦2010-04-20原始碼JS
- 財智家庭理財V3.30註冊演算法分析2003-08-19演算法
- SuperCleaner 2.31註冊碼演算法分析 - OCG (13千字)2002-04-02演算法
- Registry Crawler 4.0註冊碼演算法分析 - OCG
(20千字)2002-04-07演算法
- UltraEdit-32
10註冊碼演算法分析 (19千字)2003-05-17演算法