使用Dede破解Delphi軟件實戰


昨日練習了一把如何破解Delphi軟件。下面和大家分享一下破解的過程,對初學者,希望有授之以漁的作用。

首先分析我們的目標軟件,不要問我破解的是什么軟件。保護知識產權,要從娃娃抓取。

目標軟件是一個銷售系統,它有時間限制,安裝完成后可以正常運行,把系統時間調后一年,軟件不能正常執行,再把系統時間調回,效果依然一樣。

在使用過期軟件時,系統依然能夠登陸,但是在點擊菜單的時候,彈出您使用的軟件已經過期的字樣。

下手:

1.觀察程序的目錄結構,程序主要就是一個exe文件,其余有兩個ddl,察看屬性,是borland公司的。

2.使用UltraEdit打開這個軟件的主執行文件,看看頭部,沒有加殼。看看中間的資源代碼,出現TLabel等開頭的字符,顯然該軟件是Delphi開發的

3.使用Dede打開這個軟件的exe文件,進行分析和二次詳細分析。

4我們知道,在登陸過程中顯然沒有進行過期驗證,而是在菜單的表單彈出來之前驗證的,目標明確,我們直奔主Form文件。打開窗體標簽,從中發現了TMainForm,在右邊的代碼中我們看到了工具欄常見的代碼

object ToolButton4: TToolButton
        Left = 124
        Top = 0
        Cursor = crHandPoint
        Hint = '客戶資料管理'
        Caption = 'ToolButton4'
        ImageIndex = 4
        OnClick = ToolButton4Click
      end

我們從中選取幾個按鈕的事件。例如 OnClick = ToolButton4Click 和OnClick = ToolButton5Click

5。進入過程標簽,從里面選取MainFormUnit,在右邊的事件地址列表中找到我們剛才選取的ToolButton4Click,ToolButton5Click,點擊右鍵,反匯編。生成的代碼均包含這樣一段

* Reference to : TMainForm.Proc_005FA21C()
|
005FABB4   E863F6FFFF             call    005FA21C
005FABB9   84C0                   test    al, al
005FABBB   0F85B3000000           jnz     005FAC74

在這里,如果jnz跳轉了,那么整個過程就結束了,毫無疑問,jnz上面的call就是進行驗證的地方。

雙擊這個call,我們跟蹤進去。沒有什么特別的地方,但是發現這樣的代碼

* Possible String Reference to: '當數據備份與恢復窗口打開時,不能打開
|                                其它的窗口'
|
005FA24B   BA64A25F00             mov     edx, $005FA264


也就是說這個全局函數在檢驗是否過期之后,還進行其他的合法性檢查,如果察看其他的click事件,會發現還有一些用戶權限的檢查。那么我們往上找

* Reference to : THYMain._PROC_00547434()
|
005FA228   E807D2F4FF             call    00547434
005FA22D   84C0                   test    al, al
005FA22F   7404                   jz      005FA235
005FA231   B301                   mov     bl, $01
005FA233   EB22                   jmp     005FA257
 

這個00547434,如果執行后沒問題,jz才可以繼續執行。可疑,我們繼續跟蹤進去,雙擊該函數

奇跡發生了,我們看到了什么?

* Possible String Reference to: '您使用的軟件是試用版,試用期限將到?
|                                綣絛褂茫肽胛頤橇擔?
|                                購買軟件的使用權限。不然將影響您的?
|                                ぷ?您已輸入的數據不會丟失,注冊后?
|                                杉絛褂?'
|
00547457   BAA8745400             mov     edx, $005474A8


顯然,這個函數就是判斷過期的地方,一旦過期就會發出警告窗口。

地方找到了,我們仔細分析一下他的結構,有兩個地方可以發生檢查

00547434   53                     push    ebx
00547435   56                     push    esi
00547436   8BF0                   mov     esi, eax
00547438   33DB                   xor     ebx, ebx

* Reference to field THYMain.OFFS_003C
|
0054743A   837E3C02               cmp     dword ptr [esi+$3C], +$02
0054743E   7407                   jz      00547447
00547440   8BC6                   mov     eax, esi

* Reference to: HYMainUnit.Proc_00545E00
|
00547442   E8B9E9FFFF             call    00545E00

* Reference to field THYMain.OFFS_003C
|
00547447   837E3C01               cmp     dword ptr [esi+$3C], +$01
0054744B   7522                   jnz     0054746F

* Reference to TApplication instance
|
0054744D   A138316000             mov     eax, dword ptr [$00603138]
00547452   8B00                   mov     eax, [eax]

* Reference to field TApplication.Handle : HWnd
|
00547454   8B4024                 mov     eax, [eax+$24]

* Possible String Reference to: '您使用的軟件是試用版,試用期限將到?
|                                綣絛褂茫肽胛頤橇擔?
|                                購買軟件的使用權限。不然將影響您的?
|                                ぷ?您已輸入的數據不會丟失,注冊后?
|                                杉絛褂?'
|
00547457   BAA8745400             mov     edx, $005474A8

* Reference to: Unit_00500794.Proc_00500ED4
|
0054745C   E8739AFBFF             call    00500ED4
00547461   33D2                   xor     edx, edx

* Reference to field THYMain.OFFS_00C4
|
00547463   8B86C4000000           mov     eax, [esi+$00C4]

* Possible reference to virtual method THYMain.OFFS_00C0
|
00547469   FF96C0000000           call    dword ptr [esi+$00C0]

* Reference to field THYMain.OFFS_003C
|
0054746F   837E3C02               cmp     dword ptr [esi+$3C], +$02
00547473   7524                   jnz     00547499

* Reference to TApplication instance
|
00547475   A138316000             mov     eax, dword ptr [$00603138]
0054747A   8B00                   mov     eax, [eax]

* Reference to field TApplication.Handle : HWnd
|
0054747C   8B4024                 mov     eax, [eax+$24]

* Possible String Reference to: '您使用的軟件是試用版,如果您要繼續?
|                                褂茫肽胛頤橇擔郝蛉砑氖褂?
|                                權限(您已輸入的數據不會丟失,注冊后
|                                可繼續使用)'
|
0054747F   BA48755400             mov     edx, $00547548

* Reference to: Unit_00500794.Proc_00500ED4
|
00547484   E84B9AFBFF             call    00500ED4
00547489   33D2                   xor     edx, edx

* Reference to field THYMain.OFFS_00C4
|
0054748B   8B86C4000000           mov     eax, [esi+$00C4]

* Possible reference to virtual method THYMain.OFFS_00C0
|
00547491   FF96C0000000           call    dword ptr [esi+$00C0]
00547497   B301                   mov     bl, $01
00547499   8BC3                   mov     eax, ebx
0054749B   5E                     pop     esi
0054749C   5B                     pop     ebx
0054749D   C3                     ret

一個是0054744B jnz 0054746F

另一個是00547473 jnz 00547499

顯然,下面要做的不用說了吧,就是75->EB的工作了,呵呵。總算舒了一口氣,

6.注意哦,這里的地址都是相對地址,Dede提供了一個轉到物理地址的工具,在工具菜單里面。我們使用它得到這兩句的物理地址是0014684B,00146873

7不用多了,打開UltraEdit,找到這兩個地址。做你該做的事!

后記:本科苦學匯編語言,今天總算發揮了點作用,不知道是欣慰呢,還是無奈!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM