消除WinZip8.1版本過期提示框
到看雪論壇,幾個月了,沒有發過一篇有關除錯軟體的帖子,畢竟本人太懶了,跟完程式,從不做筆記.
今天跟了一個這個程式,發現非常非常簡單,幾分鐘就搞定了,時間充裕,灌灌水吧.
除錯人 :zmworm
除錯物件:WinZip
8.1 BETA(4286)
軟體來源:電腦報配套光碟2001
除錯工具:SoftICE 4.25(NuMega DriverStudio
2.5 整合)
修改工具:U-Edit
除錯難度:極易
適應讀者:初學者
關於WinZip的序號產生器的介紹已經很多了,我的WinZip也已經是註冊版本了.可是自打今年某月,
每次開啟winzip 就告訴我版本太舊了,要到網站更新.我懶的上網更新,畢竟WinZip的個頭不小,
而我的貓還在56Kbps上奔跑.
我已厭倦了點那個確定鍵.於是對WinZip動手術了:
1. 用SoftICE載入Win98.
2. Ctrl-D 開啟SoftICE視窗
3. 設斷點bpx GetLocalTime.因為對話方塊與時間有關,所以攔這個API.
與時間有關的API: GetSystemTime GetLocalTime GetFileTime 等等.
4.執行WinZip,SoftICE攔到斷點,按F5,又被SoftICE攔到
5.按兩下F12,到00403F1E處,GetLocalTime就在這個CALL裡
下面是我對這段程式碼的註釋:
* Referenced by a CALL at Address:
|:0043D17B
|
:00403F09
56
push esi
:00403F0A 6A1E
push 0000001E
;d=30日
:00403F0C 6A01
push 00000001
;m=1月
:00403F0E 68D2070000
push 0000007D2
;y=2002年
:00403F13 E859960400
call 0044D571
;ax=[(y-1980)*16+m]*32+d
:00403F18 83C40C
add esp, 0000000C
:00403F1B 668BF0
mov si, ax
;si為規定日期
* bpx local 第二次攔到,再F12
兩次後 到這裡;
|
:00403F1E E8BDFFFFFF
call 00403EE0
* 比較ax與si,就是比較當前日期是否到了規定日期2002.1.30日
|
:00403F23 663BC6
cmp ax, si
;ax為當前日期
:00403F26 7653
jbe 00403F7B
;-)一定要跳走呀,否則你看看下面00403F5B處的幾行字
;--------------不要到這裡來-------------
:00403F28 FF35ACC64A00 push dword
ptr [004AC6AC]
* Possible StringData Ref from Data Obj ->"70X_BETA1"
|
:00403F2E BE10E34B00
mov esi, 004BE310
:00403F33 C60589BF4C0001
mov byte ptr [004CBF89], 01
:00403F3A 6A01
push 00000001
:00403F3C 56
push esi
:00403F3D FF35B0C64A00
push dword ptr [004AC6B0]
:00403F43 E8D16C0500
call 0045AC19
:00403F48 83C410
add esp, 00000010
:00403F4B 85C0
test eax, eax
:00403F4D 742C
je 00403F7B
:00403F4F FF35ACC64A00
push dword ptr [004AC6AC]
:00403F55 56
push esi
:00403F56 BE44C54C00
mov esi, 004CC544
* Possible
StringData Ref from Data Obj ->"This PRE-RELEASE BETA version "
->"of WinZip is quite old.
This "
->"version
will continue to run, "
->"but will display this message "
->"when you start it. You are strongly "
->"encouraged to download the
current "
->"version
from the WinZip home page "
->"at http://www.winzip.com."
|
:00403F5B 68E8DC4B00 push
004BDCE8
:00403F60 56
push esi
* Reference To: USER32.wsprintfA, Ord:02B3h
|
:00403F61 FF158CC44A00
Call dword ptr [004AC48C]
;-(彈出對話方塊
:00403F67 56
push esi
:00403F68 FF3538C14C00
push dword ptr [004CC138]
:00403F6E 68DD000000
push 000000DD
:00403F73 E85F840400
call 0044C3D7
:00403F78 83C41C
add esp, 0000001C
*------------------到這裡就不顯對話方塊了----------------------
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403F26(C), :00403F4D(C)
|
:00403F7B 5E
pop esi
:00403F7C C3
ret
瞭解了這段程式碼的含義,我們就可以做手術了.
手術方案1:永遠跳
將
:00403F26 7653
jbe 00403F7B
改為
:00403F26 EB53
jmp 00403F7B
用U-Edit 開啟WinZip32.exe.在3F26處
將 76
改為 EB
手術方案2:改變規定日期
將
:00403F0E 68D2070000
push 0000007D2
;y=2002年
改為
:00403F0E 6834080000
push 000000834
;y=2100年
用U-Edit 開啟WinZip32.exe.在3F0E處
將 D2 07
改為 34 08
我的WinZip永遠不會過期了!!