E族百變桌面6.0註冊演算法分析

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

標 題:E族百變桌面6.0註冊演算法分析

發信人:txm123

時 間:2003/07/18 00:15am

詳細資訊:


E族百變桌面6.0註冊演算法分析                
 
軟體名稱:
 E族百變桌面6.0
 
軟體簡介:
 e族百變桌面 6.0  
軟體大小:1386KB
軟體語言:簡體中文
軟體類別:國產軟體/共享版/佈景保護
執行環境:Win9x/Me/NT/2000/XP
加入時間:2003-6-30 16:56:23
下載次數:642
軟體評級:
聯 系 人:未知
開 發 商:Home Page
軟體介紹:
  提供25種變換桌面的方式,讓您的桌面煥然一新。操作簡單,無需費力學習。支援多種Internet流行圖片格式。將桌布檔案打包,方便存
儲、轉發。將桌布包展開,還原圖片檔案。e族網真情奉獻,免費下載,免費使用。e族百變桌面,桌面從此精彩!


 
下載地址:
 http://www.onlinedown.net/index.htm
 
------------------------------------------------------------
 
破解作者:
 yzez[DFCG]
 
破解工具:
 DeDE3.5、Ollydbg1.09
 
破解目的:
 初次學破解,交流經驗。研究註冊演算法,提高水平。
 
------------------------------------------------------------
 
[破解過程]
 
詳細過程:
1、用FI檢查是Delphi程式,所以用DeDE3.5反彙編,選過程,在出現的視窗中選擇frmbuy--bnNextClick,找到關鍵點:
  004CCA4A   E8CDC2F3FF             call    00408D1C
004CCA4F   8945F0                 mov     [ebp-$10], eax
004CCA52   8955F4                 mov     [ebp-$0C], edx
004CCA55   8B45FC                 mov     eax, [ebp-$04]
004CCA58   FFB0C4030000           push    dword ptr [eax+$03C4]
004CCA5E   FFB0C0030000           push    dword ptr [eax+$03C0]
004CCA64   FF75F4                 push    dword ptr [ebp-$0C]
004CCA67   FF75F0                 push    dword ptr [ebp-$10]
004CCA6A   B001                   mov     al, $01

|
004CCA6C   E85FF3FFFF             call    004CBDD0---------這是我們要找的關鍵CALL,這一步我不想詳細介紹,這篇破文主要研究演算法。
2、退出DeDE3.5,用Ollydbg除錯:
004CCA6A   .  B0 01         MOV     AL, 1
004CCA6C   .  E8 5FF3FFFF   CALL    EPAPER.004CBDD0---------------------------在此按F2鍵設斷,按F9執行程式,填入註冊資訊後,
                                                                             點確定,被斷,按F7跟進這個CALL
004CCA71   .  8B15 90AF4D00 MOV     EDX, DWORD PTR DS:[4DAF90]       ;  EPAPER.004DCD94
004CCA77   .  8802          MOV     BYTE PTR DS:[EDX], AL
004CCA79   .  A1 90AF4D00   MOV     EAX, DWORD PTR DS:[4DAF90]
004CCA7E   .  8038 00       CMP     BYTE PTR DS:[EAX], 0
004CCA81   .  74 4C         JE      SHORT EPAPER.004CCACF
004CCA83   .  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-4]
004CCA86   .  C780 CC030000>MOV     DWORD PTR DS:[EAX+3CC], 4
004CCA90   .  FF75 F4       PUSH    DWORD PTR SS:[EBP-C]             ; /Arg2 = 00000000
004CCA93   .  FF75 F0       PUSH    DWORD PTR SS:[EBP-10]            ; |Arg1 = 499602D2
004CCA96   .  8D45 C0       LEA     EAX, DWORD PTR SS:[EBP-40]       ; |
004CCA99   .  E8 BAC1F3FF   CALL    EPAPER.00408C58                  ; \EPAPER.00408C58
004CCA9E   .  8B55 C0       MOV     EDX, DWORD PTR SS:[EBP-40]
004CCAA1   .  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-4]
004CCAA4   .  8B80 44030000 MOV     EAX, DWORD PTR DS:[EAX+344]
004CCAAA   .  E8 25F3F8FF   CALL    EPAPER.0045BDD4
--------------------追進004CCA6C   .  E8 5FF3FFFF   CALL    EPAPER.004CBDD0我們來到這裡:
004CBDD0  /$  55            PUSH    EBP----------------------停在這一行
004CBDD1  |.  8BEC          MOV     EBP, ESP
004CBDD3  |.  83C4 F8       ADD     ESP, -8
004CBDD6  |.  53            PUSH    EBX
004CBDD7  |.  56            PUSH    ESI                              ;  ePaper.0049F0E8
004CBDD8  |.  33D2          XOR     EDX, EDX
004CBDDA  |.  8955 F8       MOV     [LOCAL.2], EDX
004CBDDD  |.  8845 FF       MOV     BYTE PTR SS:[EBP-1], AL
004CBDE0  |.  33C0          XOR     EAX, EAX
004CBDE2  |.  55            PUSH    EBP
004CBDE3  |.  68 67BE4C00   PUSH    ePaper.004CBE67
004CBDE8  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004CBDEB  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004CBDEE  |.  33DB          XOR     EBX, EBX
004CBDF0  |.  FF75 14       PUSH    [ARG.4]                          ;  ePaper.0049F0CF
004CBDF3  |.  FF75 10       PUSH    [ARG.3]
004CBDF6  |.  E8 B1000000   CALL    ePaper.004CBEAC------按F7再追進這個CALL.為什麼?看看下面的程式碼,這是很經典的比較語句
004CBDFB  |.  3B55 0C       CMP     EDX, [ARG.2]                     ;  ePaper.0049F10B
004CBDFE  |.  75 07         JNZ     SHORT ePaper.004CBE07
004CBE00  |.  3B45 08       CMP     EAX, [ARG.1]
004CBE03  |.  75 02         JNZ     SHORT ePaper.004CBE07
004CBE05  |.  B3 01         MOV     BL, 1
004CBE07  |>  807D FF 00    CMP     BYTE PTR SS:[EBP-1], 0
004CBE0B  |.  74 44         JE      SHORT ePaper.004CBE51
-----------------追進004CBDF6  |.  E8 B1000000   CALL    ePaper.004CBEAC,我們又會來到這裡:
004CBEA4   .  52 65 67 43 6>ASCII   "RegCode",0DD註冊碼,可見我們找到了地方
004CBEAC  /$  55            PUSH    EBP---------停在這一行
004CBEAD  |.  8BEC          MOV     EBP, ESP
004CBEAF  |.  83C4 E0       ADD     ESP, -20
004CBEB2  |.  53            PUSH    EBX
004CBEB3  |.  56            PUSH    ESI                              ;  ePaper.0049F0E8
004CBEB4  |.  33C0          XOR     EAX, EAX
004CBEB6  |.  8945 E0       MOV     [LOCAL.8], EAX
004CBEB9  |.  8945 EC       MOV     [LOCAL.5], EAX
004CBEBC  |.  8945 E8       MOV     [LOCAL.6], EAX
004CBEBF  |.  8945 E4       MOV     [LOCAL.7], EAX
004CBEC2  |.  33C0          XOR     EAX, EAX
004CBEC4  |.  55            PUSH    EBP
004CBEC5  |.  68 D9BF4C00   PUSH    ePaper.004CBFD9
004CBECA  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004CBECD  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004CBED0  |.  FF75 0C       PUSH    [ARG.2]                          ; /Arg2 = 00000000
004CBED3  |.  FF75 08       PUSH    [ARG.1]                          ; |Arg1 = 499602D2
004CBED6  |.  8D45 EC       LEA     EAX, [LOCAL.5]                   ; |
004CBED9  |.  E8 7ACDF3FF   CALL    ePaper.00408C58                  ; \ePaper.00408C58
004CBEDE  |.  8B45 08       MOV     EAX, [ARG.1]-DDDDD把機器碼的十六進位制值賦給EAX
004CBEE1  |.  8945 F0       MOV     [LOCAL.4], EAX
004CBEE4  |.  8B45 0C       MOV     EAX, [ARG.2]
004CBEE7  |.  8945 F4       MOV     [LOCAL.3], EAX
004CBEEA  |.  8B45 EC       MOV     EAX, [LOCAL.5]
004CBEED  |.  E8 F288F3FF   CALL    ePaper.004047E4
004CBEF2  |.  8BD8          MOV     EBX, EAX
004CBEF4  |.  85DB          TEST    EBX, EBX
004CBEF6  |.  7E 56         JLE     SHORT ePaper.004CBF4E
004CBEF8  |.  BE 01000000   MOV     ESI, 1
004CBEFD  |>  8D45 E0       /LEA     EAX, [LOCAL.8]--從這裡開始是一個迴圈,一共迴圈10次,因為機器碼是:10位
004CBF00  |.  8B55 EC       |MOV     EDX, [LOCAL.5]-----賦EDX為0
004CBF03  |.  8A5432 FF     |MOV     DL, BYTE PTR DS:[EDX+ESI-1]
004CBF07  |.  E8 0088F3FF   |CALL    ePaper.0040470C
004CBF0C  |.  8B45 E0       |MOV     EAX, [LOCAL.8]
004CBF0F  |.  E8 08E5F3FF   |CALL    ePaper.0040A41C
004CBF14  |.  DB2D F0BF4C00 |FLD     TBYTE PTR DS:[4CBFF0]----------------裝入實數:4CBFF0的值是:3.1415926535897932380
004CBF1A  |.  DEC9          |FMULP   ST(1), ST--------------ST(1)*ST送入ST,然後出棧,ST是3.1415926535897932380,ST(1)是機器碼按
位取數,如第一次迴圈,取第一位是:3,所以執行運算後其結果是:3.1415926535897932380*3.0000000000000000000=9.4247779607693793480
004CBF1C  |.  E8 4F6CF3FF   |CALL    ePaper.00402B70----------這個CALL幹什麼用?
--------------下面是004CBF1C  |.  E8 4F6CF3FF   |CALL    ePaper.00402B70這個CALL的程式碼

00402B70  /$  83EC 08       SUB     ESP, 8
00402B73  |.  DF3C24        FISTP   QWORD PTR SS:[ESP]--------將ST以整數形式儲存,注意四捨五入,如:9.4247779607693793480保留
                                                             整數是9。
00402B76  |.  9B            WAIT
00402B77  |.  58            POP     EAX                              ;  ePaper.00404719
00402B78  |.  5A            POP     EDX                              ;  ePaper.00404719
------------------------------------------------------------------DDDDDDDDDD
004CBF21  |.  3345 F0       |XOR     EAX, [LOCAL.4]  ;  ePaper.0049F0E8----------------第一次迴圈是把機器碼的十六進位制值與EAX
             異或送入EAX,EAX是多少?就是上面浮點運算取得的整數值(轉為十六進位制).如:第一次迴圈就是:E62C6708 XOR 9=E62C6701
             (E62C6708是我的機器碼3861669640的十六進位制值)                                                               
004CBF24  |.  3355 F4       |XOR     EDX, [LOCAL.3]----------------------EDX清零
004CBF27  |.  81F0 A09EF21B |XOR     EAX, 1BF29EA0---------------------E62C6701 XOR 1BF29EA0=FDDEF9A1
004CBF2D  |.  81F2 00000000 |XOR     EDX, 0
004CBF33  |.  85D2          |TEST    EDX, EDX
004CBF35  |.  7D 07         |JGE     SHORT ePaper.004CBF3E--大於等於轉移
004CBF37  |.  F7D8          |NEG     EAX
004CBF39  |.  83D2 00       |ADC     EDX, 0-------------帶進位+0
004CBF3C  |.  F7DA          |NEG     EDX
004CBF3E  |>  0345 F0       |ADD     EAX, [LOCAL.4]  ;  ePaper.0049F0E8--------FDDEF9A1+E62C6708=E40B60A9
004CBF41  |.  1355 F4       |ADC     EDX, [LOCAL.3]--帶進位加:EDX+EDX=1+0=1賦給Arg2
004CBF44  |.  8945 F0       |MOV     [LOCAL.4], EAX--E40B60A9替換E62C6708賦值給Arg1
004CBF47  |.  8955 F4       |MOV     [LOCAL.3], EDX
004CBF4A  |.  46            |INC     ESI      ;  ePaper.0049F0E8------調整
004CBF4B  |.  4B            |DEC     EBX---------------------------EBX減一,
004CBF4C  |.^ 75 AF         \JNZ     SHORT ePaper.004CBEFD--完了嗎?沒完繼續.跳回前面重新來過!
004CBF4E  |>  FF75 F4       PUSH    [LOCAL.3]                        ; /Arg2 = 000003F7
004CBF51  |.  FF75 F0       PUSH    [LOCAL.4]                        ; |Arg1 = 1C02DF42這是十次迴圈計算後的Arg1和Arg2的值
004CBF54  |.  8D45 E8       LEA     EAX, [LOCAL.6]                   ; |
004CBF57  |.  E8 FCCCF3FF   CALL    ePaper.00408C58  ; \ePaper.00408C58----------------此CALL把上述運算得到的Arg1、Arg2連線
                                                                    起來,就是;3F71C02DF42,再轉化為十進位制值是:4359861755714
004CBF5C  |.  8B45 E8       MOV     EAX, [LOCAL.6]                   ;  ePaper.004CBE67
004CBF5F  |.  E8 8088F3FF   CALL    ePaper.004047E4
004CBF64  |.  8BD8          MOV     EBX, EAX----------------------取位數,EAX是0D(即13),上面轉化的數值就是十三位數
004CBF66  |.  8B45 EC       MOV     EAX, [LOCAL.5]
004CBF69  |.  E8 7688F3FF   CALL    ePaper.004047E4
004CBF6E  |.  3BD8          CMP     EBX, EAX----------------------比較位數:EAX為0A(10),EBX為0D(13)
004CBF70  |.  7D 08         JGE     SHORT ePaper.004CBF7A---------大於等於轉移
004CBF72  |.  8B45 E8       MOV     EAX, [LOCAL.6]                   ;  ePaper.004CBE67
004CBF75  |.  E8 DA91F6FF   CALL    ePaper.00435154
004CBF7A  |>  8B45 E8       MOV     EAX, [LOCAL.6] ----------------轉移到此 ,賦註冊碼位數為0A即10位                
004CBF7D  |.  E8 6288F3FF   CALL    ePaper.004047E4
004CBF82  |.  8BD8          MOV     EBX, EAX
004CBF84  |.  8B45 EC       MOV     EAX, [LOCAL.5]
004CBF87  |.  E8 5888F3FF   CALL    ePaper.004047E4
004CBF8C  |.  2BD8          SUB     EBX, EAX----------------------這裡調整位數:EBX=0D-0A
004CBF8E  |.  43            INC     EBX---------------------------EBX+1
004CBF8F  |>  8D45 E4       /LEA     EAX, [LOCAL.7]
004CBF92  |.  50            |PUSH    EAX
004CBF93  |.  8B45 EC       |MOV     EAX, [LOCAL.5]
004CBF96  |.  E8 4988F3FF   |CALL    ePaper.004047E4
004CBF9B  |.  8BC8          |MOV     ECX, EAX
004CBF9D  |.  8BD3          |MOV     EDX, EBX
004CBF9F  |.  8B45 E8       |MOV     EAX, [LOCAL.6]  ;  ePaper.004CBE67-------------註冊碼只取十位
004CBFA2  |.  E8 9D8AF3FF   |CALL    ePaper.00404A44
004CBFA7  |.  4B            |DEC     EBX---------------------------------------------EBX減一就是3
004CBFA8  |.  8B45 E4       |MOV     EAX, [LOCAL.7]------把4359861755714去掉前三位:9861755714賦給EAX這就是我們所需要的註冊碼!
004CBFAB  |.  8038 30       |CMP     BYTE PTR DS:[EAX], 30
004CBFAE  |.^ 74 DF         \JE      SHORT ePaper.004CBF8F
004CBFB0  |.  8B45 E4       MOV     EAX, [LOCAL.7]
004CBFB3  |.  E8 64CDF3FF   CALL    ePaper.00408D1C
004CBFB8  |.  8945 F8       MOV     [LOCAL.2], EAX
004CBFBB  |.  8955 FC       MOV     [LOCAL.1], EDX
004CBFBE  |.  33C0          XOR     EAX, EAX
004CBFC0  |.  5A            POP     EDX                              ;  0012F7B0
004CBFC1  |.  59            POP     ECX                              ;  0012F7B0
004CBFC2  |.  59            POP     ECX                              ;  0012F7B0
004CBFC3  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004CBFC6  |.  68 E0BF4C00   PUSH    ePaper.004CBFE0
004CBFCB  |>  8D45 E0       LEA     EAX, [LOCAL.8]
004CBFCE  |.  BA 04000000   MOV     EDX, 4
004CBFD3  |.  E8 7085F3FF   CALL    ePaper.00404548
004CBFD8  \.  C3            RETN
--------------------------------------------------------------------------------------
演算法小結:這是根據軟體隨機產生的十位機器碼進行計算,得出正確的註冊碼。計算分兩步:
1、機器碼經過按位運算產生Arg1和Arg2兩組值。Arg1的運算是這樣:首先按位取值,取出註冊碼的一位值乘3.1415926535897932380,把結果
取整數(注意四捨五入)賦給EAX,然後機器碼的十六進位制值異或EAX,結果存EAX(注意這是第一次迴圈),然後再與常數:1BF29EA0相異或,結果
加上機器碼的十六進位制值,完成第一次迴圈,把這一運算結果儲存,進行第二次迴圈。語言太差,總覺得說不清楚,下面舉例說明:
 第一次迴圈:Arg1(1)我假定為Arg1(1),Arg1(1)=機器碼 XOR 3.1415926535897932380*3.0000000000000000000的整數值的十六進位制(9) XOR
1BF29EA0+機器碼= FDDEF9A1+ E62C6708=E40B60A9
 第二次迴圈:Arg1(2)= Arg1(1) XOR 3.1415926535897932380*8.0000000000000000000的整數值的十六進位制(19) XOR 1BF29EA0+ Arg1(1)=
E4055EB9
。。。。。。。。。。。。。。。。。。。下述相類似省略
 第十次迴圈:Arg1(10)= Arg1(9) XOR 3.1415926535897932380*0.0000000000000000000的整數值的十六進位制(0) XOR 1BF29EA0+ Arg1(9)=
1C02DF42,這就是:Arg1的最後結果。
 Arg2的運算:Arg2=(位數-1)+1+(位數-1)(這也是第一次的迴圈),後面的迴圈: Arg2(n)= Arg2(n-1)+1+ Arg2(n-1),如第一次迴圈:
Arg2(1)=0(1-1)+1+0(1-1)=1;
Arg2(2)=1+1+1=3。。。。。。。。。以下省略
Arg2(10)=1FB+1+1FB=3F7,這是Arg2的值。
2、這是第二步運算,把Arg1和Arg2連線起來,構成一個十六進位制值,即Arg2Arg1=3F71C02DF42,轉化為十進位制值是:4359861755714,註冊碼是
10位,把前面3位去掉,就是真正的註冊碼,如我的註冊碼是:9861755714。


相關文章