• 标 题:IPTools 1.10 破解 (5千字)
  • 作 者:傲世男儿
  • 时 间:2001-2-11 14:30:16
  • 链 接:http://bbs.pediy.com

IPTools 1.10 破解
URL http://newhua.infosail.com/IPTools.htm
工具:w32dsm 8.93 gold,VC...

4个月没有破解了,今天碰到了这个不错的IP工具,还是delphi写的,网上没有该版本的破解,就破它吧!
w32dsm反汇编后觉得很简单,一下子就查到了"Sorry, but Name or Registration...."

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00497171(C), :0049718B(C), :004971C6(C), :004971EE(C)
|

* Possible StringData Ref from Code Obj ->"Sorry, but Name or Registration "
                                        ->"number is wrong !"
                                  |
:00497340 B89C744900              mov eax, 0049749C
:00497345 E866C3FAFF              call 004436B0

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00497109(C), :0049733E(U)

看见上面的4个出口,找到相关的跳转nop掉,Thank You for registering出来了。

重新打开程序,看见了"Program was corrupted!!"

继续搜索"Program was corrupted!!",原来只有一个跳转碍事,
:004B3237 8B1594984B00            mov edx, dword ptr [004B9894]
:004B323D 3B82B4000000            cmp eax, dword ptr [edx+000000B4]
:004B3243 740F                    je 004B3254          //改为jne
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Possible StringData Ref from Code Obj ->"Program was corrupted !"
                                  |
:004B3245 B85C354B00              mov eax, 004B355C
:004B324A E86104F9FF              call 004436B0

进去之后发现还是没有注册成功,出现一个非整数错误而程序退出,作者可真够狠毒,
用了一次非法注册号就永远取消使用权?用regmon跟踪了一下启动过程,分析后发现
关键点在HKCU\Software\Microsoft\Windows\CurrentVersion\Devices\0010下面的两
个键值,真正的注册信息放在这里,但这些内容是经过加密运算后写入的注册码,
而相同注册码每次产生的键值是不同的。删掉这两个键值,可以进入程序了,但显示为未注册。

在注册表HKCU\Software\Microsoft\KS-SOFT\IP-Tools中发现了这个键值,顾名思义是显示注册对话框的,
我起初以为只要每次启动前将该键值置0,就不会显示那个讨厌的nag了,于是用BCB做了个loader,
但发现依然不成功,似乎不是单单由这个键值决定的,而是由多个键值(比如:LastRunTime)
等等计算决定是否显示nag,这时已经陷入修改注册表的迷途,索性将所有可能相关的键值都放进
loader中,果然收效显著,我甚至以为破解成功了,可我启动程序到达20次左右时,又出现了nag,昏倒!

唉,还是回来看看w32dsm的结果吧,进而开始分析其启动过程的代码,很容易找到了ShowRegDlg
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B2B32(C)
|
:004B2B43 A118994B00              mov eax, dword ptr [004B9918]
:004B2B48 833800                  cmp dword ptr [eax], 00000000
:004B2B4B 0F8586000000            jne 004B2BD7  //就是这里判断是否显示nag
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:004B2B51 E8AEFFF4FF              call 00402B04

* Possible StringData Ref from Code Obj ->"ShowRegDlg"
                                  |
:004B2B56 BA582D4B00              mov edx, 004B2D58
:004B2B5B 8BC7                    mov eax, edi
:004B2B5D E87A21F8FF              call 00434CDC
:004B2B62 84C0                    test al, al
:004B2B64 740F                    je 004B2B75

只要把0F8586000000,中的85改成84,nag便不再弹出了,我反复试验了2000次(注册表失败综合症?),
当然不是我自己用鼠标反复的打开关闭,写个程序即可,我只是在旁边看它究竟有没有出现nag而已。
的确是搞定了。

可当我使用其中的ping等功能时,竟然弹出这样一个对话框:
"98% - you use illegal registration key or cracked version of IP-Tools....",原来使用过程
中还有校验?由于我是爆破,会导致这个异常的产生,其实后来我发现,某些不完全破解的注册码也
会产生这个问题。
看了看w32dsm的结果,发现这个对话框的弹出是在异常处理模块中的,即delphi的
try
  X := Y/Z;
except
  on EZeroDivide do HandleZeroDivide;
end;
语句,这种判断注册有效否的方法我可是头一次见到,写了个简单的delphi try...except程序反汇编了
一下也没找到任何突破口,因为无法知道这个异常是个什么异常,是自己抛出的还是系统产生的。

想用delphi/bcb的CpuView看看,结果根本无法调进IPTools.exe文件,提示我说dll加载错误,转而使用VC载入,
竟然成功了,看来delphi/bcb这方面的功能的确有待加强,自己编译生成的东西无法调试,vc却可以,
加了个断点在这一句上,
:004B2B4B 0F8586000000            jne 004B2BD7  //就是这里判断是否显示nag
随手把85改成84,原因是想避过nag,可进入程序后点了ping功能一下,竟然没有出现那个异常!爽!
有句话怎么说来着:“老天疼憨人”!,动态修改代码没有问题,我怎么过去没想到???
可惜我的softice 4.05 for nt 装上后NT中鼠标总是飞来飞去,否则早就发现突破口了!

写个rpp文件如下,做个loader,OK!
T=3:
F=IP_Tools.exe: ;
P=004b2b4b/0F,85/0F,84:

趁热打铁一番,查了查产生先前提到的那个非整数错误的Call:
:004B29C8 E8EF6DFDFF              call 004897BC 

只要把里面的E8EF改为EB03即可躲过,省着错填注册号后每次去删那两个键值了。

这样,最终的RPP文件如下:
T=3:
F=IP_Tools.exe: ;
P=004b2b4b/0F,85/0F,84:
P=004B29C8/E8,EF/EB,03:

这样做出的loader后所有的功能可用,NAG不再弹出,只是看看license中还是显示未注册,
功力的确不够,忘大小侠们多指点。

                                                  傲世男儿
                                                    China Crack Group
                                                      01-2-11 02:23下午