警告(NAG)窗口 【习题】
Nag的本义是烦人的意思。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。软件设计者可能认为当用户受不了试用版中的这些烦人的窗口时就会考虑购买正式版本。它可能会在程序启动或退出时弹出来,或者在软件运行的某个时刻随机或定时地弹出来,确实比较烦人。
去除警告窗口常用的三种方法是:修改程序的资源、静态分析,动态分析。
去除警告窗口用资源修改工具是个不错的方法,可以将可执行文件中的警告窗口的属性改成透明、不可见,这样就变相去除了警告窗口。
如果是动态跟踪调试,只需找到创建此窗口的代码,跳过即可。常用的显示窗口的函数有MessageBoxA、MessageBoxExA、MessageBeep
、DialogBoxParamA 、ShowWindow、CreateWindowExA等。然而某些警告窗口用这些断点不管用,就可试试利用消息设断点,一般都应能拦截下来。
例:利用消息断点拦截警告窗口:
切换到SOFTICE下命令: HWND
应看到如下的类似信息:
Window-Handle | hQueue | SZ | QOwner | Class-Name | Window-Procedure |
0080 (0) | 2057 | 32 | MSGSVR32 | #32711 (switch_win) | 17EF:00004B6E |
0084 (1) | 2057 | 32 | EXPLORER | shell_trayWnd | 1487:0000016C |
... | ... | ... | ... | ... | ... |
在这些列表中查找相关应用程序的窗口句柄。如果NAG窗口上有OK按钮,在class name查找“button”。如果NAG窗口上什么都没有,那可试验找出正确的句柄。句柄列表可能非常长,但通常NAG窗口的句柄一般在列表的前面。
注:在这里推荐用SMU
Winspector工具协助破解NAG.它能显示你所需要的信息:Window-Handle, Window-Class Name, Window-Text,
Parent Window-Handle, Parent-Window Class Name, Parent Window-Text, Module ...
一但找到NAG窗口的句柄,应用BMSG命令在Windows的消息上下断点。现在假设NAG窗口有OK按钮,你己找到正确的句柄(handle),这时下命令:
BMSG 0084 WM_DESTROY
0084是NAG窗口的句柄(handle)。这条命令是NAG窗口从屏幕上消失时,SoftICE将中断。此时将深入到一些不认识的API函数,可按F12返回程序。需要指出,跟踪的目的是发现NAG窗口在何处初始化(在返回的CALL用设断)。NAG窗口大多用Created/Destroyed类似的CALL,因此如发现这些,就可按需要跟踪下去。