【逆向】使用x64dbg实现qq私聊与群消息防撤回

简介: 使用x32dbg调试32位QQ,通过附加QQ进程并禁用断点。搜索im.dll,找到消息撤回函数,设断点。发测试消息并观察中断点,定位到0X0F01D112C。用NOP替换疑似撤回函数的CALL指令,测试成功后保存为补丁,替换原IM.dll文件,完成防撤回。群聊防撤回类似,需单独找对应函数。注意仅防本地撤回,服务器上仍会显示撤回。

由于qq是32位的所以需要用x32dbg调试,打开x32dbg。

,

开启qq后打开想要用来测试的聊天窗口,因为这里首先进行私聊的防撤回,所以打开的是用户的聊天窗口。

image-20230416002915531

然后回到x32dbg,点击文件->附加,找到聊天窗口的进程,点击附加。

image-20230416002746679

附加后先到断点选项卡里禁用所有断点,然后在工具栏里找到调试,然后选择运行,让程序正常运行。

image-20230416003625946

image-20230416003518717

接下来就是开始找私聊消息撤回函数的地址,首先在符号选项卡里找到im.dll,可以用过滤器快速找到。

image-20230416003938760

双击它,然后cpu选项卡就会显示im.dll的汇编,我们要找的撤回函数就在里面。

image-20230416123645261

在界面右键,然后找到搜索->当前模块->字符串,点击它进入引用选项卡。

image-20230416004338904

image-20230416004550136

我们搜索revoke,发现出现了很多反汇编。

全打上断点。

image-20230416123715414

用小号发个消息,然后撤回,发现中断在0X0F01D112C。

image-20230416123901510

点进去看看。

image-20230416124003847

接下来就是测测附近的call,F8往下走看看经过了哪些call,然后可以直接用nop替换或者用jmp跳过也可以用ret来代替这个call的返回值,来确定是否是撤回函数,这个是需要自己测试,我在这里说一下如何用nop替换,如下框起来的call就是我们要替换的。

image-20230416124315997

选中它然后按空格,我们就可以在输入框里修改成自己想改成的汇编指令。

image-20230416124456549

直接改成nop,最好选上用nop填充这样比较直观。

image-20230416124614161

替换后的。

image-20230416124700496

然后我们将断点全部禁用,再F9让QQ正常运行。如图,消息并没有撤回,这就说明我们找到了撤回函数,并让它失效了。

image-20230416124755351

然后就可以打补丁,用打了补丁的IM.dll去替换原本的IM.dll。在修改处右键然后选择补丁。

image-20230416125146349

选择修补文件,并将文件名保存为IM.dll,注意大小写。

image-20230416125307305

之后用IM.dll替换QQ根目录/bin下的IM.dll就完成了,重启QQ后私聊消息是不会撤回的,记得备份一下原来的IM.dll。

群聊消息撤回也是同理,可以在这个补丁的基础上继续找到群聊消息撤回函数,步骤和之前一样,就是要注意群聊消息函数比较难找,最好是从上往下一个个的排除,有耐心肯定会找得到的。

那么,这个记录也就完事了,有什么问题可以在评论区问我,不发成品补丁哈,怕律师函。

还有就是这个只是防本地消息的撤回,服务器上还是撤回了的,所以在其他设备上看还是会显示消息已撤回。

相关文章
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
994 1
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
164091 65
|
人工智能 自然语言处理 安全
claude国内怎么用?教你两种claude国内使用方法!
Claude AI 是由 Anthropic 公司开发的一款新一代 AI 助手,旨在成为更安全、更友好、更可靠的 AI 系统。它基于 Anthropic 对 AI 安全性的深入研究,并采用 “Constitutional AI” (宪法式 AI) 的训练方法,使其行为更符合人类价值观,并减少有害输出的可能性。 🛡️
|
机器人 API 数据安全/隐私保护
QQ机器人插件源码,自动回复聊天机器人,python源码分享
消息接收处理:通过Flask搭建HTTP服务接收go-cqhttp推送的QQ消息47 智能回复逻辑
|
图形学 开发者
【Unity3D实例-功能-镜头】第三人称视觉-镜头优化
本文介绍了如何在Unity中使用Cinemachine调整第三人称视角镜头,适用于ARPG游戏开发。内容包括调整摄像机Y轴方向与速度、设置转向灵敏度以及实现摄像机跟随角色平移,帮助开发者快速掌握镜头控制技巧。
629 0
新版Jadx 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法
新版Jadx 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法
1045 1
|
编解码 算法 计算机视觉
使用NumPy进行傅里叶变换:基础概念与实践应用
使用NumPy进行傅里叶变换:基础概念与实践应用
540 1
|
机器学习/深度学习 人工智能 并行计算
【AI系统】芯片的编程体系
本文探讨了SIMD与SIMT的区别及联系,分析了SIMT与CUDA编程的关系,深入讨论了GPU在SIMT编程的本质及其与DSA架构的关系。文章还概述了AI芯片的并行分类与并行处理硬件架构,强调了理解AI芯片编程体系的重要性,旨在帮助开发者更高效地利用AI芯片算力,促进生态繁荣。
690 0
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
1490 2