用DeDe破解 e族百變桌面 V5.1+用DEIPHI5寫序號產生器 (13千字)

看雪資料發表於2002-04-18

用DeDe破解 e族百變桌面 V5.1+用DEIPHI5寫序號產生器

軟體名稱:e族百變桌面 V5.1
軟體簡介:歡迎使用e族百變桌面軟體。提供25種變換桌面的方式,讓您的桌面煥然一新。操作簡單,無需費力學習。支援多種Internet流行圖片格式。靈活設定變換背景及區域。將桌布檔案打包,方便儲存、轉發。將桌布包展開,還原圖片檔案……
未註冊版限制:1、不限加入桌布檔案列表中的圖片數量。
            2、可以選擇是否在桌面顯示軟體標緻。
下載地址:http://ln.skycn.net/down/ePaper51.exe
破解工具:TRW2000 1.22漢化版、DeDe2.50、WinHex 10.44 SR-3漢化版。
破解人:飛鷹[BCG]
E-mail:flithawk@163.com
網址:http://flithawk.longcity.net
破解步驟:

一、用DeDe破解 e族百變桌面 V5.1:

首先,用 DeDe 反編譯該軟體後,選擇進入“Procedures”選項,經過研究發現“frmBuy”窗體為註冊時呼叫的窗體,其中的“bnNextClick”事件為註冊碼檢驗過程。所以,在 DeDe 中選擇“Procedures”選項-->單擊“frmBuy”窗體-->雙擊“bnNextClick”事件-->我們就可以來到下面這裡:

004BA694  55                    push    ebp
==>進入後,我們首先來到上面這裡
004BA695  8BEC                  mov    ebp, esp
004BA697  B90C000000            mov    ecx, $0000000C
004BA69C  6A00                  push    $00
004BA69E  6A00                  push    $00
004BA6A0  49                    dec    ecx
004BA6A1  75F9                  jnz    004BA69C
004BA6A3  53                    push    ebx
004BA6A4  56                    push    esi
004BA6A5  57                    push    edi
004BA6A6  8945FC                mov    [ebp-$04], eax
004BA6A9  33C0                  xor    eax, eax
004BA6AB  55                    push    ebp
004BA6AC  68B7AA4B00            push    $004BAAB7

***** TRY
|
004BA6B1  64FF30                push    dword ptr fs:[eax]
004BA6B4  648920                mov    fs:[eax], esp
004BA6B7  8B45FC                mov    eax, [ebp-$04]

......(省略中間的一些彙編程式碼)

* Reference to: controls.TControl.GetText(TControl):System.String;
|          or: controls.TControl.GetText(TControl):System.String;
|
004BA79B  E88094F8FF            call    00443C20
004BA7A0  8B45CC                mov    eax, [ebp-$34]

* Reference to: sysutils.StrToInt64(System.AnsiString):System.Int64;
|
004BA7A3  E860E7F4FF            call    00408F08
004BA7A8  8BD8                  mov    ebx, eax
==>上面的 ebx 中存放著你輸入的註冊碼
004BA7AA  8B45FC                mov    eax, [ebp-$04]

* Reference to field TBuyForm.OFFS_0380
|
004BA7AD  8B8080030000          mov    eax, [eax+$0380]
==>上面的 eax 中存放著機器碼
004BA7B3  B101                  mov    cl, $01
004BA7B5  8BD3                  mov    edx, ebx
==>上面的 edx 中存放著你輸入的註冊碼

|
004BA7B7  E890F5FFFF            call    004B9D4C
==>上面的此Call為註冊碼演算法過程,應該追入

* Reference to pointer to GlobalVar_004CDDE8
|
004BA7BC  8B159CBD4C00          mov    edx, [$4CBD9C]
004BA7C2  8802                  mov    [edx], al

* Reference to pointer to GlobalVar_004CDDE8
|
004BA7C4  A19CBD4C00            mov    eax, dword ptr [$4CBD9C]
004BA7C9  803800                cmp    byte ptr [eax], $00
004BA7CC  7441                  jz      004BA80F
==>判斷你輸入的註冊碼是否正確;不正確則跳轉,正確則不跳轉
004BA7CE  8B45FC                mov    eax, [ebp-$04]

* Reference to field TBuyForm.OFFS_0388
|
004BA7D1  C7808803000004000000  mov    dword ptr [eax+$0388], $00000004
004BA7DB  8BC3                  mov    eax, ebx
004BA7DD  33D2                  xor    edx, edx
004BA7DF  52                    push    edx
004BA7E0  50                    push    eax
004BA7E1  8D45C8                lea    eax, [ebp-$38]

* Reference to: sysutils.IntToStr(System.Int64):System.AnsiString;overload;
|          or: sysutils.IntToStr(System.Int64):System.AnsiString;overload;
|
004BA7E4  E897E6F4FF            call    00408E80
004BA7E9  8B55C8                mov    edx, [ebp-$38]
004BA7EC  8B45FC                mov    eax, [ebp-$04]

* Reference to control TBuyForm.lbnRnCode : N.A.
|
004BA7EF  8B8040030000          mov    eax, [eax+$0340]

* Reference to: controls.TControl.SetText(TControl;System.String);
|          or: controls.TControl.SetText(TControl;System.String);
|
004BA7F5  E85694F8FF            call    00443C50
004BA7FA  8B45FC                mov    eax, [ebp-$04]

* Reference to control TBuyForm.bnClose : N.A.
|
004BA7FD  8B8000030000          mov    eax, [eax+$0300]

* Possible String Reference to: '完成'
|
==>上面是註冊成功後,出現的正確提示資訊
004BA803  BAD0AA4B00            mov    edx, $004BAAD0

* Reference to: controls.TControl.SetText(TControl;System.String);
|          or: controls.TControl.SetText(TControl;System.String);
|
004BA808  E84394F8FF            call    00443C50
004BA80D  EB0D                  jmp    004BA81C
004BA80F  8B45FC                mov    eax, [ebp-$04]

* Reference to field TBuyForm.OFFS_0388
|
004BA812  C7808803000005000000  mov    dword ptr [eax+$0388], $00000005
004BA81C  33C0                  xor    eax, eax
004BA81E  5A                    pop    edx
004BA81F  59                    pop    ecx
004BA820  59                    pop    ecx
004BA821  648910                mov    fs:[eax], edx
004BA824  EB17                  jmp    004BA83D

****** EXCEPT
|
004BA826  E9DD95F4FF            jmp    00403E08
004BA82B  8B45FC                mov    eax, [ebp-$04]

* Reference to field TBuyForm.OFFS_0388
|
004BA82E  C7808803000005000000  mov    dword ptr [eax+$0388], $00000005

* Reference to: system.@DoneExcept;
|          or: system.@DoneExcept;
|
004BA838  E83399F4FF            call    00404170

****** END
|
004BA83D  8B45FC                mov    eax, [ebp-$04]

* Reference to field TBuyForm.OFFS_0388
|
004BA840  83B88803000005        cmp    dword ptr [eax+$0388], +$05
004BA847  7513                  jnz    004BA85C
004BA849  8B45FC                mov    eax, [ebp-$04]

* Reference to control TBuyForm.lblReason : N.A.
|
004BA84C  8B8070030000          mov    eax, [eax+$0370]

* Possible String Reference to: '原因:輸入的註冊碼不正確。'
|
==>上面是註冊失敗後,出現的錯誤提示資訊
004BA852  BAE0AA4B00            mov    edx, $004BAAE0

* Reference to: controls.TControl.SetText(TControl;System.String);
|          or: controls.TControl.SetText(TControl;System.String);
|
004BA857  E8F493F8FF            call    00443C50
004BA85C  8B45FC                mov    eax, [ebp-$04]

* Reference to control TBuyForm.bnPrev : N.A.
|
004BA85F  8B80FC020000          mov    eax, [eax+$02FC]
004BA865  33D2                  xor    edx, edx
004BA867  8B08                  mov    ecx, [eax]

* Possible reference to virtual method TN.A..OFFS_64
|
004BA869  FF5164                call    dword ptr [ecx+$64]
004BA86C  8B45FC                mov    eax, [ebp-$04]


跟蹤進入 004B9D4C 後,我們來到這裡:

004B9D4C  55                    push    ebp
004B9D4D  8BEC                  mov    ebp, esp
004B9D4F  81C4F4FEFFFF          add    esp, $FFFFFEF4
004B9D55  53                    push    ebx
004B9D56  56                    push    esi
004B9D57  33DB                  xor    ebx, ebx
004B9D59  899DF4FEFFFF          mov    [ebp+$FFFFFEF4], ebx
004B9D5F  895DF8                mov    [ebp-$08], ebx

004B9D62  8955FC                mov    [ebp-$04], edx
==>上面是把你輸入的註冊碼(edx)存入 [ebp-$04] 中
004B9D65  33D2                  xor    edx, edx
004B9D67  55                    push    ebp
004B9D68  68119E4B00            push    $004B9E11

***** TRY
|
004B9D6D  64FF32                push    dword ptr fs:[edx]
004B9D70  648922                mov    fs:[edx], esp
004B9D73  33DB                  xor    ebx, ebx
004B9D75  35A09EF21B            xor    eax, $1BF29EA0
==>上面是把你輸入的機器碼(eax) 異或 0x1BF29EA0 後得到正確的註冊碼
004B9D7A  3B45FC                cmp    eax, [ebp-$04]
==>把計算出來的正確註冊碼(eax)與你輸入的註冊碼([ebp-$04])進行比較
004B9D7D  7502                  jnz    004B9D81
==>如果相等,則不跳轉;不相等,則跳轉
004B9D7F  B301                  mov    bl, $01
004B9D81  84C9                  test    cl, cl
004B9D83  746B                  jz      004B9DF0
004B9D85  68FF000000            push    $000000FF
004B9D8A  8D85F8FEFFFF          lea    eax, [ebp+$FFFFFEF8]
004B9D90  50                    push    eax

* Reference to: kernel32.GetWindowsDirectoryA()
|
==>從這裡往下應該是檢測你計算機上 Windows 的安裝目錄
004B9D91  E896D0F4FF            call    00406E2C
004B9D96  8D95F4FEFFFF          lea    edx, [ebp+$FFFFFEF4]
004B9D9C  8D85F8FEFFFF          lea    eax, [ebp+$FFFFFEF8]

* Reference to: sysutils.StrPas(System.PChar):System.AnsiString;
|          or: sysutils.StrPas(System.PChar):System.AnsiString;
|
004B9DA2  E8C5F9F4FF            call    0040976C
004B9DA7  FFB5F4FEFFFF          push    dword ptr [ebp+$FFFFFEF4]
004B9DAD  68289E4B00            push    $004B9E28

* Possible String Reference to: 'nwinfo.dat'
|
==>從這裡往下應該是在 Windows 的安裝目錄下建立一個名為nwinfo.dat的檔案,用於存放你輸入的註冊碼
004B9DB2  68349E4B00            push    $004B9E34
004B9DB7  8D45F8                lea    eax, [ebp-$08]
004B9DBA  BA03000000            mov    edx, $00000003

|
004B9DBF  E848ACF4FF            call    00404A0C
004B9DC4  68FFFF0000            push    $0000FFFF
004B9DC9  8B4DF8                mov    ecx, [ebp-$08]
004B9DCC  B201                  mov    dl, $01

* Reference to class TFileStream
|
004B9DCE  A1D04B4100            mov    eax, dword ptr [$414BD0]

|
004B9DD3  E820FBF5FF            call    004198F8
004B9DD8  8BF0                  mov    esi, eax
004B9DDA  8D55FC                lea    edx, [ebp-$04]
004B9DDD  B904000000            mov    ecx, $00000004
004B9DE2  8BC6                  mov    eax, esi

|
004B9DE4  E857F8F5FF            call    00419640
004B9DE9  8BC6                  mov    eax, esi

|
004B9DEB  E8389BF4FF            call    00403928
004B9DF0  33C0                  xor    eax, eax
004B9DF2  5A                    pop    edx
004B9DF3  59                    pop    ecx
004B9DF4  59                    pop    ecx
004B9DF5  648910                mov    fs:[eax], edx

****** FINALLY
|
004B9DF8  68189E4B00            push    $004B9E18
004B9DFD  8D85F4FEFFFF          lea    eax, [ebp+$FFFFFEF4]

* Reference to: system.@LStrClr(String);
|
004B9E03  E88CA8F4FF            call    00404694
004B9E08  8D45F8                lea    eax, [ebp-$08]

* Reference to: system.@LStrClr(String);
|
004B9E0B  E884A8F4FF            call    00404694
004B9E10  C3                    ret

004B9E11  E9A6A2F4FF            jmp    004040BC
004B9E16  EBE5                  jmp    004B9DFD

****** END
|
004B9E18  8BC3                  mov    eax, ebx
004B9E1A  5E                    pop    esi
004B9E1B  5B                    pop    ebx
004B9E1C  8BE5                  mov    esp, ebp
004B9E1E  5D                    pop    ebp
004B9E1F  C3                    ret

根據上面的分析,我們就已經知道了軟體註冊的全過程。所以,下面我們再次執行該軟體,選擇授權方式為“註冊碼方式”,輸入假的註冊碼;啟動 Trw 2000 並下斷點 bpx 004B9D7A,回到軟體的註冊介面後單擊“下一步”按鈕,就會被 Trw 2000 斷下進入除錯介面,下命令 ? eax 就可以知道你正確的註冊碼了。但無論註冊成功與否,軟體都會在你的 Windows 安裝目錄下生成一個名為 nwinfo.dat 檔案,該檔案大小為4個位元組,該檔案中存放著你輸入的註冊碼(不論是真碼還是假碼)。

二、用DEIPHI5寫序號產生器:

該軟體的註冊演算法很簡單:就是用它給你的機器號來與值0x1BF29EA0進行異或後就得到了真的註冊碼。

例如:我的機器號是37851211,則真的註冊碼就是:37851211 Xor 468885152=431165163(因為 0x1BF29EA0 的10進位制數為 468885152)。

上面我說過,無論該軟體是否成功註冊,它都會建立一個名為 nwinfo.dat 的檔案,那麼這個檔案中的內容是什麼呢?用16進位制編輯器(WinHex)開啟後你會發現這樣的數字 EB0EB319,把這串數字反過來後得到:19B30EEB,它的10進位制數正好是 431165163,這不就是對應我機器的該軟體的正確註冊碼,這下大家應該知道該檔案的大小為什麼是4個位元組了吧!如果我輸入假註冊碼:5656,則該檔案中的數字是 18160000,反過來後得到:1618,它的10進位制數正好是 5656,也就是我輸入的假註冊碼。經過我的測試後,發現無論你輸入的註冊碼是多少位,該檔案的大小都是4個位元組,也就是 8 位16進位制數字。所以,該軟體真的註冊碼只可能是8位十六進位制數字,也就是9位十進位制數字。

瞭解完該軟體的註冊及生成註冊檔案的全部過程後,我就開始用 DEIPHI5 編寫了該軟體的序號產生器,原始碼如下:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Memo1: TMemo;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  result:integer;
implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  If (Key<>chr(16)) and (Edit1.Text<>'') then
  Begin
    result:=StrToInt(Edit1.Text) Xor 468885152;
    Edit2.Text:=IntToStr(result);
  End; 
end;

end.

該序號產生器在 Win9X/2K/XP 下測試透過。
序號產生器下載地址:http://down.9down.com/crack/成員目錄/flithawk/e族百變桌面%20V5.1%20序號產生器.zip

                                          Crack by 飛鷹[BCG]  flithawk@163.com  2002.4.18
                                          歡迎光臨漢化新世紀: http://www.hanzify.org

相關文章