吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 6256|回复: 64
上一主题 下一主题

[原创] WeTool逆向:借用别人的成果 打造自己的程序

  [复制链接]
跳转到指定楼层
楼主
鬼手56 发表于 2019-8-10 10:36 回帖奖励

什么是WeTool

百度直接搜索WeTool就可直接找到WeTool官方网站

这是一款专业的微信粉丝和社群的管理工具,是目前市面上微信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核心模块

我们打开WeTool,并登陆微信。WeTool分为两个部分,一个是客户端,就是现在大家所看到的这个,负责显示UI和数据,还有一个是服务端,负责从微信进程获取数据,并将数据传到客户端。WeTool的核心功能都在服务端里面。所以我们要做的就是找到WeTool的核心模块。

打开PCHunter,选中微信进程,右键->查看进程模块,并按照模块路径排序

接着在这里我们看到了一个特殊的东西,之所以特殊是因为这个模块的路径既不属于微信,也不属于系统dll

接着右键->定位到模块文件,找到这模块所在的路径。这个文件夹的名字WeToolCore其实已经暴露了这个dll的功能了。没错,这个就是我们要找的WeTool的核心模块。

这个文件的原始路径是在WeTool文件夹下的WeChatVersion这个子文件夹下。WeTool启动后,会先检测当前微信版本,并根据不同的微信版本注入不同的dll。

这里我们选择分析2.6.5.52这个版本的WeChatHelp。

分析WeChatHelp

接下来我们用IDA载入WeChatHelp

在左侧的函数窗口,能直接看到一堆带有名字的函数。之所以能看到这些带有名字的函数,是因为WeTool将这些函数作为接口导出了

我们可以使用LoadPE查看其导出函数。

分析SendMsg函数

接下来,为了和微信逆向的过程进行对比,我们选择分析SendMsg这个函数,双击SendMsg,并按F5查看伪代码。

这里将一个全局变量赋给了lParam,并且调用SendMessage,参数为lParam和0x4A。根据之前我们学习过的WM_COPYDATA通信模型,很容易就能看出这里并不是真正的SendMsg函数,而是和客户端进行通信的函数。

那么怎么找到真正的SendMsg函数呢

选中赋值给lParam的这个常量,右键,跳转到交叉引用

选择第二个调用

这里实际上是在判断lParam的消息类型是否是发送消息,如果是则调用sub_100050F0发送文本消息,如果要翻译成源码,就是这个样子

接下来进入sub_100050F0这个函数

重点关注和数字相关的地方,比如0x2EB4E0。接着用OD附加微信(记得退掉WeTool)

用RVA的方式跳转到WeChatWin模块0x2EB4E0的地方,下断点

然后随便发送一条消息,程序断下

接着通过堆栈,找到上一层返回地址,下断点,让程序再次断下,分析函数参数

此时edx指向消息接收者的微信ID

ebx指向消息内容

那么要想确定这个是不是发送消息的call,只需要修改发送的消息内容。接着F9运行

此时消息内容已经被修改,我们就已经找到了发送消息的call。

这里为了节省篇幅我只分析了SendMsg函数内的一个地址,事实上,只要是函数内有的偏移,都需要逐个排查一遍,一个多多个其实没什么差别,只不过多花点时间而已。

WeTool逆向和微信逆向的对比

微信逆向

请看我上一篇文章,PCXX逆向:发送与接收消息的分析与代码实现:https://blog.csdn.net/qq_38474570/article/details/93339861

这里我们找到发送消息的接口,总共需要以下几步:

  1. 寻找切入点:消息内容
  2. 给消息内容下内存访问断点,栈回溯分析
  3. 验证是否是发送消息的call

WeTool逆向

而WeTool逆向则完全不同,只需要两步

  1. 找到函数内的所有偏移
  2. 逐个排查偏移,并最终确定call

明显直接逆向WeTool会比逆向微信要省很多时间。特别是在一些不可控的情况,比如找不到切入点,无法确定是不是关键call等等。

方法扩展

只要掌握了上面的方法,就能搞定WeChatHelp里导出的所有函数。这些你都可以直接拿过来,变成自己的程序。事实上我的微信机器人,其中百分之三十的功能就是来自于WeChatHelp。

最后 附上WeTool安装包和微信机器人的成品地址

链接:https://pan.baidu.com/s/1GHjFhkdlUCxjIRfwyo89sA
提取码:d5v6

https://github.com/TonyChen56/WeChatRobot

免费评分

参与人数 43威望 +1 吾爱币 +43 热心值 +40 收起 理由
hlink1021 + 1 + 1 我很赞同!
Z7Y3lToZ + 1 大神厉害!
wu775825 + 1 + 1 热心回复!
gypsy21 + 1 谢谢@Thanks!
艾泽瑞拉 + 1 热心回复!
yanjie1065 + 1 + 1 谢谢@Thanks!
hash多多 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
xixz2048 + 1 币不多,给兄弟个热心,很厉害,为你所用
kingfu大量 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
skrboy + 1 我很赞同!虽然还一脸懵逼
jsnjfz + 1 + 1 谢谢@Thanks!
namezs + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
欧雨鹏 + 1 + 1 用心讨论,共获提升!
fashion111 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
wolfchan + 1 + 1 谢谢@Thanks!
猫灵夜一 + 1 + 1 谢谢@Thanks!
微星wxz + 1 + 1 我很赞同!
X1737068462 + 1 谢谢@Thanks!
努力的小白 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
klise + 1 + 1 鼓励转贴优秀软件安全工具和文档!
muyanNeo + 1 + 1 用心讨论,共获提升!
cndmad + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zzzkc + 1 谢谢@Thanks!
冥界3大法王 + 1 你看看人家,这就是差距啊,还不赶紧去反省~~
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dns2018 + 1 我很赞同!
luojp52pojie520 + 1 + 1 多谢分享
qaz003 + 1 + 1 别让我再见到你,见一次赞一次 ^_^
UniqueLegend + 1 + 1 用心讨论,共获提升!
小强66 + 1 + 1 大神,能不能给个微信2.6.8.52版本
52pj8089 + 1 + 1 热心回复!
凯咪 + 1 + 1 感谢大佬开源 致敬
w947095136 + 1 + 1 真的是好东西,必须赞。不过小心被WeTool 告侵权 我在闲鱼卖这个破解版都.
Jack + 1 大佬就是NB
jeamychen + 1 + 1 谢谢@Thanks!
林夕丶 + 1 + 1 论坛大佬真是猛的一批
reetin + 1 + 1 用心讨论,共获提升!
温恒轩 + 1 + 1 我很赞同!
柑桔 + 1 + 1 我很赞同!
guye燊 + 1 + 1 用心讨论,共获提升!
Monitor + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
po1718 + 3 + 1 很好的教材.谢谢大神无私分享!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 鬼手56 发表于 2019-8-10 13:56 <
池塘春草 发表于 2019-8-10 13:41
用人家什么成果了,怎么是个标题党

那么多偏移 不是人家找出来的 难道是你找出来的?看不懂就别瞎逼逼
推荐
池塘春草 发表于 2019-8-10 13:41
沙发
zrf1980 发表于 2019-8-10 10:54
3#
po1718 发表于 2019-8-10 10:59
很好的教材.学习中!谢谢大神无私分享!
4#
洞见未来 发表于 2019-8-10 11:02
高产啊,话说这家公司不怕进去吗?身边有朋友公司因为爬了另外一家公司的接口数据都进去的。
5#
头发几何体 发表于 2019-8-10 11:11
技术贴,虽然我不懂,但是感谢楼主的分享和付出~~
6#
柑桔 发表于 2019-8-10 11:24
感谢楼主的无私奉献
7#
jeamychen 发表于 2019-8-10 13:09
小白表示没看懂,但是看出作者很用心,谢谢分享
8#
smith168668 发表于 2019-8-10 13:20
很不错的东西
9#
azhuyu 发表于 2019-8-10 13:24
厉害  哈哈 先收藏
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-9-23 23:03

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表