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
即可完成防撤回功能