Tutor 11  How to crack WebZIP V2.72.135

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

標 題:Tutor 11  How to crack WebZIP V2.72.135

發信人:dREAMtHEATER

時 間:20th, August 1999

詳細資訊:



作者:dREAMtHEATER
E-mail:dreamtheater@263.net
寫作日期: 20th, August 1999

軟體背景資料

執行平臺: Win9X/NT4
檔名稱: WEBZIP272.EXE
程式型別: InterNet工具
下載地點: http://www.spidersoft.com
檔案大小: 1,314KB

使用的工具

W32Dasm V8.93--Win9X Dissembler&Debugger
Hex WorkShop V2.54--Hex Editor
RegSnap V2.51--Registry Analyzing Tool
Registry Studio V1.01--Enhanced Registry Editor

難易程度

Easy( )  Medium(x)  Hard( )  Pro( )

                  ----------=======宣告========----------

      未經作者同意,不得修改、引用原文,一切權利保留。
      本教程只供教學用,其他一切用途皆被禁止。
             
                  ----------=======軟體介紹========----------
   
      WebZip是目前一個非常流行的網站下載軟體,它的很大的一個賣點就是可將下載的站點壓縮
為一個Zip檔案,方便傳輸及節省磁碟空間,另外它的介面相當的漂亮,並且可換Skins,同類軟體中
它應是你首選的。不過我認為它的不足是啟動時間過長,經我檢查,此軟體又是用Delphi編寫的,
而且用了很多第三方的控制元件,太多的功能必然導致佔據較多的系統資源,對於我來說,我不喜歡這
種過多佔用系統資源的軟體,你呢?

                ----------=======軟體的保護機制========-------
     
      又是Name/Code保護形式,試用期28天,試用期或過期後,如若往回撥整系統時間,程式均會
提醒你將系統時間調回,如果是在試用期間調整的,那麼將直接導致試用期結束,結束後程式每個
下載任務最多包括50個網頁。
      未註冊時,每次啟動均有nag,提醒你還剩多少天的試用期。
      用RegSnap拍照、分析登錄檔後,得知時間與註冊資訊儲存在:
HKEY_USERS\.DEFAULT\Software\Microsoft\IFind\
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Metrics\
兩處的鍵值是完全一模一樣的,這就相當於在其中的一處做了備份,試用期過後,只有將兩處的鍵
值同時刪去,才能重新獲得28天試用期。另外,鍵值的內容是加密的,包括註冊資訊,下面是程式
在我的登錄檔裡生成的時間記錄值(sample):
4u8hE=@I@DCDERJMVMQPQR、¥Y`Ж┆f]`f`dcde吹鬥nnpo哎究懶旅吶

                  ----------========正文========----------

      這個軟體如果你沒有足夠的crack經驗,我想幾天之內休想破解掉它。我曾經先後幾次破解
此軟體,但均以失敗告終,但昨天站長Cflanker讓我幫幫忙,把此軟體破掉,於是我抱著最後一線
希望又拿它開刀了!老天真給我面子,這會我終於找到了切入點,看來做什麼事情都需要講究點方
式方法(怎麼那麼多廢話!得!各位看官著急了,我這就話回正題)。
      還是老規矩,請出我們的老朋友--W32Dasm,反彙編、等待(夠你歇會兒的),OK!
      還是先去“String Data References”看看有沒有可值得參考的字串,在這裡,我想要的
資訊都找到了,我分別到程式碼視窗去尋找他們對應的程式碼,看看有沒有CALL/TEST/JNE這樣的經典結
構,或者reg flag這樣的全域性變數,很不幸,我迷失在“彙編”叢林中。我可以推測出這些相應的
程式碼是被暫存器間接定址方式呼叫的,因此只有在Debugger狀態下才能找到源頭!
      真的沒有辦法了嗎?我開始漫無邊際地尋找,也許幸運之神很青睞我,請看下面的程式碼:

:004E28A8 8B45FC                  mov eax, dword ptr [ebp-04]
:004E28AB E8241AF2FF              call 004042D4
:004E28B0 50                      push eax

* Reference To: SHRLK20.InputUnlockCode, Ord:0000h  《==呼叫動態鏈結庫SHRLK20.DLL的
InputUnlockCode函式
                                  |
:004E28B1 E872F9FFFF              Call 004E2228
:004E28B6 33C0                    xor eax, eax
:004E28B8 5A                      pop edx
:004E28B9 59                      pop ecx
       
      我終於大徹大悟,原來所有的秘密都在這個SHRLK20.DLL動態鏈結庫裡,怪不得找不到CALL的
源頭。
      接下來我到W32程式碼視窗開始部分的“IMPORTED FUNCTIONS”處看看程式呼叫了SHRLK20.DLL
的哪些函式(如下):

  Import Module 021: SHRLK20.DLL

Addr:0011BE5C hint(0000) Name: PassHandle
Addr:0011BE6A hint(0000) Name: InputUnlockCode
Addr:0011BE7C hint(0000) Name: GetUserName
Addr:0011BE8A hint(0000) Name: GetTryNumber
Addr:0011BE9A hint(0000) Name: GetTrialPeriodRemaining
Addr:0011BEB4 hint(0000) Name: CheckProtectionDLL

      各個函式的名稱非常直接了當,不用我再多說了吧!我非常關心“PassHandle”這個函式,
它極有可能是程式啟動時呼叫的函式。在W32Dasm的search視窗,輸入“PassHandle”,查詢的結果
有兩處,其中一處是由下面的程式碼呼叫出來的,可不予考慮:

* Referenced by a CALL at Address:
|:0050A8B4 
|
:004E2780 55                      push ebp
:004E2781 8BEC                    mov ebp, esp
:004E2783 6A00                    push 00000000
:004E2785 53                      push ebx
:004E2786 8BD8                    mov ebx, eax
:004E2788 33C0                    xor eax, eax
:004E278A 55                      push ebp
:004E278B 6824284E00              push 004E2824
:004E2790 64FF30                  push dword ptr fs:[eax]
:004E2793 648920                  mov dword ptr fs:[eax], esp
:004E2796 8B4324                  mov eax, dword ptr [ebx+24]
:004E2799 50                      push eax

* Reference To: SHRLK20.PassHandle, Ord:0000h
                                  |
:004E279A E891FAFFFF              Call 004E2230  〈==trace進去,還是呼叫“
SHRLK20.PassHandle”
:004E279F 33C0                    xor eax, eax
:004E27A1 8A4344                  mov al, byte ptr [ebx+44]
:004E27A4 50                      push eax
:004E27A5 33C0                    xor eax, eax
:004E27A7 8A4370                  mov al, byte ptr [ebx+70]
:004E27AA 50                      push eax
:004E27AB 8B4354                  mov eax, dword ptr [ebx+54]
:004E27AE 50                      push eax
:004E27AF 8B4350                  mov eax, dword ptr [ebx+50]
:004E27B2 50                      push eax
:004E27B3 8B434C                  mov eax, dword ptr [ebx+4C]
:004E27B6 50                      push eax
:004E27B7 8B4368                  mov eax, dword ptr [ebx+68]
:004E27BA E8151BF2FF              call 004042D4
:004E27BF 50                      push eax
:004E27C0 8B4360                  mov eax, dword ptr [ebx+60]
:004E27C3 E87C99F2FF              call 0040C144
:004E27C8 83C4F8                  add esp, FFFFFFF8
:004E27CB DD1C24                  fstp qword ptr [esp]
:004E27CE 9B                      wait
:004E27CF 8D55FC                  lea edx, dword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"ddddd"
                                  |
:004E27D2 B838284E00              mov eax, 004E2838
:004E27D7 E8A091F2FF              call 0040B97C
:004E27DC 8B45FC                  mov eax, dword ptr [ebp-04]
:004E27DF E8F01AF2FF              call 004042D4
:004E27E4 50                      push eax
:004E27E5 8B436C                  mov eax, dword ptr [ebx+6C]
:004E27E8 E8E71AF2FF              call 004042D4
:004E27ED 50                      push eax
:004E27EE 8B4364                  mov eax, dword ptr [ebx+64]
:004E27F1 E8DE1AF2FF              call 004042D4
:004E27F6 50                      push eax
:004E27F7 8B432C                  mov eax, dword ptr [ebx+2C]
:004E27FA E8D51AF2FF              call 004042D4
:004E27FF 50                      push eax
:004E2800 8B4328                  mov eax, dword ptr [ebx+28]
:004E2803 E8CC1AF2FF              call 004042D4
:004E2808 50                      push eax

* Reference To: SHRLK20.CheckProtectionDLL, Ord:0000h
                                  |
:004E2809 E8FAF9FFFF              Call 004E2208  <==此處出現nag
:004E280E 33C0                    xor eax, eax
:004E2810 5A                      pop edx
:004E2811 59                      pop ecx
:004E2812 59                      pop ecx
:004E2813 648910                  mov dword ptr fs:[eax], edx

* Possible StringData Ref from Code Obj ->"[Y]"
                                  |
:004E2816 682B284E00              push 004E282B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E2829(U)
|
:004E281B 8D45FC                  lea eax, dword ptr [ebp-04]
:004E281E E86116F2FF              call 00403E84
:004E2823 C3                      ret

      為了驗證以上結論,我是在W32Dasm的Debugger狀態下透過的,具體操作方式請看W32Dasm的
Help。
      再讓我們去呼叫此部分程式碼的上一個CALL去瞧瞧,即:0050A8B4處

:0050A891 E8BA85FCFF              call 004D2E50
:0050A896 B201                    mov dl, 01
:0050A898 A1B4674F00              mov eax, dword ptr [004F67B4]
:0050A89D E88EBFFEFF              call 004F6830
:0050A8A2 A32C815100              mov dword ptr [0051812C], eax
:0050A8A7 8BC3                    mov eax, ebx
:0050A8A9 E85AEBFFFF              call 00509408
:0050A8AE 8B8314030000            mov eax, dword ptr [ebx+00000314]
:0050A8B4 E8C77EFDFF              call 004E2780  〈==呼叫nag
:0050A8B9 A104695100              mov eax, dword ptr [00516904]
:0050A8BE 8B00                    mov eax, dword ptr [eax]
:0050A8C0 E84364F4FF              call 00450D08
:0050A8C5 A104695100              mov eax, dword ptr [00516904]
:0050A8CA 8B00                    mov eax, dword ptr [eax]
:0050A8CC 80B88400000000          cmp byte ptr [eax+00000084], 00
:0050A8D3 0F85BC010000            jne 0050AA95
:0050A8D9 C683D507000000          mov byte ptr [ebx+000007D5], 00
:0050A8E0 B201                    mov dl, 01

      為了進一步驗證,在W32Dasm的Debugger狀態下,在:0050A8B4處設斷點,又一次驗證了結論,
程式執行完此行後,出現nag;將你的系統時間往前調整,再次用此方法驗證,還是在這個CALL裡出
現提醒你將系統時間調回的messagebox。看來這個CALL是處理程式啟動時檢查註冊資訊、試用期是
否已過的部分!
      接下來,我試著把此CALL Nop掉,重新執行程式,Bingo!nag沒了,視窗的title處也不再有
還剩多少天的適用期的提示,Cool!為了進一步驗證,我將系統時間調前調後均沒有任何影響,看來
可以收兵了!

The Patch

      在檔案WebZIP.exe的offset:00109CB4h處,將E8C77EFDFF修改為9090909090,但這不是最好
的辦法,你應該知道機器碼E8xxxxxxxx代表CALL xxxxxxxx,而B8xxxxxxxx代表MOV eax, xxxxxxxx,
這樣只需將E8改為B8即可,是不是很cool,只改半個位元組就讓程式百分之百註冊!

                  ---------========The Final========----------
     
      這回你知道了,在W32Dasm中,除了“String Data References”以外,“IMPORTED
FUNCTIONS”也很重要哦!
      祝你好運!下節見。

 

相關文章