• 标 题:Tutor 10  How to crack AutoZip 98 v4.0
  • 作 者:dREAMtHEATER
  • 时 间:15/16th, August 1999
  • 链 接:http://bbs.pediy.com

作者:dREAMtHEATER
E-mail:dreamtheater@263.net
写作日期: 15/16th, August 1999

软件背景资料

运行平台: Win9X 
文件名称: azp32v41.exe(版本号可能有误)
程序类型: 解压缩类工具
下载地点: http://www.mfsoft.com
文件大小: 771KB

使用的工具

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

难易程度

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

                  ----------=======声明========----------

      未经作者同意,不得修改、引用原文,一切权利保留。
      本教程只供教学用,其他一切用途皆被禁止。
             
                  ----------=======软件介绍========----------
   
      软件的作者这样说:
      AutoZip is a tool that lets you extract zip files directly from Netscape and
Internet Explorer. If the zip file contains a setup program, AutoZip can extract the
archive temporarily and run the setup file.

                ----------=======软件的保护机制========-------

      这个shareware做的很体贴人,没有nag,程序中也没有任何地方可注册,应该是在线(
on-line)注册,只有你使用超过30天以后,才出现提示窗口告诉你必须注册,否则休想再继续使用
。没关系,你可以用RegSnap在软件安装前后分别给注册表做个快照,然后进行比较。比较后,凭直
觉我认为程序第一次运行时间保存在:HKEY_USERS\.DEFAULT\Software\MFSoft\AutoZip\Config40
,验证的方法直接从注册表删除这个键值,重新启动程序。congratulate!你又获得了三十天的试用
期。

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

Part1 如何用W32Dasm的Debugger功能快速破解本程序

线索
    首先将主运行程序在W32Dasm中反汇编,然后看看“String Data References”中有没有跟“
共享”、时间限制等相关的词汇,这可是你快速破解的最好方式!很可惜,没有找到任何有参考价
值的词汇,这会让你不知所措吗?想一想,还有什么蛛丝马迹可让你来跟踪的。请看下面:

"Color"
"Columns"
"comctl32.dll"
"commdlg_FindReplace"
"commdlg_help"
"Config40"      〈==看到了吗?
"CONGRATULATIONS! "
"Content Type"
"ControlOfs%.8X%.8X"
"Convert EXE to ZIP"
"Convert ZIP to EXE"
"Copy"
"CoReleaseServerProcess"
"CoResumeClassObjects"
"CoSuspendClassObjects"
"Couldn"
"Create directory"

      "Config40"是从注册表中读写记录时间的键值!在"W32Dasm List of String Data Items"窗
口中高亮显示这一行,并用鼠标双击这一行,你会发现代码窗口中有两处与此相关的部分。

1)
* Possible StringData Ref from Code Obj ->"Software\MFSoft\AutoZip"
                                  |
:00492364 BA98234900              mov edx, 00492398
:00492369 8BC3                    mov eax, ebx
:0049236B E8344DFCFF              call 004570A4
:00492370 8BCE                    mov ecx, esi

* Possible StringData Ref from Code Obj ->"Config40"
                                  |
:00492372 BAB8234900              mov edx, 004923B8
:00492377 8BC3                    mov eax, ebx
:00492379 E8864FFCFF              call 00457304

2)
* Possible StringData Ref from Code Obj ->"Software\MFSoft\AutoZip"
                                  |
:004923F9 BA5C244900              mov edx, 0049245C
:004923FE 8B45FC                  mov eax, dword ptr [ebp-04]
:00492401 E89E4CFCFF              call 004570A4
:00492406 33C0                    xor eax, eax
:00492408 55                      push ebp
:00492409 682D244900              push 0049242D
:0049240E 64FF30                  push dword ptr fs:[eax]
:00492411 648920                  mov dword ptr fs:[eax], esp

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0049239B(C)
|

* Possible StringData Ref from Code Obj ->"Config40"
                                  |
:00492414 BA7C244900              mov edx, 0049247C
:00492419 8B45FC                  mov eax, dword ptr [ebp-04]
:0049241C E8F74EFCFF              call 00457318

    这两部分代码验证了我前面说的,你可以看到在每个"Config40"前面数行都有
"Software\MFSoft\AutoZip",这分明在读取注册表的"Config40"的键值。
    那么,到底哪部分是我们所需要的呢?请在W32dasm的Debugger状态下,分别在出现"Config40"
字符串的下面一行的偏移地址设断点,即:00492372、:00492414两处,然后press F9,程序停在
:00492414y一行。
    上面过程说明程序是在我上面列出的第二部分的代码处读取安装时间的(请保证你不是第一次
运行该程序)。如果这时你的此程序还没有过期,请退出W32Dasm的Debugger状态,往后调整系统时
间,迫使程序过期,再重新进入W32Dasm的Debugger状态,设断点在:00492414;否则,你只须取消所
有的断点,press F6,继续跟踪,你会发现程序很快呼叫出过期的提示窗口:
   
:00492591 83F81E                  cmp eax, 0000001E  <==与30天比较
:00492594 7E25                    jle 004925BB  <==小于30天跳转
:00492596 B9085A4900              mov ecx, 00495A08
:0049259B A1304B4900              mov eax, dword ptr [00494B30]
:004925A0 8B00                    mov eax, dword ptr [eax]
:004925A2 8B15F4204900            mov edx, dword ptr [004920F4]
:004925A8 E8F7AAFBFF              call 0044D0A4
:004925AD A1304B4900              mov eax, dword ptr [00494B30]
:004925B2 8B00                    mov eax, dword ptr [eax]
:004925B4 E86BABFBFF              call 0044D124  <==呼叫过期的提示窗口
:004925B9 B301                    mov bl, 01

      多么直接了当的一段代码,不用我说了,应该知道怎么改吧!

                  ----------=======The Patch========----------

      在文件AutoZip.exe的offset:00091994处,修改7E25为EB25

                  ---------========The Final========----------
     
      W32Dasm的一些具体操作我没有很仔细地讲,如若有不清楚的地方,请看它的Help文件。
      Debugger状态下,如想能在很短的时间内找出呼叫象Nag Screen这样的窗口的CALL,如果你
没有其他好的方法可以使用(比如下合适的API函数断点),那就必须找到与此有关联的部分,例如
从注册表读取安装时间、注册信息的代码部分,这些都是很好的线索,呼叫nag的CALL与这些代码应
该离得很近,此种方法在大多数情况下都很有效,再不济的,如果你实在找不到任何信息,那你就
从程序的入口点(Entry Point)一行一行地执行代码,直到执行到呼叫出nag的那个CALL,到这还没
完,如果你在这里修改程序,往往会使程序@#^&*!,这是因为这个CAll里面还包含着很多的CAll,你
还须trace into 这个CALL,然后有可能且极有可能再trace into.....天啊!是不是把你已经累死了
!不要认为这种方法不可行,我曾经不止一次这样trace过,而且成功地破解过数个shareware,不过
,还好,没有把我完全累死,只是咳咳.... :-)
      从本章内容,你会了解到W32Dasm的Debug功能也蛮强的,不过他远不如SoftIce的断点设置
能力强,尤其在windows API函数断点设置方面简直就是白痴!其Debugger状态下,最大的优点就是
非常容易观察程序的变化。不要再迷信SoftIce了,他绝对不是你唯一的选择!
      W32Dasm,kool!