发信人: mendy.bbs@fbbs.nju.edu.cn (孟迪), 信区: cnhacker
标 题: 破解winzip6.2(转)
发信站: nju_fbbs (Sat Jan 10 19:43:11 1998)
转信站: Lilac!ustcnews!nju_fbbs
出 处: fbbs.nju.edu.cn
- 信区: BESTMAIL.CHINA [精华信件]--------------------------------------------
信件: 159 日期: 15 Mar 97 14:13:00
来自: Jim Tyan 已读: 是 已回信 : 否
给: All 标记:
主题: CRACK IT — CRACK WINZIP6.2
------------------------------------------------------------------------------
>>> 本信由 Zhang Jia (6:655/403) 转发自 PROGRAMR.CHINA
>>> 原信是 Jim Tyan (6:655/301) 在 97.03.15 12:57 写给 All 的
CRACK IT
------ 如何 CRACK WINZIP 6.2
( CRACK 练习...初级水平...请高手略过....)
拆解WINZIP 6.2 已经没有什么实际意义了,因为现在几乎人手一个注册器。
不过对我这样一个刚开始学拆解的初学者来说,恨不得什么都拿来拆一下,
包括人家已经CRACK的东西。看完ED!SON的WINDOWS CRACK教程,极想试试手,
顺手就抓来了WINZIP,因为它就在我的WINDOWS 95的桌面上。
一切都象教程里那样,启动WINICE(我用的是2.0)、WINDOWS 95。然后运行
WINZIP,在HELP的菜单下,鼠标点一下"About WINZIP....."菜单项,马上就
可以在弹出的窗口中看见Register的按键,点它一下吧。好了开始“注册”!
我输入的是:
Jim Tyan (你就随便填吧)
19970310
先不忙着按OK键,因为猎手还没有准备好呢。按下Ctrl+D,进入WINICE屏幕(
如果你没有看到代码窗和数据窗,用WC、WD打开它们,等一下好戏就要在这上
演啦),首先设置第一个断点:
: BPX GetDlgItemTextA
然后按G回到注册画面,按下OK。
哈,鱼儿上钩了!WINICE真不赖。赶紧按F11,回到调用GetDlgItemTextA的地方,
因为程序现在停在GetDlgItemTextA里面,没有什么好看的。
在代码窗里:
1 0137:00404B3F4 PUSH 28
2 0137:00404B4F6 PUSH 004DC2B0 ;缓冲区地址
3 0137:00404B4FB PUSH 00000C80
4 0137:00404B400 PUSH DWORD PTR [EBP+08]
5 0137:00404B403 CALL [USER32!GetDlgItemTextA] ;读入名字
6 0137:00404b409 PUSH 0A
7 0137:00404b40B PUSH 004DA4A0 ;缓冲区地址
8 0137:00404b410 PUSH 00000C81
9 0137:00404b415 PUSH DWORD PTR [EBP+08]
10 0137:00404b418 CALL [USER32!GetDlgItemTextA] ;读入“注册码”
11 0137:00404b41E MOVZX EAX,BYTE PTR [004DC2B0]
12 0137:00404b425 TEST EAX,EAX ;看看是不是什么都
13 0137:00404b427 JZ 0040B449 ;没有输入
14 0137:00404b42D MOVZX EAX,BYTE PTR [004DA4A0]
15 0137:00404b434 TEST EAX,EAX
16 0137:00404b436 JZ 0040B449
17 0137:00404b43C CALL 0040B48E ;注意!这里是关键
18 0137:00404b441 TEST EAX,EAX ;看你是真是假
19 0137:00404b443 JNZ 0040B48E
20 0137:00404b449 CALL 0040B715 ;对不起,注册码不对
21 0137:00404b449 PUSH 0000028E
...... .......
(行号是我加上去的,WINICE的代码窗口没有多大,你得用Ctrl+Up、Down卷动窗
口来看)
来研究一下吧,这里调用了两次GetDlgItemTextA(第1~10行) ,想都不用想,
肯定就是用来读入我输入的名字和注册码啦,两个输入的内容就放在004DC2B0、
004DA4A0,用D命令确认一下:
: D 004DC2B0
: D 004DA4A0
数据窗口中果然显示出我刚才输入的名字和“注册码”。
接下来程序分别读入这两个地址上的一个字节,检查是不是空。现在当然不会,
因为我已经输入了名字和一串数字。再往下就有意思啦,先是调用一个子程序(第
17行),然后检查返回的结果(在EAX中)是不是零,如果不等于零就跳转,如果
等于零就再CALL一个在程序.....
好啦,好啦,意思再明白不过了:第17行的CALL分明就是在检查我输入的注册码对
不对,检查的结果返回在EAX中,不对的话是0,对的话就是0以外的数(管它是什么
反正不是零)。
程序的流程大致明白了,开始动手吧!按几次F10单步执行到第18行,即判断EAX是
不是零的地方。现在当然是零了,天下哪有这巧的事,随便乱敲能蒙得对?不过我
现在有办法蒙它一蒙了:把EAX改成非零不就得了,试一试吧。敲R,把EAX改成
00000001,然后G....
等待的一刻终于到了,WINZIP还装模做样地问你OK不,当然OK啦。按下OK...太棒了,
UNREGISTERED的标题没有啦!不过我只得意了0.5秒,因为当我关闭再重新启动它时,
那个讨厌的催你注册的信息框还,还得按“I AGREE”进入。看来我偷懒了,问题不
是改改EAX就行的,还是那个CALL里有不少名堂,再来次吧...
于是UNINSTALL WINZIP(因为现在WINZIP已经找不到REGISTER的按键了),再INSTALL。
按上面的步骤设好中断,这一次在那个CHECK注册码的CALL的地方,按F8切入...,里
面果然有不少东东,不过STEP几次后我马上就晕了(我可没有多少汇编知识),一步
一步地跟踪不是办法,不晕也要搞到太阳落山,得动动脑筋。
这个子程序的作用,一定是根据我的名字用某种算法计算出真正的注册码,然后与我
输入的码比较。我已经知道自己输入的码放在什么地方(004DA4A0),那么程序进行比
较的时候,肯定要从这个地方取数据,好了好了,我有办法了:
:BPMB 4DA4A0 R (读取4DA4A0时产生中断)
:G
WINICE马上劫住了这段代码:
0137:004607C0 MOV AL,[ESI]
0137:004607C2 INC ESI
0137:004607C3 MOV AH,[EDI]
0137:004607C5 INC EDI
0137:004607C6 CMP AH,AL
0137:004607C8 JZ 004607BC
0137:004607CC SUB AL,41
...... ........
这段代码的意思再明白不过了,这里有个CMP AH,AL嘛!输入的东西在[ESI],真正
的东东自然在[EDI]啦。
:D EDI
总算找到我可爱的注册码了:AB180A98
到了这里想怎么样就怎么样了,比如把JZ改成JNZ等等,我只是把注册码记下了。
(本来没想写这么多,结果废话说了一大堆,浪费大家时间了,SORRY!)
长话短说吧,接下来我又发现了另外一个注册码:53212300(一般的注册器可不会
告诉的哟,至少我手上的不会)。
我还没有搞定注册器,哪位知道算法的,请告诉我。另外我发现输入NAME的与
“MuradMeraly”作过比较,不知这个名字有什么特殊的作用?
--
--
※ 来源:.南大小百合信息交换站 fbbs.nju.edu.cn.[FROM: a507yjh.nju.edu]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.439毫秒