使用SoftICE破解Winzip8.0全攻略

news/2024/11/30 6:02:43/

摘要

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使用手册?

?

(图略)

?

费照东


http://www.ppmy.cn/news/307521.html

相关文章

搜索下载免费操作系统(转)

网友上网,经常做的一件事是下载。小说、mp3、电影、软件、图片、游戏,既有共通之处,也有各自的搜索下载特色,本文说的是软件的搜索和下载。 软件搜索下载的方法,最常用的是4种:下载网站、ftp、p2p、搜索引擎…

强大的WINZIP 17 的简单测试和windows备份功能,脚本的利用

前几天,由于电脑OFFICE上一个硬盘出了点小问题,结果丢掉了几天的文档,辛苦编辑了几天的工作成果化为泡影,决定给自己的电脑上的文档做个备份,本文所用到的工具都来源于我的电脑上的工具。主要有WINDOWS XP自带的备份工…

压缩软件大评比,7-ZIP/WinZIP/WinRAR的抗争

猫猫爱软件2021-03-12 21:30:00 细数近来的一些压缩软件,那可真是一个精彩的故事。 您且细细听~ 近年压缩软件的市场是越来越大,想曾经,还只有WinZIP和WinRAR两家。RAR出现之后,就抢占了一大部分市场,它的压缩率确实…

winrar解压器_与WinRAR齐名的经典解压缩软件——WinZip,不仅仅是情怀

说起解压缩软件,大家第一时间可能会想起大名鼎鼎的WinRAR和7-zip,或者是来自韩国的优秀软件解压缩Bandizip,国产的大家电脑上基本上都遇到过2345好压或者360压缩之类的软件,这些解压缩软件本人都体验过,有的好用&#…

linux安装7zip 64位下载,7-Zip首页、教程和下载-压缩软件-软件交流社区–完美下载...

软件特点 7-Zip是基于GNULGPL协议发布的软件,通过全新算法使压缩比率大幅提升 支持格式: 压缩 / 解压缩:7z, XZ, BZIP2, GZIP, TAR, ZIP 和 WIM 仅解压缩:ARJ,CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, …

Windows 使用技巧之WinZIP密码破解

WinZip的大名相信大家都听说过,zip的文件压缩格式也几乎成了网络文件流通的标准。其中WinZip的密码功能的确为用户提供了不少的方便,可是一旦密码遗忘了,或者其他原因而不能用上正确的密码,那么这个方便也变成了不便。网上有许多专门破解WinZip密码的工具,不过大多数的工具…

neo4j 企业版 最新版 neo4j-enterprise-4.2.1下载

neo4j 企业版 最新版 neo4j-enterprise-4.2.1下载 企业版和社区版对比: 社区版和企业版有什么区别。其实他们在功能上没有本质区别。主要区别在如下几点:1、容量:社区版最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,而企…

Passware Kit Enterprise破解版下载及使用方法

【软件介绍】   Passware Kit Enterprise 是一个功能极为强大的密码恢复工具合集。自 9.0 版起,开发商便对它进行了重大改进,将所有的密码恢复模块全部集成到一个主程序中。恢复文件文件密码时,再也无需像以前那样恢复哪种文件类型的密码需…