標 題: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”也很重要哦!
祝你好運!下節見。