IPTools 1.10 破解 (5千字)

看雪資料發表於2001-02-11

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下午

相關文章