然后我们就可以上od或x32dbg对这些DLL下断找CALL了,我这里使用的是x32dbg,因为它的搜索过滤比OD要舒服很多
打开软件,附加进程,附加之后会自动断下来,记得F9
在模块(快捷键:Crtl+E)中进入我们之前找到的DLL
在模块内搜索字符串revoke,看看有没有比较可疑的地方,下断进行尝试
这里有个EnableMsgRevokeMenuItem,看起来应该是软件初始化之类的,不管他,全部都下断点试试
小号给自己发条消息并撤回,断点没反应,那就重复此步骤,在下一个模块内继续搜索下断,直到断下来
找到关键位置,进行具体分析
在im.dll中我们通过revoke发现了大量的关键字
LDoRevokeBuddyMessage failed to get msg_info.撤回好友消息失败的日志,基本可以确定就撤回就和这个模块相关了,继续看看下面的字符
这三个有重大嫌疑啊,从上到下分别是 好友(buddy)、讨论组(discussion)、群(group)消息撤回,三个都下断点,进行尝试。
小号发消息并撤回,成功断在了5FBBDE65:OnNotifyBuddyMessageRevoked(pNotifyMsgBody, pDataExtraInfo)。
单步往下,很快就可以看到一个大跳转,不过看了一下跳转的地址5FBBDFA2,是直接过了返回,再往下那块就是讨论组的撤回了,应该不是这里,继续往下
来到第一个call,F7跟进
发现两个大跳转,直接跳转到了返回处
直接改之,F9,然后程序疯狂异常,无奈重启程序
重启过程中想了下,都确定了这里就是实现撤回的函数,那直接返回应该也行的
直接在函数入口处改返回
push ebp改为ret 8
小号发消息撤回试试
第一张是电脑截图,第二张是手机截图,成功解决~
依法修改群消息的撤回
成功。这里我是直接用的讨论组,因为我之前调试的时候发现讨论组撤回是直接走的群撤回逻辑,也就是说之前发现的三个关键处只需要修改两个就可以实现了,中间那个并没有发现哪里有调用
修改完成就直接打补丁呗。Crtl+p
退出tim,将保存的文件替换掉原来的文件,记得备份,至此大功告成~