• 标 题:高手跳过:消除WinZip8.1版本过期提示框 (4千字)
  • 作 者:zmworm
  • 时 间:2002-5-25 13:29:11
  • 链 接:http://bbs.pediy.com

消除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永远不会过期了!!