QQ/微信windows端防撤回

2022-02-10

PS:更新于2023-12-10日

起因是我跟我朋友聊天的时候,他撤回了东西,之后问他,他又不说,还卖关子,我特别生气 于是搜了一下QQ的防撤回

还真搜到了,关于qq防撤回的函数都在IM.dll的动态库中,我们只要修改了它的相关函数即可以让朋友闻风丧胆,看他们以后谁撤回!!!

捏妈妈滴!

相关环境

IDA(带keypatch)

QQ

单独聊天撤回

ida打开IM.dll 搜索字符串 “bytes_reserved” 可以看的两个一样的字符串

可能大家会好奇为什么有两个一模一样的,根据我的猜测 这两个字符串 一个用于你撤回消息时 一个用于别人撤回消息时

其中aBytesReserved_0为标签的是别人撤回消息时使用的字符串。

我们要做的是修改aBytesReserved_0为标签被使用的位置

这里在push ecx的位置开始修改汇编,使其直接跳到test eax,eax的位置

修改完毕即可

群聊撤回

搜索”bytes_userdef”字符串 同样有2个 我们要修改的是aBytesUserdef_0标签被使用的位置

但是注意,beytes_unserdef字符串被引用了2次,这2次都要修改

2次的操作一样,汇编代码也类似,只说其中一个的修改

从 push offset aBytesUserdef_0开始,修改,使其直接跳转到test eax,eax的位置。

修改后如下

对另外一个位置进行相同操作。

最终

完成后保存到IM.DLL中 最后关闭QQ 把你修改后的IM.DLL覆盖QQ文件夹中原本的IM.DLL 重新打开后完成!

微信

微信的撤回功能在WeChatWin.dll里
ida打开,搜索字符串”revokemsg”
重点是revokemsg前一个jz跳转指令改为jnz
最新版本的微信是3.9.8.15,我发现他们版本出现了更替。
修改的位置不再是revokemsg,而是L'datastatus',注意,是UTF-16格式下的datastatus,搜索方法:
在ida 的string界面中右键,选择setup
选中Unicode C-Style (16bits)
这样可以在string中搜索到unicode-16的字符串

把这个字符串下面的jz指令改为jnz即可完成防撤回功能