網路電視大師 V4.0.0 Build 2003.9.25註冊演算法簡析

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

標 題:網路電視大師 V4.0.0 Build 2003.9.25註冊演算法簡析 

發信人:txm123

時 間: 2003年9月26日 04:34

詳細資訊:




網路電視大師V4.0.0 Build 2003.9.25註冊演算法簡析

    軟體簡介:這是一個在網路上看電視的軟體。
    破解作者:
             yzez[DFCG]
    破解工具:
             w32dasm、ODBG109B
    破解目的:
             初學破解,只為交流技術,請不要依據本文章寫序號產生器,還是多多保護一下本就艱難的國產軟體吧!
    破解過程:
1、軟體註冊失敗,會有提示資訊,用w32dasm反彙編找到關鍵斷點,用ODBG109B載入程式,按F9出現註冊資訊框後,
輸入註冊資訊,使用者名稱:YZEZ,試驗碼:1234567890098765432112,點確定,程式被斷下來,看下面:

00485958   .  PUSH    EBP
00485959   .  8BEC          MOV     EBPESP
0048595B   .  B9 05000000   MOV     ECX, 5
00485960   >  6A 00         PUSH    0
00485962   .  6A 00         PUSH    0
00485964   .  49            DEC     ECX
00485965   .^ 75 F9         JNZ     SHORT main.00485960
00485967   .  53            PUSH    EBX
00485968   .  8BD8          MOV     EBXEAX
0048596A   .  33D2          XOR     EDXEDX
0048596C   .  55            PUSH    EBP
0048596D   .  68 145B4800   PUSH    main.00485B14
00485972   .  64:FF32       PUSH    DWORD PTR FS:[EDX]
00485975   .  64:8922       MOV     DWORD PTR FS:[EDX], ESP
00485978   .  84C0          TEST    ALAL
0048597A   .  0F84 5F010000 JE      main.00485ADF
00485980   .  8D45 F4       LEA     EAXDWORD PTR SS:[EBP-C]
00485983   .  CALL    main.00404308***************我們在此CALL設斷!輸入註冊資訊後往下走! 
00485988   .  LEA     EDXDWORD PTR SS:[EBP-1C]
0048598B   .  MOV     EAXDWORD PTR DS:[EBX+2FC]
00485991   .  CALL    main.0043F94C
00485996   .  MOV     EAXDWORD PTR SS:[EBP-1C]***把機器碼:6875849699120117131144移入EAX中
00485999   .  LEA     EDXDWORD PTR SS:[EBP-18]
0048599C   .  CALL    main.00485878****************演算法CALL,按F7跟進!程式碼附後!
004859A1   .  MOV     EAXDWORD PTR SS:[EBP-18]***轉換後的機器碼:9:8=?:>BDC:B??>KDEBIKJ入EAX
004859A4   .  PUSH    EAX
004859A5   .  LEA     EDXDWORD PTR SS:[EBP-20]
004859A8   .  MOV     EAXDWORD PTR DS:[EBX+2F4]
004859AE   .  CALL    main.0043F94C
004859B3   .  MOV     EDXDWORD PTR SS:[EBP-20]***使用者名稱:YZEZ移入EDX
004859B6   .  LEA     EAXDWORD PTR SS:[EBP-4]
004859B9   .  POP     ECX                              
004859BA   .  CALL    main.0040460C
004859BF   .  LEA     EDXDWORD PTR SS:[EBP-24]
004859C2   .  MOV     EAXDWORD PTR DS:[EBX+2F4]
004859C8   .  CALL    main.0043F94C
004859CD   .  MOV     EDXDWORD PTR SS:[EBP-24]       
004859D0   .  MOV     EAXDWORD PTR DS:[EBX+318]
004859D6   .  CALL    main.0043F97C*****************此CALL把使用者名稱和變換後的機器碼串起來就是這種
*****************************************************形式:YZEZ9:8=?:>BDC:B??>KDEBIKJ
004859DB   .  MOV     EAXDWORD PTR DS:[EBX+31C]
004859E1   .  MOV     EDXDWORD PTR SS:[EBP-4]
004859E4   .  CALL    main.0043F97C
004859E9   .  CMP     DWORD PTR SS:[EBP-4], 0
004859ED   .  JE      main.00485ADF
004859F3   .  LEA     EDXDWORD PTR SS:[EBP-8]
004859F6   .  MOV     EAXDWORD PTR DS:[EBX+304]
004859FC   .  CALL    main.0043F94C
00485A01   .  LEA     EDXDWORD PTR SS:[EBP-C]
00485A04   .  MOV     EAXDWORD PTR SS:[EBP-4]
00485A07   .  CALL    main.00485878******************第二次計算,呼叫上面的同一個子程式,程式碼也是
*************一樣,這次是對變形機器碼+使用者名稱進行計算,即:YZEZ9:8=?:>BDC:B??>KDEBIKJ,計算也是一樣!
00485A0C   .  MOV     EDXDWORD PTR SS:[EBP-8]        
00485A0F   .  MOV     EAXDWORD PTR SS:[EBP-C]        
00485A12   .  CALL    main.004085C0******************在此CALL把計算後的值與輸入的試驗碼相比較
00485A17   .  TEST    EAXEAX***********************如果比較都符合,則EAX的值為0,否則不為0
00485A19   .  JE      SHORT main.00485A44************不為0,就不跳,不跳就往下!為0則跳走!
00485A1B   .  MOV     EAX, main.00485B28
00485A20   .  CALL    main.004392AC******************不跳,在這裡就失敗了,交錢吧!
00485A25   .  MOV     EAXDWORD PTR DS:[EBX+2F4]
00485A2B   .  XOR     EDXEDX
00485A2D   .  CALL    main.0043F97C
00485A32   .  MOV     EAXDWORD PTR DS:[EBX+304]
00485A38   .  XOR     EDXEDX
00485A3A   .  CALL    main.0043F97C
00485A3F   .  JMP     main.00485ADF
00485A44   >  XOR     EAXEAX***********************相等就跳到這裡!下面就寫入註冊資訊!
00485A46   .  PUSH    EBP
00485A47   .  PUSH    main.00485AD8
00485A4C   .  PUSH    DWORD PTR FS:[EAX]
00485A4F   .  MOV     DWORD PTR FS:[EAX], ESP
00485A52   .  MOV     DL, 1
00485A54   .  MOV     EAXDWORD PTR DS:[469F4C]
00485A59   .  CALL    main.0046A04C
00485A5E   .  MOV     DWORD PTR SS:[EBP-10], EAX
00485A61   .  MOV     EDX, 80000002
00485A66   .  MOV     EAXDWORD PTR SS:[EBP-10]
00485A69   .  CALL    main.0046A0EC
00485A6E   .  LEA     EAXDWORD PTR SS:[EBP-14]
00485A71   .  MOV     EDX, main.00485B68               
00485A76   .  CALL    main.004043A0
00485A7B   .  MOV     CL, 1
00485A7D   .  MOV     EDXDWORD PTR SS:[EBP-14]
00485A80   .  MOV     EAXDWORD PTR SS:[EBP-10]
00485A83   .  CALL    main.0046A150
00485A88   .  TEST    ALAL
00485A8A   .  JE      SHORT main.00485ABA
00485A8C   .  MOV     ECXDWORD PTR SS:[EBP-8]        
00485A8F   .  MOV     EDX, main.00485B88********************ASCII "Passwd"這裡寫入註冊碼!
00485A94   .  MOV     EAXDWORD PTR SS:[EBP-10]
00485A97   .  CALL    main.0046A2EC
00485A9C   .  LEA     EDXDWORD PTR SS:[EBP-28]
00485A9F   .  MOV     EAXDWORD PTR DS:[EBX+318]
00485AA5   .  CALL    main.0043F94C
00485AAA   .  MOV     ECXDWORD PTR SS:[EBP-28]       
00485AAD   .  MOV     EDX, main.00485B98********************"UsrName"這裡寫入使用者名稱!已經成功了!
00485AB2   .  MOV     EAXDWORD PTR SS:[EBP-10]
00485AB5   .  CALL    main.0046A2EC
00485ABA   >  MOV     EAXDWORD PTR SS:[EBP-10]
00485ABD   .  CALL    main.0046A0BC
00485AC2   .  XOR     EAXEAX
00485AC4   .  POP     EDX                              
00485AC5   .  POP     ECX                              
00485AC6   .  POP     ECX                              
00485AC7   .  MOV     DWORD PTR FS:[EAX], EDX
00485ACA   .  PUSH    main.00485ADF
00485ACF   >  MOV     EAXDWORD PTR SS:[EBP-10]
00485AD2   .  CALL    main.0040359C
00485AD7   .  RETN
=======================================================================================================================
***********************************演算法CALL的程式碼!省略部分程式碼**********************************************************
00485878  /$  PUSH    EBP*********************************追進演算法CALL後,我們停在這裡!
***********************************省略部分程式碼!
004858A8  |.  CALL    main.00404308
004858AD  |.  MOV     EAX, [LOCAL.1]**************把機器碼移入EAX中
004858B0  |.  CALL    main.004045C0
004858B5  |.  MOV     ESIEAX********************機器碼的位數移入ESI,機器碼是22(十六進位制值是16),ESI=16
004858B7  |.  TEST    ESIESI********************測試位數!                        
004858B9  |.  JLE     SHORT main.0048590D*********小於就跳走!這裡不會跳!直接往下!
004858BB  |.  MOV     EBX, 1**********************把1放進EBX
004858C0  |>  LEA     EAXDWORD PTR DS:[EBX+1E]**把值:EBX+1E=1+1E=1F入EAX這是第一次,第二次是2+1E=20,以後類
**************推,直至取完22位機器碼!
004858C3  |.  PUSH    EAX*************************EAX入棧!1F入棧
004858C4  |.  MOV     EAXEBX********************EBX的值入EAX,即EAX的值變成1
004858C6  |.  POP     EDX                             
004858C7  |.  MOV     ECXEDX********************EDX的值1F移入ECX中
004858C9  |.  CDQ*********************************EDX清0
004858CA  |.  IDIV    ECX*************************EAX=EAX/ECX=1/1F=0,餘數1放在EDX中
004858CC  |.  MOV     EDIEDX********************EDX入EDI,1入EDI
004858CE  |.  MOV     EAXEBX********************1入EAX
004858D0  |.  XOR     EAXEBX********************EAX清0
004858D2  |.  XOR     EAXEBX********************EAX的值為1
004858D4  |.  XOR     EDIEAX********************EDI清0
004858D6  |.  LEA     EAXDWORD PTR DS:[EBX+14]**EBX+14=1+14=15入EAX,同上,第二次是2+14=16
004858D9  |.  PUSH    EAX
004858DA  |.  MOV     EAXEBX********************EAX的值為1
004858DC  |.  POP     EDX                           
004858DD  |.  MOV     ECXEDX********************15入ECX
004858DF  |.  CDQ*********************************EDX清0
004858E0  |.  IDIV    ECX*************************EAX=EAX/ECX=1/15=0,餘數1放在EDX中
004858E2  |.  XOR     EDXEBX********************EDX清0
004858E4  |.  ADD     EDIEDX********************EDI=EDI+EDX=0+0=0
004858E6  |.  ADD     EDIEBX********************EDI=EDI+EBX=0+1=1
004858E8  |.  XOR     EDI, 3**********************1與常數3相異或,值為2
004858EB  |.  INC     EDI*************************EDI的值再加1,為3
004858EC  |.  LEA     EAX, [LOCAL.4]
004858EF  |.  MOV     EDX, [LOCAL.1]**************機器碼入EDX
004858F2  |.  MOVZX   EDXBYTE PTR DS:[EDX+EBX-1]***取機器碼的第一位:6(ASCII碼值為36)
004858F7  |.  ADD     EDXEDI********************EDX=EDX+EDI=3+36=39(十進位制值為9)
004858F9  |.  CALL    main.004044E8
004858FE  |.  MOV     EDX, [LOCAL.4]
00485901  |.  LEA     EAX, [LOCAL.3]
00485904  |.  CALL    main.004045C8
00485909  |.  INC     EBX*************************EBX+1=2
0048590A  |.  DEC     ESI*************************ESI-1=16-1=15                             
0048590B  |.^ JNZ     SHORT main.004858C0*********機器碼取完了嗎?沒取完繼續迴圈,這一個迴圈是處理機器
********碼,把機器碼進行轉換!轉換是這樣:每次取出一位機器碼設為M,其對應的在機器碼中所處的位數設為X,
********X XOR 3=Y,設轉換後的值為N,N=Y+M(加的值是其ASCII碼值),得到結果N取對應的字串,就是轉換後的值
********如取第一位:6,6對應的位數是:1,所以1^3=2,2+1=3,3+36=39,轉換後的第一位值就是:9;第二位:8,就
********是:2^3=1,1+1=2,2+38=3A,3A對應的字串是:“:”這就是轉換後的第二位值,以下類推。我的機器碼:
********6875849699120117131144轉換後的值是:9:8=?:>BDC:B??>KDEBIKJ
0048590D  |>  MOV     EAX, [LOCAL.2]
00485910  |.  MOV     EDX, [LOCAL.3]
00485913  |.  CALL    main.0040435C
00485918  |.  XOR     EAXEAX
0048591A  |.  POP     EDX                              
0048591B  |.  POP     ECX                              
0048591C  |.  POP     ECX                              
0048591D  |.  MOV     DWORD PTR FS:[EAX], EDX
00485920  |.  PUSH    main.00485942
00485925  |>  LEA     EAX, [LOCAL.4]
00485928  |.  MOV     EDX, 2
0048592D  |.  CALL    main.0040432C
00485932  |.  LEA     EAX, [LOCAL.1]
00485935  |.  CALL    main.00404308
0048593A  .  RETN
2、演算法小結:
   計算註冊碼用到機器碼和你輸入的使用者名稱,要經過兩次計算,第一次計算把機器碼進行轉換,轉換是這樣:每次取
出一位機器碼設為M,其對應的在機器碼中所處的位數設為X,X XOR 3=Y,設轉換後的值為N,N=Y+M(加的值是其ASCII
碼值),得到結果N取對應的字串,就是轉換後的值如取第一位:6,6對應的位數是:1,所以1^3=2,2+1=3,3+36=39,
轉換後的第一位值就是:9;第二位:8,是:2^3=1,1+1=2,2+38=3A,3A對應的字串是:“:”這就是轉換後的第二
位值,以下類推。我的機器碼:6875849699120117131144轉換後的值是:9:8=?:>BDC:B??>KDEBIKJ
   第二次計算把使用者名稱和變形後的機器碼連線起來,組成一個新的值,再把這個值按上述公式計算出你的註冊碼,計算
一樣,不再多說明。
   一個成功的註冊碼:
  使用者名稱:YZEZ
  機器碼:6875849699120117131144
  註冊碼:\Fb@@=IJDGRSQGVRQOc[[Wefd
  計算註冊碼的公式簡述如下:
  設一位註冊碼為M,其對應在碼中的位數為X,計算的中間值為Y,計算後的註冊碼對應的ASCII碼值為N
  公式如下:X^3=Y,N=Y+M(取對應的字串)

相關文章