前言:哦吼?暗恋的女生/男生发消息又撤回了?表白没看到怎么办?!今天整理一下PC端QQ、微信防撤回的具体步骤,自己修改dll文件,再也不用担心网络上的dll被植入后门啦!
P.S. 本教程理论上适合目前更新的所有版本QQ/Wechat,但手法有些粗糙。
工具准备
- x32dbg
- PC端Wechat/QQ
QQ防撤回
QQ版本
破解过程
- 运行QQ,打开x32dbg,附加到进程QQ.exe
- 在符号面板搜索im.dll,来到im.dll模块(该模块是负责QQ个人消息和群消息接收的模块)
- 搜索关键字符串:bytes_reserved 和 bytes_userdef
“bytes_reserved”字符串负责个人信息的撤回,“bytes_userdef”字符串负责群消息的撤回。
双击进入第三个字符串,在入口的上一条地址处,修改汇编指令,让其直接到达test eax,eax命令处,这样就避免了消息的撤回。
注意,此处是直接从push im.7A9D7C68处跳转到 test eax,eax
- 保存补丁并导出IM.dll文件进行替换
- 成果图
过程总结
QQ消息撤回的机制并没有进行很好的防御,主要原因在于已经接受到的消息,是储存在本地的,而消息撤回,则是调用函数从本地撤回,只要阻止这个机制就能实现消息的防撤回。由于时间原因,过程中的部分函数的原理没有深究,准备后期再来分析一下,要是能做出一个一体化的exe文件就更好了。总体来说,这个防撤回做的还是很有意思,在过程中能学到很多东西。
微信防撤回
微信版本
破解过程
- 启动微信,打开x32dbg,附加到微信进程。
附加到wechat.exe后,在符号面板找到wechatwin.dll模块(该模块负责微信消息的撤回)
- 在wechatwin.dll模块中寻找revokemsg字符串
"revokemsg"出现次数可能较多,要选择在ChatMgr::RefreshUnReadCountByRevoke下面的第一个(L "< revokemsg >"不算)
- 点击跳转之后把当前位置下的第一个call指令nop掉(该call指令用于撤回消息)
- 保存补丁文件、导出WeChatWin.dll文件并替换原安装目录下的文件
- 成果图
过程总结
微信消息的撤回破解,重点还是在WechatWin.dll文件中,需要通过逆向找到dll文件中执行相关命令的函数,并nop掉(和上述QQ消息防撤回大同小异,一个是jmp跳转,一个是nop)。直接nop的手法还是显得有些粗糙。在查找资料的过程中,看到有些大佬是使用hook技术实现的消息防撤回机制,大感羡慕…在以后的学习过程中,想学习一些hook技术,在微信消息撤回时触发hook机制,以一个对话框的形式展示撤回内容。