TIM防撤回实现
作为一个常年混迹各种群的资深潜水党,每次翻看聊天记录的时候都能发现一堆的撤回信息,看着非常不舒服,并且网上也有很多的防撤回例子提供学习,所以就打算自己也动手尝试做一个防撤回的功能。
-
第一步通过notepad在bin目录下的所有dll中搜索revoke关键字
-
然后我们就可以上od或x32dbg对这些DLL下断找CALL了,我这里使用的是x32dbg,因为它的搜索过滤比OD要舒服很多
- 打开软件,附加进程,附加之后会自动断下来,记得F9
- 在模块(快捷键:<kbd>Crtl</kbd>+<kbd>E</kbd>)中进入我们之前找到的DLL
- 在模块内搜索字符串
revoke ,看看有没有比较可疑的地方,下断进行尝试
这里有个EnableMsgRevokeMenuItem ,看起来应该是软件初始化之类的,不管他,全部都下断点试试
- 小号给自己发条消息并撤回,断点没反应,那就重复此步骤,在下一个模块内继续搜索下断,直到断下来
- 找到关键位置,进行具体分析
- 在
im.dll 中我们通过revoke 发现了大量的关键字
L"DoRevokeBuddyMessage failed to get msg_info." 撤回好友消息失败的日志,基本可以确定就撤回就和这个模块相关了,继续看看下面的字符
这三个有重大嫌疑啊,从上到下分别是 好友(buddy)、讨论组(discussion)、群(group)消息撤回,三个都下断点,进行尝试。
- 小号发消息并撤回,成功断在了
5FBBDE65:OnNotifyBuddyMessageRevoked(pNotifyMsgBody, pDataExtraInfo) 。
- 单步往下,很快就可以看到一个大跳转,不过看了一下跳转的地址
5FBBDFA2 ,是直接过了返回,再往下那块就是讨论组的撤回了,应该不是这里,继续往下
- 来到第一个call,<kbd>F7</kbd>跟进
- 发现两个大跳转,直接跳转到了返回处
-
直接改之,<kbd>F9</kbd>,然后程序疯狂异常,无奈重启程序
-
重启过程中想了下,都确定了这里就是实现撤回的函数,那直接返回应该也行的
-
直接在函数入口处改返回
push ebp 改为ret 8
- 小号发消息撤回试试
-
第一张是电脑截图,第二张是手机截图,成功解决~
-
依法修改群消息的撤回
成功。这里我是直接用的讨论组,因为我之前调试的时候发现讨论组撤回是直接走的群撤回逻辑,也就是说之前发现的三个关键处只需要修改两个就可以实现了,中间那个并没有发现哪里有调用
- 修改完成就直接打补丁呗。<kbd>Crtl</kbd>+<kbd>p</kbd>
- 退出tim,将保存的文件替换掉原来的文件,记得备份,至此大功告成~
第一次发帖,有什么问题还望多多指教,感谢!
参考资料: https://www.52pojie.cn/thread-702082-1-1.html
|