基于HOOK技术和MMF的Windows密码渗透技术研究(3)
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:
或QQ:
处理(尽可能给您提供完整文档),感谢您的支持与谅解。

在解决进程间的通信问题方面,WM_COPYDATA消息是一个非常好的工具,可以节省程序员的许多时间。
当内存映像文件被建立时,系统就发送消息来填充它。然后系统再转回到最初调用SendMessage的进程,从共享内存映像文件中将数据复制到所指定的缓冲区中,然后从SendMessage调用返回。
对于系统已经知道的消息,发送消息时都可以按相应的方式来处理。如果要建立自己的(WM_USER+x)消息,并从一个进程向另一个进程的窗口发送,那又会怎么样?系统并不知道用户要用内存映像文件并在发送消息时改变指针。为此,微软建立了一个特殊的窗口消息, WM_COPYDATA以解决这个问题:
COPYDATASTRUCT cds;
SendMessage(hwndReceiver,WM_COPYDATA,(WPARAM)hwndSender,(LPARAM)&cds);
COPYDATASTRUCT是一个结构,定义在winuser.h文件中,形式如下面的样子:
Typedef struct tagCOPYDATASTRUCT{
ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;
}COPYDATASTRUCT;
当一个进程要向另一个进程的窗口发送一些数据时,必须先初始化COPYDATASTRUCT结构。数据成员dwData是一个备用的数据项,可以存放任何值。例如,用户有可能向另外的进程发送不同类型或不同类别的数据。可以用这个数据来指出要发送数据的内容。cbData数据成员规定了向另外的进程发送的字节数,lpData数据成员指向要发送的第一个字节。lpData所指向的地址,当然在发送进程的地址空间中。
当SendMessage看到要发送一个WM_COPYDATA消息时,它建立一个内存映像文件,大小是cbData字节,并从发送进程的地址空间中向这个内存映像文件中复制数据。然后再向目的窗口发送消息。在接收消息的窗口过程处理这个消息时,lParam参数指向已在接收进程地址空间的一个COPYDATASTRUCT结构。这个结构的lpData成员指向接收进程地址空间中的共享内存映像文件的视图。
8 关于WM_COPYDATA消息,应该注意三个重要问题
1)只能发送这个消息,不能登记这个消息。不能登记一个WM_COPYDATA消息,因为在接收消息的窗口过程处理完消息之后,系统必须释放内存映像文件。如果登记这个消息,系统不知道这个消息何时被处理,所以也不能释放复制的内存块。
2)系统从另外的进程的地址空间中复制数据要花费一些时间。所以不应该让发送程序中运行的其他线程修改这个内存块,直到SendMessage调用返回。
3)利用WM_COPYDATA消息,可以实现1 6位和3 2位之间的通信。它也能实现3 2位与6 4位之间的通信。这是使新程序同旧程序交流的便捷方法。
9 重要代码及注解
9.1钩子函数void ExtractPassword(const HWND hWnd, const HWND hPwdSpyWnd),该函数是获取密码的主要函数
TCHAR szBuffer[256] = {_T('\0')};//分配一个缓冲区
SendMessage(hWnd,WM_GETTEXT,//向注入钩子进程发消息获得密码文本
sizeof(szBuffer)/sizeof(TCHAR), (LPARAM)szBuffer);//保存在缓冲区中
COPYDATASTRUCT cds = {0};//定义一个cds结构体
cds.dwData = (DWORD)hWnd;//dwData保存该进程句柄
cds.cbData = (lstrlen(szBuffer) + 1) * sizeof (TCHAR); //cbData保存数据长度
cds.lpData = szBuffer;//lpData指向缓冲首地址
SendMessage(hPwdSpyWnd,WM_COPYDATA,
(WPARAM)hWnd, (LPARAM)&cds);//利用WM_COPY DATA消息给获取密码进程发送密码
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说计算机基于HOOK技术和MMF的Windows密码渗透技术研究(3)在线全文阅读。
基于HOOK技术和MMF的Windows密码渗透技术研究(3).doc
将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
下载失败或者文档不完整,请联系客服人员解决!