• 标 题:《NetStat4.0的破解实录》---->为申请FCG而做 (10千字)
  • 作 者:yuppc
  • 时 间:2001-6-17 17:45:35
  • 链 接:http://bbs.pediy.com

《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>收工!:-)