今天无意之中看到了一个帖子,谈到了有关微信消息撤回的。突发奇想实现一下,以后就不怕错过朋友的消息了。
首先介绍一下基本思路,由于微信采用的是CS端原理,所有的数据请求均通过服务器,客户端只是响应指令而已。
A向B发送消息的原理大致是这样的:
-
A 发送数据给服务器,并说明要发送给B
-
服务器接收A的发送指令,将消息转发给B
-
B 接收服务器消息,并解析为来自A
A撤回已发送的消息的远离大概是这样的:
-
A 发送撤回消息指令给服务器,并说明要撤回发给B的某条消息
-
服务器接收A的撤回指令指令,将撤回消息转发给B
-
B 接收服务器的撤销某条消息的指令,删除此条消息
基于最新版的微信版本V3.8.1.26 做实验。
我们在PC端查看wechat软件安装路径是可以看到好多dll文件,DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。根据网络上查找到的资料,其中 WeChat Win.dll 是决定消息撤回功能的主要文件。
为了修改dll文件,我们还需要借助x32dgb/x64gdb工具。
话不多说,开始上干货。
- 登录微信PC版
- 打开x32dgb工具
- 附加wechat进程。File -> 附加,选择wechat进程
- 查找符号
- 查找关键字“revokemsg”
在当前界面空白处右键 -> 搜索范围 -> 当前模块 -> 字符串引用,在搜索框搜索关键字“revokemsg”
- 修改汇编指令
鼠标左键选中 je xxxxxx 这一行,右键 -> 汇编,把 je 修改为 jmp 即可, 然后点击确定即可。
7. 生成补丁文件,文件 -> 补丁文件 -> 修补文件
生成修补文件,替换原 wechatwin.dll 文件
8. 关闭x32dbg软件,重新运行wechat软件
效果验证:
我们再电脑端登录B用户(已更新wechatwin.dll 文件),采用另外的终端作为A用户。A向B发送一条消息“你好”,然后再发送一条消息“good”,然后撤回“good”。
A端界面显示如图:
B端显示界面如图:
至此,基于WeChat版本V3.8.1.26的防撤销功能已经做好。
相关目标文件见链接: https://download.csdn.net/download/weixin_43608153/87343781