消除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永远不会过期了!!
- 标 题:高手跳过:消除WinZip8.1版本过期提示框 (4千字)
- 作 者:zmworm
- 时 间:2002-5-25 13:29:11
- 链 接:http://bbs.pediy.com