《NetStat4.0的破解實錄》---->為申請FCG而做 (10千字)

看雪資料發表於2001-06-17

《NetStat4.0的破解實錄》

破解作者:yuppc
破解時間:2001年6月17日
破解難度:易
注:(轉載希望保持完整)

軟體概述:
1>軟體名:NetStat4.0
2>軟體作用(摘):介紹:這是一個強大的Internet工具,它能夠讓你透過圖形介面檢視當前的網路連線情況,你可以用它來了解和防堵非法連線。不管你是連線到網站、檢查信件、傳送ICQ資訊,還是無意中開啟了一個後門程式,XMS都將會注意到這些活動,並對你進行提醒,同時還能夠顯示每個連線的詳細情況。
3>評:這是一個非常好的網路軟體,在網路自由英雄時代有些人們連自己的網路門戶都無法看受,為什麼?那是因為他們還不瞭解自己的機器!此軟體有全監控能力,向使用者提供連線Ip、埠等資訊和控制的圖形化操作!
4>未註冊軟體只有十五天的使用期.
5>主頁:http://www.freshsw.com
6>最新版本:X-NetStat 5.0 Standard Beta 1(05-02-01)

破解目的:為加入CCG奮鬥!

破解工具:
1>regshot  ====>登錄檔工具
2>w32asm中文黃金板 ====>反彙編工具
3>TRW2000    =====>動態除錯工具
4>Hex shop  =====>十六進位制編輯器

破解方法:
方法一:登錄檔分析及靜態反彙編法(適用大部分在登錄檔內加入時間標誌位的時間限制軟體)
方法二:標準破解法(很傳統,也很實用)

破解開始:
分析:軟體安裝後,第一次啟動,軟體"標題欄"顯示"15 days left";第二次啟動,軟體的"標題欄"顯示"14 days left";改動日期,向後改動,"標題欄"顯示天數減少;向前改動,"標題欄"天數增加(看起來較容易呀),但當日期超過安裝日期時提示錯誤.

方法一:登錄檔分析及反彙編

1>使用regshot為登錄檔"拍攝"映象並對軟體安裝前後的Reg進行對比,發現鍵值"HLM\software\XNSvc\when",是軟體啟動時新建的.
2>發現:當我們刪除REG中的"when"鍵後,軟體啟動後將重新建立"when"鍵,並從新開始記時(也就是重新從15開始倒數),可以得知此鍵應為軟體的安裝時間標誌.
3>初步設想:如果當軟體啟動時都從新建立"when"鍵,那麼軟體的時間約束不就解除了,並且是全功能的!!
4>使用w32asm黃金版進行反繪編,查詢"when",過程如下:
第12下到站(共有15處含when,其中包括"whenreg_pro4""whenlv""Registeredwhen"):有人問那為什麼是第12個呢,其實搜能搜到2大塊個真正完全搭配的when程式帶,就是第12次停時和第15次停時,而第15次的程式段顯然不是(分析一下嘛:-)
下面是源程式:
* Referenced by a CALL at Addresses:
|:00508CE5  , :00508D05  , :00519DEA  , :00519E05  , :00519E54 
|                            ^^^^^^^^^^
:00518624 53                      push ebx
:00518625 56                      push esi

* Possible StringData Ref from Code Obj ->"DaysLeft"
                                  |
:00518626 B8FC865100              mov eax, 005186FC
:0051862B E80CE5FFFF              call 00516B3C
:00518630 B201                    mov dl, 01
:00518632 A1D0BF4700              mov eax, dword ptr [0047BFD0]
:00518637 E8003BF6FF              call 0047C13C
:0051863C 8BD8                    mov ebx, eax
:0051863E BA02000080              mov edx, 80000002
:00518643 8BC3                    mov eax, ebx
:00518645 E8CE3BF6FF              call 0047C218
:0051864A B101                    mov cl, 01

* Possible StringData Ref from Code Obj ->"\SOFTWARE\XNSvc"
                                  |
:0051864C BA10875100              mov edx, 00518710
:00518651 8BC3                    mov eax, ebx
:00518653 E8043DF6FF              call 0047C35C

* Possible StringData Ref from Code Obj ->"when"=====>第一個(我們停在這)
                                  |
:00518658 BA28875100              mov edx, 00518728
:0051865D 8BC3                    mov eax, ebx
:0051865F E8D442F6FF              call 0047C938=====>檢查鍵值when的call
:00518664 84C0                    test al, al====>標誌位(when是否存在)
:00518666 7415                    je 0051867D===>否,跳(解決問題的跳)

* Possible StringData Ref from Code Obj ->"when"=====>第二個
                                  |
:00518668 BA28875100              mov edx, 00518728
:0051866D 8BC3                    mov eax, ebx
:0051866F E83C41F6FF              call 0047C7B0
:00518674 DD1DB89D5300            fstp qword ptr [00539DB8]
:0051867A 9B                      wait
:0051867B EB24                    jmp 005186A1====>正常跳轉(將取得本地時間與when值比較)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00518666(C)
|
:0051867D E82E23EFFF              call 0040A9B0====>新建立when鍵(破解時間所在)
:00518682 DD1DB89D5300            fstp qword ptr [00539DB8]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00518617(C)
|
:00518688 9B                      wait
:00518689 FF35BC9D5300            push dword ptr [00539DBC]
:0051868F FF35B89D5300            push dword ptr [00539DB8]

* Possible StringData Ref from Code Obj ->"when"====>第三個
                                  |
:00518695 BA28875100              mov edx, 00518728
:0051869A 8BC3                    mov eax, ebx
:0051869C E8FB40F6FF              call 0047C79C
-------------------------------------------------------
5>用Hex shop改地址518666內容---7515--->eb15
  時間限制解決,使用者永遠可以使用!
6>總結:方法快速、簡便、安全性好,缺點是軟體不太美觀(標誌欄總有“15 days left”)


*************************************************************
因此下面介紹一下完美破解:

方法二:
1>把日期調到過期時間.
2>記下過期提示框所顯示的的英文.
3>老方法,用w32asm黃金版查詢字串:
查詢"Evaluation period over"(或者"Evaluation",可能會找到的多些呀)
      發現了三個地方:
---------------------------------------------------------
4>開始分析:
第一處(看源程式,顯然不對嗎),不信,你向上看有這樣的句子(這個程式有些怪,它有"反註冊"功能):
* Possible StringData Ref from Code Obj ->"Warning"
                                  |
:00508C9F BAA48D5000              mov edx, 00508DA4

* Possible StringData Ref from Code Obj ->"This will unregister your copy "=====>是反註冊的標誌嘛,所以……
                                        ->"of X-NetStat.
You will have to "
                                        ->"re-enter your registration information. "
                                        ->"Do you wish to proceed?"
    :
    :
    :
:00508D47 8D45F0                  lea eax, dword ptr [ebp-10]

* Possible StringData Ref from Code Obj ->" - Evaluation period over"=====>第一處
                                  |
:00508D4A BA8C8E5000              mov edx, 00508E8C                     

------------------------------------------------------------
第二處(這個可以認定是具體的呼叫),源程式如下:
* Referenced by a CALL at Addresses:
|:005047E0  , :00510513  , :00519E5D  , :0052185C 
|                            ^^^^^^^^
:005107EC 53                      push ebx
:005107ED BBC8D95200              mov ebx, 0052D9C8
:005107F2 B930000000              mov ecx, 00000030

* Possible StringData Ref from Code Obj ->"Evaluation period over"=======>第二處
                                  |
:005107F7 BADC085100              mov edx, 005108DC

* Possible StringData Ref from Code Obj ->"Your evaluation period for XNS "
                                        ->"has expired. XNS will no longer "
                                        ->"be functional until you register.
Please "
                                        ->"consider purchasing X-NetStat "
                                        ->"Professional."
                                  |
:005107FC B8FC085100              mov eax, 005108FC
:00510801 E8EE46F9FF              call 004A4EF4

* Possible StringData Ref from Code Obj ->"X-NetStat Professional - Evaluation "
                                        ->"period over"
          :
          :
下面有一小群mov和call,所以我猜是具體呼叫,先不要理她,請記住上面呼叫這段程式的call的地址!(十分感謝)

--------------------------------------------------------
第三處(仔細看,停的位置給你標出了):
* Possible StringData Ref from Code Obj ->"creating udpstats"
                                  |
:00519DC4 B8A8A15100              mov eax, 0051A1A8
:00519DC9 E86ECDFFFF              call 00516B3C
:00519DCE 8B0B                    mov ecx, dword ptr [ebx]
:00519DD0 B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"?A"
                                  |
:00519DD2 A1BCE94500              mov eax, dword ptr [0045E9BC]
:00519DD7 E87C5AF4FF              call 0045F858
:00519DDC A3DCD95200              mov dword ptr [0052D9DC], eax
:00519DE1 E8BAE6FFFF              call 005184A0======>註冊檢查call(我當然知道,我追過嘛)
:00519DE6 84C0                    test al, al=====>標誌位
:00519DE8 7578                    jne 00519E62=========>關鍵跳(完美破解所在)
:00519DEA E835E8FFFF              call 00518624=====>檢測軟體安裝時間(時間在登錄檔HLM\software\XNSvc\when)
:00519DEF 85C0                    test eax, eax
:00519DF1 7E40                    jle 00519E33====>過期就跳
:00519DF3 8D55F0                  lea edx, dword ptr [ebp-10]
:00519DF6 8B03                    mov eax, dword ptr [ebx]
:00519DF8 E877C5F1FF              call 00436374
:00519DFD FF75F0                  push [ebp-10]
:00519E00 68C4A15100              push 0051A1C4
:00519E05 E81AE8FFFF              call 00518624
:00519E0A 8D55EC                  lea edx, dword ptr [ebp-14]
:00519E0D E842F7EEFF              call 00409554
:00519E12 FF75EC                  push [ebp-14]

* Possible StringData Ref from Code Obj ->" days left)"
                                  |
:00519E15 68D0A15100              push 0051A1D0
:00519E1A 8D45F4                  lea eax, dword ptr [ebp-0C]
:00519E1D BA04000000              mov edx, 00000004
:00519E22 E861A1EEFF              call 00403F88
:00519E27 8B55F4                  mov edx, dword ptr [ebp-0C]
:00519E2A 8B03                    mov eax, dword ptr [ebx]
:00519E2C E873C5F1FF              call 004363A4
:00519E31 EB21                    jmp 00519E54

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00519DF1(C)
|
:00519E33 8D55E8                  lea edx, dword ptr [ebp-18]
:00519E36 8B03                    mov eax, dword ptr [ebx]
:00519E38 E837C5F1FF              call 00436374
:00519E3D 8D45E8                  lea eax, dword ptr [ebp-18]

* Possible StringData Ref from Code Obj ->" - Evaluation period over"====>第三處(我們停在這!)
                                  |
:00519E40 BAE4A15100              mov edx, 0051A1E4
:00519E45 E886A0EEFF              call 00403ED0
:00519E4A 8B55E8                  mov edx, dword ptr [ebp-18]
:00519E4D 8B03                    mov eax, dword ptr [ebx]
:00519E4F E850C5F1FF              call 004363A4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00519E31(U)
|
:00519E54 E8CBE7FFFF              call 00518624=====>檢查登錄檔的when鍵值
:00519E59 85C0                    test eax, eax
:00519E5B 7D05                    jge 00519E62
:00519E5D E88A69FFFF              call 005107EC======>過期時跳出的nag(這也是呼叫第二處程式的call,讓記的地址記了嗎!)

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00519DE8(C), :00519E5B(C)
|
:00519E62 E8DDB5FFFF              call 00515444  =====>正常的程式呼叫
:00519E67 803DF8B5520000          cmp byte ptr [0052B5F8], 00
:00519E6E 7405                    je 00519E75
:00519E70 E84F69FFFF              call 005107C4
------------------------------------------------------------------
5>現在清楚了嗎,動手:改地址519de8的7578----->eb78
6>收工!:-)

相關文章