• 标 题:鹦鹉螺网络助手破解 (5千字)
  • 作 者:uhlan
  • 时 间:2001-1-19 17:32:05
  • 链 接:http://bbs.pediy.com

软件介绍:
软件名叫鹦鹉螺网络助手,大小为708KB。可在下列网址download.
http://newhua.infosail.com/down/netranger170c.exe

鹦鹉螺网络助手是一个集成了用于TCP/IP协议的多种网络工具的应用软件。她基于Windows Socket2.0版
本,功能包括:Ping;Host lookup(主机查询);Finger(帐号查询);同步本地主机时钟的Time(网络时钟); WhoIs(域名查询);TraceRoute(路由跟踪);ISPPinger(以一定时间间隔持续ping同一台主机);QoD服务; 增强的快速拨号;支持多帐号的电邮检查等等。其他特性包括多功能的托盘图标,在线检查软件升级,获 得本机IP地址,将主机查询结果存入本地HOSTS文件等等。本软件适用于安装了TCP/IP协议的Windows 9x操作系统(包括Windows 95,97,98和Windows ME)。本软件需要有Microsoft Winsock 2.0或更高版本才 能正常工作。Windows 98及以上版本在安装时即已带有,而Windows 95用户可以从微软公司的网站下载有
关的升级包,也可以从鹦鹉螺工作室的主页下载一个拷贝



我用的工具:softICE 4.05.可在下列网址download
http://mud.sz.jsinfo.net/per/aaron/files/debuggers/win/si405w9x.zip

知识要求: 1。具备基本的汇编知识。
          2。懂得 softICE 的基本操作。

所用方法: 1.找注册失败点。
          2。找关键跳跃点。
          3。找关键CALL.
          4。找出注册码。


I。找注册失败点。

  运行软件NautiNW,注册软件。

1.  输入名字和注册码:
 
用户名:uhlan
注册码:78787878 (从 Error_Free 大哥处学来的,他可是我的启蒙老师哦!^^)

2.按 Ctrl-D 进入 softICE.

3.设断 BPX HMEMCPY 按 F5 返回 NautiNW.

4.按回车即被拦截, 不停地按F12,当按了21下时出现了注册失败的窗口。

5。按确定后,按F5 回到 NautiNW,按前面的步骤再来一次。

6。不停地按F12,不过这次是按了20下,就停住。按 F6, 再用 F9设一个断点。

7。不停地按F10,按到一定时候,会看到

  0177:00417AC2 CALL 00437436

8。 当我们再按一次时,失败的窗口就跳出来了。于是,这个CALL就是我们要找的失败点了。



II.找关键跳跃点。

9。再重新注册一次。按回车即被拦截. 由于刚才用 F9设了一个断点,现在就直接来到这里。

10。按 F10, 直到看到下列语句。

....

    0177:00417A54  TEST EAX,EAX  (EAX=0)
    0177:00417A56  JZ 00417AB4  (一跳就失败)

...

11.在 JZ 00417AB4 处 打入 rfl+z

12.再按F10,这时程序就不再跳跃了。

13.按F5退出softICE,这时就会出现注册成功的画面。


(从这里我们可以推测到,EAX 是一个标志位,当EAX=0时,表明输入注册码不正确,当 EAX 不等于 0时,表明输入注册码正确。所以,下一步,我们要找的就是那个CALL
负责在EAX设标志)。



III.找关键CALL

14. 再重新注册一次。按回车即被拦截.

15.  按 F10, 直到

....

  0177:00417A4F  CALL 00417C20

....


    0177:00417A54  TEST EAX,EAX  (EAX=0)
    0177:00417A56  JZ 00417AB4  (一跳就失败)

...

过了那个CALL后,我们可以看到 EAX已经被清零了。于是,可以
十分肯定地说,CALL 00417C20 就是我们要找的关键 CALL.

注册码的对比就在那个 CALL 里面。



IV. 找出注册码。

16。在 0177:00417A4F CALL 00417C20 按F9设断。再注册一次,

17。 在 0177:00417A4F CALL 00417C20 被拦截后,按F8进入这个CALL.

19. 不停地按F10,并留意 EAX的变化,看什么时候变0.

20.  终于,在这里,

.....

  0177:00417CE3  XOR EAX,EAX

.....

  ( 程序运行到这里把 EAX 清零后,就会跳出这个CALL,回到主程序,然后,就是对比EAX的值,再着

  失败窗口就出现了。

我们可以想到,程序肯定有一个地方对比注册码,然后再决定来不来到这里来吧 EAX 清零。)


21。再注册一次。

22。在 0177:00417A4F CALL 00417C20 被拦截后,按F8进入这个CALL

23,不停地按F10,不过这次是看那里的 JUMP 会跳过前面清零的步骤。

24。皇天不负苦心人!,终于,我们可以在这里找到线索。

  .....
    0177:00417C87  CALL 004232A0
    0177:00417C8C  ADD ESP,0C
    0177:00417C8F  MOV BYTE PTR [ESP+20],00
    0177:00417C94  TEST EAX,EAX          (检验标志位, EAX=1 则失败。 EAX=0 则成功 )
    0177:00417C96  LEA ECX,[ESP+28]
    0177:00417C9A  JNZ 00417CC9        (跳则失败,不跳则成功)
....

  (从这里,可以推断, EAX在这里变成另一个标志位的寄存器,而 CALL 004232A0 是设置这个新标志的关键CALL)


25. 于是,再重新注册一次。

26。 来到 0177:00417C87  CALL 004232A0 时,按 F8 进入。

27。 以下是我抄下来的 CALL 004232A0 内的程序。

                    PUSH EBP
                    MOV EBP,ESP
                    PUSH EDI
                    PUSH ESI
                    PUSH EBX
                    MOV ECX,[EBP+10]
                    JECXZ 004232D1
                    MOV EBX,ECX
                    MOV EDI,[EBP+08]
                    MOV ESI,EDI
                    XOR EAX,EAX
                    REPNZ SCASB
                    NEG ECX
                    ADD ECX,EBX
                    MOV EDI,ESI
                    MOV ESI,[EBP+0C]
                    REPZ CMPSB
                    MOV AL,[ESI-01] (下 d esi-01 的命令, 就可看到 78787878, 正是我们输入的号码)
                    XOR ECX,ECX
                    CMP AL,[EDI-01]  (下 d edi-01 的命令, 就可看到 xxxxxxxx, 正是要找的注册码,还不快抄下?)
                    JA 004232CF
                    JZ 004232D1        ( 不 jump 就失败) 
                    DEC ECX
                    DEC ECX
                    NOT ECX
                    MOV EAX,ECX        ( 将 EAX 的标志设为1)
                    POP EBX
                    POP ESI
                    POP EDI
                    LEAVE
                    RET
   

28.  用找到的注册码再重新注册。这次是真的成功了!!^^