`
shangjava
  • 浏览: 1229173 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用SoftICE破解Winzip8.0全攻略

阅读更多

使用SoftICE破解Winzip8.0全攻略

摘要<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Winzip是大家都很熟悉的压缩解压工具,装机必备工具。Winzip是个免费的共享软件,不注册也一样使用,只是会出现一个未注册的画面而已。它对注册码的保护并不复杂,破解这个软件也是相对简单的。

程序名 :Winzip

版本   V8.03105

大小   1,230KB

运行平台:Windows 95/98/NT/2000

保护方式:注册码

破解方式:制作注册补丁?

1??????? 破解的准备工作

(1)??? 安装好SoftICE,并进入Windows。通过CTRL+D来检查SoftICE是否可用。

(2)??? 加载符号表,可以采用两种方式:一是在当前情况下,使用Symbol Loader动态加载,另一种是修改Windows目录下的Winice.dat文件,删除usr32.dll前面的“exp=”。

2??????? 监测软件的代码

2.1????? 设置断点

(1)?? Windows通过user32.dll库的四个API函数来获取用户输入文本,它们是GetWindowTextGetWindowTextAGetDlgItemTextGetDlgItemTextA

(2)?? 前面已经加载了user32.dll,可以使用exp getwindowtext来查看GetWindowText这个符号是否已经加载,其余仿此。如果没有加载,请参考1.(2)加载。

(3)?? (1)所列的四个函数设置断点,方法是bpx GetWindowText……

(4)?? 设置完四个断点以后用bl命令确认一下。

(5)?? 使用bd *命令暂时禁用所有的断点

2.2????? 中断注册过程

(1)??? 安装运行Winzip,在主接口中选择”Help”下面的” Enter Registration Code...”,输入用户名”FeiZhaoDong”,注册码”Bingo”

(2)??? CTRL+D呼出SoftICE,使用be *命令启用所有的断点。

(3)??? F5回到WinZip注册接口,按下”OK”按钮,程序很快被中断在”GetDlgItemTextA”的位置。按F11继续,可以看到又中断在”GetDlgItemTextA”一次。这样我们可以猜测,Winzip是使用了GetDlgItemTextA这个函数来获取用户名和注册码。

(4)??? 使用bc命令清除掉GetDlgItemTextA以外的三个断点。

(5)??? 重新输入用户名和注册码(同上),准备进行正式的拆解过程。

2.3????? 分析注册码的验证过程

(1)??? 按下”OK”按钮,程序停留在GetDlgItemTextA的入口,按F11跳出这个函数,这样可以看到以下的汇编代码:

?

0167:00407F6D CALL [USER32!GetDlgItemTextA]
0167:00407F73 PUSH EDI       ;程序停留在这里,EDI指向”FeiZhaoDoing”

0167:00407F74 CALL 0043F89A

0167:00407F79 PUSH EDI

0167:00407F7A CALL 0043F8C3

0167:00407F7F POP ECX

0167:00407F80 MOV ESI, 0048CDA4

0167:00407F85 POP ECX

0167:00407F86 PUSH 0B

0167:00407F88 PUSH ESI

0167:00407F89 PUSH 00000C81

0167:00407F8E PUSH EBX

0167:00407F8F CALL [USER32!GetDlgItemTextA]

0167:00407F95 PUSH ESI       ESI指向”Bingo”

?

按下F11之后程序停留在上面标志的语句,用d EDI命令可以看待,EDI中地址的内容是用户名。按F10一步步走下来,不远处是另一个GetDlgItemTextA,按F10跟进去,  然后按F11跳出来,可以用b ESI看到ESI指向注册码。

这样我们已经证明了前面的判断是正确的,Winzip是使用了GetDlgItemTextA这个函数来获取用户名和注册码。

?

(2)??? Winzip已经得到了它想要的用户名和注册码,接下来应该是验证过程了。按F10接着走,我们看到以下一段代码:

?

0167:00407F96 CALL 0043F89A

0167:00407F9B PUSH ESI

0167:00407F9C CALL 0043F8C3

0167:00407FA1 CMP BYTE PTR [0048CD78],00   [0048CD78]指向“FeiZhaoDong”

0167:00407FA8 POP ECX

0167:00407FA9 POP ECX

0167:00407FAA JZ 00408005

0167:00407FAC CMP BYTE PTR [0048CDA4],00   ;[0048CDA4]指向“Bingo”

0167:00407FB3 JZ 00408005

0167:00407FB5 CALL 00407905

0167:00407FBA TEST EAX,EAX

0167:00407FC3 JZ 00408005

?

注意样的两部分代码

0167:00407FA1 CMP BYTE PTR [0048CD78],00   [0048CD78]指向“FeiZhaoDong”

……

0167:00407FAA JZ 00408005

0167:00407FAC CMP BYTE PTR [0048CDA4],00   ;[0048CDA4]指向“Bingo”

……

0167:00407FB3 JZ 00408005

熟悉汇编语言的人都能很容易的看出这是在判断字符串是否为空。Winzip在判断出字符串为空以后跳转到[00408005],那个地方估计就是弹出注册失败对话框的地方。再走下去,可以看到:

0167:00407FB5 CALL 00407905

0167:00407FBA TEST EAX,EAX

0167:00407FC3 JZ 00408005            ;注意这里的跳转

  Winzip在调用了[00407905]以后,判断EAX是否为0,如果是则跳转到[00408005]。

  多幺熟悉的[00408005]!

  跟着走下去到了[00408005],按着F10很快注册失败的消息框就弹出来了。这样证明了前面的判断,[00408005]就是弹出注册失败对话框的地方。

?

(3)??? 程序看到这里已经没有悬念了,[00407905]的调用就是判断注册码是否正确的过程,如果正确,那幺返回EAX为非0值,否则返回0,注册也就失败了。

2.4????? 深入注册码计算过程

(1)??? 我们的目的是让这个验证注册码的过程永远返回1这个代表正确的值,因此有必要进入到[00407905]里面去看看,按F10一步步走下去,同时监控ESIECXEAX指向的内容,务必找到最后一次更改EAX值的地方!

(2)??? 看着看着有了意外的收获:

0167:00407AA9 PUSH ESI    ? ESI指向输入的注册码“Bingo”

0167:00407AAA PUSH EAX   ?? EAX指向正确的注册码“3E41159C”

……

0167:00407AD2 PUSH ESI     ;ESI指向输入的注册码“Bingo”

0167:00407AD3 PUSH EAX     ;EAX指向正确的注册码“65293585”

?

其实到这里我们已经可以利用给出的正确注册码注册成功了,不过目标还是没有达到。

?

(3) F10走了好久好久(有多久?你试试好了^_^),终于看到了下面的代码

0167:00407B3A? MOV EAX ,[0048FDC]  ;最后一次更改EAX的值,这里是0

……

0167:00407B46? RET

 接着走下去,验证过程就结束了,返回以后很快就弹出注册失败的消息框了。我们已经找到了最后一次更改EAX值的地方,接下去就是修改汇编代码了。

?

2.5????? 小结

通过上面的跟踪过程,我们可以看出:

(1)??????? Winzip对验证过程的保护的确是很弱的,我们很容易就能找到验证是否成功的标志;

(2)??????? 要注意调用API之后的第一个PUSH指令,这往往是重要的数据和标志;

(3)??????? 要注意判空代码,其后面的跳转往往是很重要的标志。

好了,下面让我们去直接修改程序的二进制代码吧。

3??????? 制作注册补丁

3.1????? 修改内存中的代码

(1)??? 先修改内存中的代码试试,目的是让验证过程永远返回1值。

(2)??? 0167:00407B3A? MOV EAX ,[0048FDC]这个代码是关键,考虑到MOV这个指令有立即数赋值的功能,试着这样改:

0167:00407B3A? MOV EAX ,1

(3)??? 让程序停在[00407B3A],使用a命令,按上述方法修改代码,然后按Esc退出修改模式。

(4)??? bd *禁用所有断点。

(5)??? F5接着执行程序,哈哈,注册成功的消息框弹出来了。选择Retry再试一次,仍然可以注册成功。

3.2????? 制作注册补丁

(1)??? 最后,直接修改exe文件来制作注册补丁。重复3.1的过程,当走到[00407B3A]的时候,不要直接修改,先看看这个指令的二进制代码,使用d 407B3A命令,可以看到以下内容:

00407B3A: A1 DC 9F 48 00 83……

(2)??? 3.1所述修改汇编代码以后,再使用d 407B3A命令,可以看到以下内容:

  00407B3A: B8 01 00 00 00 83……

(3)??? 关闭Winzip,使用WinHEX打开Winzip32.exe文件,直接寻找十六进制串A1 DC 9F 48 00 83,找到以后修改为B8 01 00 00 00 83,关闭文件,OK!大功告成。储存修改过的Winzip32.exe文件,这就是我们要的补丁。

4??????? 补丁效果

重新安装Winzip,然后用补丁文件替换原来的Winzip32.exe文件,打开注册接口,输入用户名”FeiZhaoDong”,注册码”Bingo”,然后按”OK”,注册成功。重启Winzip以后可以在”help”里面看到注册信息。如附图。

5??????? 结论

通过这次破解的过程,我熟悉了SoftICE的使用方法,作为一种优秀的调试工具,SoftICE必然在将来的工作中有广泛的应用。另外,还了解了软件注册码保护和破解补丁制作的基本原理。

中国好的的加密解秘网站是看雪学院,里有很多加密解秘的相关资料,部分不是免费的,可以参阅。直接在浏览器中输入看雪学苑即可。

参考资料:

(1)??? 拆解教程,看雪学院

(2)??? SoftICE使用手册?

?

(图略)

?

费照东

2003/9/24

分享到:
评论

相关推荐

    用SOFTICE破解WINZIP的过程

    详细介绍使用SOFTICE破解WINZIP的过程。对逆向工程知识挺有帮助的。

    SOFTICE破解Winamp V2.05

    SOFTICE破解Winamp V2.05 详细教程

    SoftICE中文帮助+使用手册

    "softice用户手册.pdf"则是SoftICE的用户指南,它涵盖了从安装、配置到实际使用的全过程。用户手册通常会包含SoftICE的系统要求、安装步骤、基本操作方法、调试技巧、常见问题解答等内容。例如,如何安装软中断驱动...

    SoftICE使用教程.zip

    《SoftICE使用教程》 SoftICE,全称Software ICE(Interactive Debugging Environment),是一款强大的动态程序调试工具,尤其在逆向工程和系统级调试领域有着广泛的应用。它允许程序员在运行时对目标程序进行单步...

    SOFTICE 使用说明.chm

    SOFTICE 使用说明.chm SOFTICE 使用说明.chm SOFTICE 使用说明.chm

    SoftICE使用文档中文版

    2.2 SoftICE调试器.PDFSoftICE使用文档中文版SoftICE使用文档中文版SoftICE使用文档中文版

    SOFTICE教程及使用手册

    SoftICE命令中文解说之一 命令: . 作用: 在代码窗口中定位当前指令 语法: . 用法: 当代码窗口可见时, .命令(点命令)使得当前的CS:EIP 所指向的指令可见, 并且高亮显示. 另外,此命令也把 SoftICE 从其他内存区域...

    SoftICE调试程序使用说明

    ### SoftICE调试程序使用说明详解 #### 一、SoftICE简介及功能 SoftICE是一款功能强大的软件级调试工具,它可以模拟硬件级别的调试器,具备控制和监控程序运行的强大能力。通过利用80386处理器的特性(如虚拟86...

    SOFTICE使用说明中文版

    这份“SOFTICE使用说明中文版”文档将为用户提供了全面了解和熟练掌握SOFTICE的途径,对于进行WDM(Windows Driver Model)编程的开发者来说,是一份极其宝贵的参考资料。 SOFTICE的全称是SoftwareICE,由System ...

    使用VMWare+SoftICE的方法总结

    下面是使用VMWare+SoftICE的方法总结: 首先,需要安装VMWare和操作系统Windows2000 Professional,具体步骤省略。在虚拟的操作系统Windows2000 Professional内安装SoftICE,这里安装的是DriverStudio 2.7,附带有...

    softice 使用

    ### SoftICE 使用详解 #### 一、SoftICE简介 SoftICE是一种非常强大的内核级调试工具,主要用于Windows操作系统上的程序调试。它具有实时性高、功能强大等特点,被广泛应用于软件开发、逆向工程以及安全研究等领域...

    softice 用户手册中文版

    SoftICE的导航章节则指导用户如何有效地使用SoftICE的各个窗口,如命令窗口、代码窗口、本地窗口、观察窗口和寄存器窗口,以及如何进行数据交互和控制。 接下来的章节涉及如何使用SoftICE调试不同类型的程序,如...

    动态调试工具软件SoftICE

    在使用SoftICE时,需要注意避免与运行在保护模式下的软件冲突,特别是那些使用了保护模式指令的程序,因为这可能会导致异常。 #### SoftICE的主要功能 - **灵活的断点设置**:SoftICE的断点设置极为灵活,不仅限于...

    Using SoftICE.pdf

    ### 使用SoftICE的相关知识点 #### 一、SoftICE概述 SoftICE是一款由Compuware公司开发的调试工具,主要用于Windows操作系统下的程序调试。它支持多种操作系统版本,包括Windows NT、Windows 98、Windows 95、...

    DriverStudio and SoftICE Driver Suite Install

    总之,“DriverStudio和SoftICE Driver Suite”的安装和使用,为驱动程序的开发和调试提供了强有力的工具支持。通过遵循正确的安装流程和注意事项,开发者可以高效地完成驱动程序的开发工作,提升软件产品的质量和...

    softice

    1. **命令行模式**:SoftICE主要通过命令行方式与用户交互,熟练掌握其命令语法对于高效使用至关重要。 2. **断点设置**:合理设置断点可以帮助开发者在指定位置暂停程序执行,便于观察变量状态或跟踪执行流程。 3. ...

    Softice

    SoftICE命令中文解说

    SoftICE V2.80 For Dos

    《SoftICE V2.80 for DOS:深入理解与应用》 ...通过学习和使用SoftICE V2.80 for DOS,不仅可以深入了解DOS时期的软件开发,也能掌握底层调试技术,这对于现代软件工程师来说,依然具有很高的历史价值和实践意义。

    SoftIce4.05.for.nt2000.rar

    专业人士用 0.01154阿道夫45e8654f

Global site tag (gtag.js) - Google Analytics