凌鵬光碟出租與銷售系統(網路版) 5.0

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

標 題:凌鵬光碟出租與銷售系統(網路版) 5.0 

發信人:txm123

時 間:2003年8月29日 04:41

詳細資訊:



軟體名稱:
  凌鵬光碟出租與銷售系統(網路版) 5.0
下載地址:http://www.onlinedown.net/soft/18269.htm 
------------------------------------------------------------  
破解作者:
  yzez[DFCG]  
破解工具:
  w32dasm、0llydbg1.09
   
破解目的:
  本不為破解而破解,只因為技術而破解!
   
------------------------------------------------------------
   
[破解過程]
   
詳細過程:
1、用w32dasm反彙編,查有用資訊:"註冊成功",雙擊我們來到這裡:
:004D76B0 55                      push ebp
:004D76B1 8BEC                    mov ebpesp
:004D76B3 B905000000              mov ecx, 00000005
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004D76BD(C)
|
:004D76B8 6A00                    push 00000000
:004D76BA 6A00                    push 00000000
:004D76BC 49                      dec ecx
:004D76BD 75F9                    jne 004D76B8
:004D76BF 51                      push ecx
:004D76C0 53                      push ebx
:004D76C1 56                      push esi
:004D76C2 8BD8                    mov ebxeax
:004D76C4 33C0                    xor eaxeax
:004D76C6 55                      push ebp
:004D76C7 6816784D00              push 004D7816
:004D76CC 64FF30                  push dword ptr fs:[eax]
:004D76CF 648920                  mov dword ptr fs:[eax], esp
:004D76D2 8D55FC                  lea edxdword ptr [ebp-04]
:004D76D5 8B831C030000            mov eaxdword ptr [ebx+0000031C]
:004D76DB E8A410F7FF              call 00448784====>在這裡我們設定好斷點!斷點不妨設前一點!
:004D76E0 8B45FC                  mov eaxdword ptr [ebp-04]
:004D76E3 E88C1DF3FF              call 00409474
:004D76E8 8BF0                    mov esieax
:004D76EA 8D55F8                  lea edxdword ptr [ebp-08]
:004D76ED 8B8314030000            mov eaxdword ptr [ebx+00000314]
:004D76F3 E88C10F7FF              call 00448784
:004D76F8 8B45F8                  mov eaxdword ptr [ebp-08]
:004D76FB E8741DF3FF              call 00409474
:004D7700 03C0                    add eaxeax
:004D7702 058F568700              add eax, 0087568F
:004D7707 056B5A8700              add eax, 00875A6B
:004D770C 05A25D4F00              add eax, 004F5DA2
:004D7711 8D0480                  lea eaxdword ptr [eax+4*eax]
:004D7714 3BF0                    cmp esieax===>這是一個比較指令!比較什麼?
:004D7716 0F85AF000000            jne 004D77CB===>這裡是一個跳轉指令,跳向何處?往下看:my god
=====================================>下面一行是什麼?"註冊失敗"?!一定不能跳呀!
:004D771C 6A00                    push 00000000
* Possible StringData Ref from Code Obj ->"註冊成功"
                                  |
:004D771E B924784D00              mov ecx, 004D7824===>雙擊我們來到此!我們往上找跳轉指令!
* Possible StringData Ref from Code Obj ->"你已經註冊成功,現在你可以毫無限制的使用本軟體"
                                        ->"了,多謝你的信任!"
                                  |
:004D7723 BA30784D00              mov edx, 004D7830
:004D7728 A120135800              mov eaxdword ptr [00581320]
:004D772D 8B00                    mov eaxdword ptr [eax]
:004D772F E8E014F9FF              call 00468C14
* Possible StringData Ref from Code Obj ->"注:本軟體已經註冊,請你放心使用"
                                  |
:004D7734 BA78784D00              mov edx, 004D7878
:004D7739 8B8308030000            mov eaxdword ptr [ebx+00000308]
:004D773F E87010F7FF              call 004487B4
:004D7744 8B8330030000            mov eaxdword ptr [ebx+00000330]
:004D774A 8B8078010000            mov eaxdword ptr [eax+00000178]
:004D7750 50                      push eax
:004D7751 8B00                    mov eaxdword ptr [eax]
:004D7753 FF9098000000            call dword ptr [eax+00000098]
:004D7759 E8C2F1F2FF              call 00406920
:004D775E 8D55E4                  lea edxdword ptr [ebp-1C]
:004D7761 8B831C030000            mov eaxdword ptr [ebx+0000031C]
:004D7767 E81810F7FF              call 00448784
:004D776C 8B45E4                  mov eaxdword ptr [ebp-1C]
:004D776F E8001DF3FF              call 00409474
:004D7774 8BD0                    mov edxeax
:004D7776 8D45E8                  lea eaxdword ptr [ebp-18]
:004D7779 B1FC                    mov cl, FC
:004D777B E83CE1F2FF              call 004058BC
:004D7780 FF75F4                  push [ebp-0C]
:004D7783 FF75F0                  push [ebp-10]
:004D7786 FF75EC                  push [ebp-14]
:004D7789 FF75E8                  push [ebp-18]
:004D778C 8D45D4                  lea eaxdword ptr [ebp-2C]
* Possible StringData Ref from Code Obj ->"註冊碼"
                                  |
:004D778F BAA4784D00              mov edx, 004D78A4
:004D7794 E813E1F2FF              call 004058AC
:004D7799 FF75E0                  push [ebp-20]
:004D779C FF75DC                  push [ebp-24]
:004D779F FF75D8                  push [ebp-28]
:004D77A2 FF75D4                  push [ebp-2C]
:004D77A5 8B8330030000            mov eaxdword ptr [ebx+00000330]
:004D77AB 8B8078010000            mov eaxdword ptr [eax+00000178]
:004D77B1 50                      push eax
:004D77B2 8B00                    mov eaxdword ptr [eax]
:004D77B4 FF90AC000000            call dword ptr [eax+000000AC]
:004D77BA E861F1F2FF              call 00406920
:004D77BF A1742D5800              mov eaxdword ptr [00582D74]
:004D77C4 E87FDBF8FF              call 00465348
:004D77C9 EB18                    jmp 004D77E3
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004D7716(C)
|
:004D77CB 6A00                    push 00000000====>上面的跳跳到這裡呀!
* Possible StringData Ref from Code Obj ->"註冊失敗"
                                  |
:004D77CD B9AC784D00              mov ecx, 004D78AC
2、用0llydbg動態除錯,設斷在::004D76DB  |.  CALL    discsyst.00448784,以下是程式程式碼:

004D76BF  |.  PUSH    ECX
004D76C0  |.  PUSH    EBX
004D76C1  |.  PUSH    ESI                             
004D76C2  |.  MOV     EBXEAX
004D76C4  |.  XOR     EAXEAX
004D76C6  |.  PUSH    EBP
004D76C7  |.  PUSH    discsyst.004D7816
004D76CC  |.  PUSH    DWORD PTR FS:[EAX]
004D76CF  |.  MOV     DWORD PTR FS:[EAX], ESP
004D76D2  |.  LEA     EDX, [LOCAL.1]
004D76D5  |.  MOV     EAXDWORD PTR DS:[EBX+31C]
004D76DB  |.  CALL    discsyst.00448784===>在此CALL中斷,按F8往下!
004D76E0  |.  MOV     EAX, [LOCAL.1]===>輸入的假註冊碼入EAX
004D76E3  |.  CALL    discsyst.00409474==>此CALL把輸入的假註冊碼由十進位制轉化成十六進位制!
=====================>我輸入假碼:12345678,轉換成十六進位制為:BC614E!
004D76E8  |.  MOV     ESIEAX=====>把轉換後的假碼儲存在:ESI!
004D76EA  |.  LEA     EDX, [LOCAL.2]
004D76ED  |.  MOV     EAXDWORD PTR DS:[EBX+314]
004D76F3  |.  CALL    discsyst.00448784
004D76F8  |.  MOV     EAX, [LOCAL.2] ==>機器碼移入EAX,我的機器碼為:1021131!                  
004D76FB  |.  CALL    discsyst.00409474==>此CALL把機器碼進行轉換,由十進位制轉換成十六進位制值:
====================>F94CB,並把值儲存在EAX中!
004D7700  |.  ADD     EAXEAX==>這裡開始計算註冊碼!EAX=EAX+EAX=F94CB+F94CB=1F2996
004D7702  |.  ADD     EAX, 87568F==>EAX=EAX+常數:87568F=1F2996+87568F=A68025
004D7707  |.  ADD     EAX, 875A6B==>EAX=EAX+常數:875A6B=1F2996+875A6B=12DDA90
004D770C  |.  ADD     EAX, discsyst.004F5DA2==>EAX=EAX+地址值:4F5DA2=12DDA90+4F5DA2=17D3832
004D7711  |.  LEA     EAXDWORD PTR DS:[EAX+EAX*4]==>地址傳送指令,把DS:[EAX+EAX*4]的值移入EAX,
=================>EAX=[EAX+EAX*4]=17D3832+17D3832*4=77218FA
004D7714  |.  CMP     ESIEAX===>比較ESI與EAX的值,ESI是:BC614E,EAX的值是:77218FA
004D7716  |.  JNZ     discsyst.004D77CB==>不相等則跳,一跳就送你見上帝!阿彌陀佛不能跳!
004D771C  |.  PUSH    0
004D771E  |.  MOV     ECX, discsyst.004D7824
004D7723  |.  MOV     EDX, discsyst.004D7830
004D7728  |.  MOV     EAXDWORD PTR DS:[581320]
004D772D  |.  MOV     EAXDWORD PTR DS:[EAX]
004D772F  |.  CALL    discsyst.00468C14
004D7734  |.  MOV     EDX, discsyst.004D7878
004D7739  |.  MOV     EAXDWORD PTR DS:[EBX+308]
004D773F  |.  CALL    discsyst.004487B4
004D7744  |.  MOV     EAXDWORD PTR DS:[EBX+330]
004D774A  |.  MOV     EAXDWORD PTR DS:[EAX+178]
004D7750  |.  PUSH    EAX
004D7751  |.  MOV     EAXDWORD PTR DS:[EAX]
004D7753  |.  CALL    DWORD PTR DS:[EAX+98]
004D7759  |.  CALL    discsyst.00406920
004D775E  |.  LEA     EDX, [LOCAL.7]
004D7761  |.  MOV     EAXDWORD PTR DS:[EBX+31C]
004D7767  |.  CALL    discsyst.00448784
004D776C  |.  MOV     EAX, [LOCAL.7]
004D776F  |.  CALL    discsyst.00409474
004D7774  |.  MOV     EDXEAX
004D7776  |.  LEA     EAX, [LOCAL.6]
004D7779  |.  MOV     CL, 0FC
004D777B  |.  CALL    discsyst.004058BC
004D7780  |.  PUSH    [LOCAL.3]                       
004D7783  |.  PUSH    [LOCAL.4]
004D7786  |.  PUSH    [LOCAL.5]
004D7789  |.  PUSH    [LOCAL.6]
004D778C  |.  LEA     EAX, [LOCAL.11]
004D778F  |.  MOV     EDX, discsyst.004D78A4
004D7794  |.  CALL    discsyst.004058AC
004D7799  |.  PUSH    [LOCAL.8]

下面一些無關程式碼我省略了!
3、演算法簡析:
  設機器碼轉化為十六進值為A,註冊碼為SN,那麼:
  SN=(A+A+87568F+875A6B+4F5DA2)+(A+A+87568F+875A6B+4F5DA2)*4
把上述值轉化為十進位制值即為註冊碼!
4、演算法舉例:
 如我的機器碼為:1021131轉化為十六進位制值為:F94CB
 SN=(A+A+87568F+875A6B+4F5DA2)+(A+A+87568F+875A6B+4F5DA2)*4
    =(F94CB+F94CB+87568F+875A6B+4F5DA2)+(F94CB+F94CB+87568F+875A6B+4F5DA2)*4
    =17D3832+17D3832*4=77218FA(轉化為十進值為:124818010)
124818010就是我機器上的註冊碼。

相關文章