高级类探测器






2.48/5 (8投票s)
2004年10月19日
3分钟阅读

68462

1008
一个探测窗口类,并枚举所有已加载模块的程序
目录
引言
在Windows平台中,每个窗口都是已注册类的一个实例。控件的类存储控件的某些属性,并定义Windows操作系统处理它们的某些标准。
WNDCLASSEX structure:
typedef struct _WNDCLASSEX {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
类结构存储指向窗口过程的指针、绘制背景的画笔、窗口显示的图标、光标等等……
在Windows平台中,每个控件都是从一个已注册的类派生的,并且类名将它们区分开。内置的Windows控件具有不同的类名,但可以通过宏提供给开发者。
例如:WC_TABCONTROL
,它被定义为
#define WC_TABCONTROLA "SysTabControl32" #define WC_TABCONTROLW L"SysTabControl32" #ifdef UNICODE #define WC_TABCONTROL WC_TABCONTROLW #else #define WC_TABCONTROL WC_TABCONTROLA #endif
这确保了避免对类名的依赖。
有时,Windows控件对于特定目的来说是不够的。为此,Windows编程提供了标准Windows控件的“子类化”和“超类化”方法。
但这只提供了非常有限的自定义范围,并且通常以降低性能为代价。 这也为程序引入了新的无法追踪的错误。在实际应用中,100%的自定义控件在设计上提供了更大的灵活性、自定义范围和良好的性能。
类探测器
类探测器是一个用于监视控件类的实用工具。使用它可以检查新控件的注册类名、窗口句柄、线程 ID,并枚举显示控件的进程的所有已加载进程。
使用它可以检查控件是自定义控件还是从标准Windows控件派生的控件。现在你可以窥探一些共享软件,找到表象下的垃圾。是的,大多数容易崩溃的程序都是基于对标准Windows控件的大规模子类化构建的。这有时会导致内存泄漏和不必要的内存加载以及处理器时间浪费。
这也提供了更多关于某些共享软件的知识,这些共享软件显然会加载有时位于System32目录和其他目录中的模块。这为我提供了更多的知识来化解恶意的不请自来的隐形安装(共享软件/免费软件附带的病毒)。
使用方法 / 帮助
高级类探测器提供有关窗口句柄(如果句柄不可用,则显示线程 ID)、启动此窗口的进程、最大内存和当前内存使用情况的信息,并列出进程加载的所有模块。您可以右键单击窗口以停止钩子。然后您可以双击模块名称以查看其属性页。
它是如何工作的!
它使用鼠标钩子来监视所有鼠标消息。事实上,使用鼠标钩子,所有鼠标事件都会通过钩子过程路由。它为所有正在运行的线程安装全局鼠标钩子。为此,它要求钩子过程位于 DLL 中。 Hook.dll 具有钩子过程。它用 Win32 ASM (MASM) 编写,因此它可以工作,并且加载的模块大小保持在最小。DLL 的小尺寸是一项要求,因为每个过程都会加载钩子 dll,当被鼠标钩子探测时。(Windows 98 甚至 windows 2000 我认为在探测的进程终止之前都不会卸载钩子 dll。)
我的 Hook 想法来自 Icezelion MASM32 教程。
- MASM 网站 http://www.movsd.com/
- ICZELION MASM 教程:Iczelion 的 Win32 汇编主页:(http://win32asm.cjb.net/)
- Win32 ASM 的最佳 RAD IDE "RADAsm",网址为 http://www.visualassembler.com/
免责声明
此代码和可执行文件并不声称是完美的和没有错误的。它也不提供任何保证,甚至不提供任何适用于任何用途(包括“适销性”)的隐含保证。
如果写作中有任何错误,敬请谅解
我目前正在寻找一些人加入我的开源项目。 如果有人想贡献,非常欢迎。 我的项目不是个人的,欢迎大家... 我正在开发一个用于 C/C++ 的多平台 IDE,它有自己的类库、API 和类,使用纯 C/C++。
请访问:http://thunder.sourceforge.net/了解详情