早就听闻PC TIM/QQ可以防撤回,不过一直没有去尝试,一直磨蹭到今天。一来迫于懒X晚期,二来我呢也不是程序猿出生,顶多算是个电脑爱好者?对于改程序还是有所畏惧?虽然陌生的我花了2H,不过改完之后还是觉得比较简单的(大神勿喷,我是小白)。

我修改的版本为发布时候的最新版本TIM2.3.1版本,后续是否相同不得而知,从参考页来看,貌似已经支持了很长时间了!

首先,是用几乎万能的编辑软件Notepad++的文件夹搜索功能,查找revoke(撤回)。

具体步骤为Ctrl+F→文件查找→输入TIM所在目录→输入查找目标→全部查找

查找结果如上,我们看到有很多含有revoke字段的配置文件。当然我是看不懂的,不过呢作为我们,不是“吃螃蟹”的人而是站在“巨人的肩膀上”的。尽管看不懂,但是我还是知道需要调试的文件为“IM.DLL”

好,既然知道目标,那我们就开始吧。接着我们需要使用x32_dbg软件来进行调试,下载链接我会给在文后。开始,首先打开TIM和dbg,把TIM附加(文件→附加或Alt+A,弹出对话框选择运行中的TIM)到dbg准备调试;

接着点击符号→左下角搜索im.dll找到IM.DLL模块,双击点击进去其代码空间;

然后右键→搜索→当前模块→字符串→revoke,接着我们给这些地方都加上断点(选中行,键盘点击F2,前方首列变红,即为完成),就可以开始调试了。

选择CPU,在x32_dbg中按F9让tim跑起来,之后再用一个小号给tim登陆的这个号发消息,并撤回,这时候x32_dbg会断下来并有蓝色箭头所指的那一行下图所示,断了后我们按F9让断点位置继续跑一步,我们可以多来几遍,便可发现其中规律。

据我观察在本版本,分为三步,会断在以下代码处,分析附近的代码。测试附近的每一个CALL,找到起作用的CALL。 经过测试附近代码,发现关键函数是以下CALL,我们使用“jmp”语句进行汇编(右键→汇编),跳过目标寄存器,便大功告成。

(由于修改时未截图,这里引用大神的图,以为更加直观。)

最终绕过了撤回函数。记得保存修改,右键→补丁→修补文件保存,备用。替换需要在TIM停止运行后。

PS:群聊和私聊的撤回是2组撤回函数,需要分开调试,再使用上面方法调试一下群聊函数,便大功告成!可惜这种方法并没有撤回提醒……

此种方式方法,TIM和QQ通用,大家可以多试试,相信自己一定能行!

x32_dbg.exe下载链接,链接来自某脚本网站,本人使用时未发现问题,后续出现任何问题,与本人无关!
声明:本文经本人实测后发布。参考“PC TIM/QQ防撤回的研究实现简单的QQ消息防撤回功能,有删改!”


发表评论