软件保护技术——常见保护技巧

(1)序列号保护机制

(2)如何* * *序列号保护

要找到序列号,或者修改掉判断序列号之后的跳转指令,最重要的是要利用各种工具定位判断序列号的代码段。这些常用的API包括GetDlgItemInt, GetDlgItemTextA, GetTabbedTextExtentA, GetWindowTextA, Hmemcpy(仅仅Windows 9 x), lstrcmp, lstrlen, memcpy(限于NT/2000年)。

1)数据约束性的秘诀,
这个概念是+兽人提出的,只限于用明文比较注册码的那种保护方式。在大多数序列号保护的程序中,那个真正的,正确的注册码或密码(密码)会于某个时刻出现在内存中,当然它出现的位置是不定的,但多数情况下它会在一个范围之内,即存放用户输入序列号的内存地址±0 x90字节的地方。这是由于加密者所用工具内部的一个窗口数据传输的约束条件决定的。

2) Hmemcpy函数(俗称万能断点)
函数Hmemcpy是Windows9x系统的内部函数,位于KERNEL32。DLL中,它的作用是将内存中的一块数据拷贝到另一个地方。由于Windows9x系统频繁使用该函数处理各种字串,因此用它作为断点很实用,它是Windows9x平台最常用的断点。在Windows NT/2K中没有这个断点,因为其内核和Windows9x完全不同。

3)S命令
由于S命令忽略不在内存中的页面,因此你可以使用32位平面地址数据段描述符30h在整个4GB(0~FFFFFFFFh )空间查找,一般用在Windows9x下面。具体步骤为:先输入姓名或假的序列号(如: 78787878),按Ctrl+D切换到SoftICE下,下搜索命令:
s 30:0 L ffffffff '78787878'
会搜索出地址:ss:ssssssss(这些地址可能不止一个),然后用bpm断点监视搜索到的假注册码,跟踪一下程序如何处理输入的序列号,就有可能找到正确的序列号。

4)利用消息断点
在处理字串方面可以利用消息断点WM_GETTEXT和WM_COMMAND。前者用来读取某个控件中的文本,比如拷贝编辑窗口中的序列号到程序提供的一个缓冲区里;后者则是用来通知某个控件的父窗口的,比如当输入序列号之后点击OK按钮,则该按钮的父窗口将收到一个WM_COMMAND消息,以表明该按钮被点击。
BMSG xxxx WM_GETTEXT (拦截序列号)
BMSG xxxx WM_COMMAND (拦截OK按钮)
可以用SoftICE提供的HWND命令获得窗口句柄的信息,也可以利用Visual Studio中的Spy++实用工具得到相应窗口的句柄值,然后用BMSG设断点拦截。例:
BMSG 0129 WM_COMMAND

Nag的本义是烦人的意思。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。软件设计者可能认为当用户受不了试用版中的这些烦人的窗口时就会考虑购买正式版本。它可能会在程序启动或退出时弹出来,或者在软件运行的某个时刻随机或定时地弹出来,确实比较烦人。

去除警告窗口常用的三种方法是:修改程序的资源、静态分析,动态分析。
去除警告窗口用资源修改工具是个不错的方法,可以将可执行文件中的警告窗口的属性改成透明、不可见,这样就变相去除了警告窗口。
如果是动态跟踪调试,只需找到创建此窗口的代码,跳过即可。常用的显示窗口的函数有MessageBoxA、MessageBoxExA、MessageBeep 、DialogBoxParamA 、ShowWindow、CreateWindowExA等。然而某些警告窗口用这些断点不管用,就可试试利用消息设断点,一般都应能拦截下来。

例:利用消息断点拦截警告窗口:

 0084是NAG窗口的句柄(handle)。这条命令是NAG窗口从屏幕上消失时,SoftICE将中断。此时将深入到一些不认识的API函数,可按F12返回程序。需要指出,跟踪的目的是发现NAG窗口在何处初始化(在返回的CALL用设断)。NAG窗口大多用Created/Destroyed类似的CALL,因此如发现这些,就可按需要跟踪下去。

(1) 定时器

2)使用timeSetEvent()

给Windows驱动程序最精确的周期性通知是由Windows的多媒体服务timeSetEvent()提供的。它的时间可以精确到1毫秒。

3)使用VXD

可以使用VMM的Set_Global_time_Out()服务来迫使回调函数的几个毫秒再执行,这就创造了一个“只有一次”的定时器。VXD可以在回调中再次调用Set_Global_time_Out()来开始下一个定时器,这样提供了一个连续运行的定时器了。

4)其它

GetTickCount():精度不高;
timeGetTime(): 可以以毫秒级返回windows开始后的时间。

(2)时间限制

一般这类保护的软件都有时间上的限制,如试用30天等,当过了共享软件的试用期后,就不予运行,只有向软件作者付费注册之后才能得到一个无时间限制的注册版本。

软件保护技术——常见保护技巧