文章目录
什么是WeTool
百度直接搜索WeTools就可直接找到WeTools官方网站
这是一款专业的微信粉丝和社群的管理工具,是目前市面上微信HOOK做的非常不错的一款产品。不管是从产品设计角度还是用户体验角度或者是产品安全角度来看都无可挑剔。具体功能各位可以去官网看相关介绍,这里就不多做说明。
目前官网已经不提供免费版本下载了,我会在文末放出免费版本的安装包。
前置知识&基于WM_COPYDATA的消息模型
进程通讯相关知识
WeTool的客户端和服务端之间的采用WM_COPYDATA的方式进行进程通讯。要想逆向WeTool,就必须理解WM_COPYDATA消息模型。
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存
使用SendMessage向另一进程发送WM_COPYDATA消息
比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一种方法
WM_COPYDATA的相关知识
我们可以用下面的函数发送WM_COPYDATA消息
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA对应的十六进制数为0x4A,wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
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);
接收端:
LRESULT 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; } }
逆向WeTool
定位WeTool核心模块
选择第二个调用
只要掌握了上面的方法,就能搞定WeChatHelp里导出的所有函数。这些你都可以直接拿过来,变成自己的程序。事实上我的微信机器人,其中百分之三十的功能就是来自于WeChatHelp。
最后 附上WeTool安装包和微信机器人的成品地址
链接:https://pan.baidu.com/s/1GHjFhkdlUCxjIRfwyo89sA
提取码:d5v6
https://github.com/TonyChen56/WeChatRobot