: :其他软件 2019-08-14 18:04:42
工具:http://www.xrwcn.com/down/1746.html
前置知识&基于WM_COPYDATA的消息模型
进程通讯相关知识
WeTool的客户端和服务端之间的采用WM_COPYDATA的方式进行进程通讯。要想逆向WeTool,就必须理解WM_COPYDATA消息模型。
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存
使用SendMessage向另一进程发送WM_COPYDATA消息
比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一种方法
WM_COPYDATA的相关知识
我们可以用下面的函数发送WM_COPYDATA消息
其中,WM_COPYDATA对应的十六进制数为0x4A,wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
typedef struct tagCOPYDATASTRUCT
{
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
其中dwData既可以是数组,也可以是结构体。能发送这两种数据类型,其实就已经满足大部分的进程通讯需求了。
WM_COPYDATA的缺点
这种通讯方式有一个缺点:接收方必须是窗口程序。所以要想实现exe和dll之间的通信,就必须在dll里注册一个窗口类,并将其显示方式设置为隐藏。
示例代码
发送端:
接收端:COPYDATASTRUCT show_qrpic;
show_qrpic.dwData = WM_ShowQrPicture;
show_qrpic.cbData = 0;
show_qrpic.lpData = NULL;
//发送消息
::SendMessage(hWeChatHelp, WM_COPYDATA, (WPARAM)hWeChatHelp, (LPARAM)&show_qrpic);
逆向WeToolLRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
if (Message == WM_COPYDATA)
{
COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT*)lParam;
switch (pCopyData->dwData)
{
//显示二维码
case WM_ShowQrPicture:
{
GotoQrCode();
HookQrCode(QrCodeOffset);
}
break;
}
}
09-22微信小视频拍摄
01-10基于微信小程序图书管理系统代码
01-10外卖微信小程序源码
01-02微信防撤回实例
12-31python实现屏幕水印软件功能
12-28今天吃什么微信小程序项目源码
12-28微信机器人项目源码实例
12-27定时提醒软件功能
11-21PPT绘制微信头像,形状剪除使用方法
10-25微信统计被自己屏蔽掉的朋友圈总数
09-07微信重磅更新,视频号能发1小时长的视频了
04-09微信突然更新这功能我们等了9年
11-26PC版微信3.0.0.57防撤回补丁
11-07C++企业微信双开小工具