发信人: 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毫秒