笔者作为信息安全行业的一名web狗,自知web安全领域相对来说过于狭隘,必须要寻求新的突破,偶然情况下接触到了逆向,因此决定踏上逆向工程这条漫漫长路。
作为一名刚刚接触逆向的小白,对于TIM的防撤回是在网上相关文章帮助下实现的,学习相关思路,独自完成了微信pc端的防撤回功能。
本次实验使用工具:notepad++,x32dbg,PDIE
TIM防撤回
信息收集
信息收集在web安全中十分重要,收集到的信息是否全面完整,关联对web的渗透能走多远。
同理,逆向工程对于信息收集的要求更为严格,一旦收集到错误的信息,就需要花费大量的时间去验证错误。
本次实验的目标是完成TIM的信息防撤回,重点在于对数据的撤销和撤回。
使用百度翻译,查看其对应英文用法。
已经关键词:revoke,cancel,rescind,withdraw
使用notepad++查找程序文件夹关键字。
有两个动态库与消息撤回有关,IM.dll和MsgMgr.dll。其它查询到的字符串,并没有涉及消息。因此优先分析IM.dll和MsgMgr.dll。
分析查询到的文件
使用PDIE查看IM.dll和MsgMgr.dll文件的输出表。
其中
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
这四个函数是COM组件的标配。(COM组件是windows下抽象于二进制层的API接口,可以适应各种编程语言,包括C++,C#,VB等,比SDK API适应性更强)
而MsgMgr.dll中只有COM组建的输出,因此优先分析IM.dll
使用32dbg分析IM.dll
首先登录TIM,使用32dbg附加到TIM的进程上
在符号栏功能下左下角搜索栏搜索im.all,并且双击进入。
搜索im.dll中的所有字符串。
image.png搜索关键字revoke
由于撤销的字符串数量过多,因此采用全部断点,分析运行程序。
右键选择
一直点击运行,直到左下角的暂停变为running状态。
tips(逆向中的设置断点分析程序和web渗透测试中使用burp抓包分析数据包分析思路一致)
寻找撤销CALL
使用另一个qq对tim测试qq发送信息,并且撤销。
左下角显示显示暂停表示断点成功,查看断点程序。
对附近的所有call进行测试,可以使用nop替代call内容,排查真正起作用的call。
当发现使用nop替代6060E091的数据时,信息不会被撤回,因此判断此处为撤回功能的关键call。
因此直接使用nop替换存在一定风险,比如说改位置还可能被其它位置调用,有可能导致程序错误,因此在大多数情况下都是使用jmp指令跳过关键call。
右键补丁,修补文件,替换掉原本的im.dll,就完成了对TIM的防撤回。
TIM对群信息的防撤回,发送群信息,并撤回进行测试。更改位置为:
同样使用jmp跳过撤销指令。
微信防撤回
微信防撤回的实现过程和TIM思路一致,只不过关键字略有不同。
笔者对中间过程就不再赘述,只是把关键位置说明一下。
通过收集相关信息
发现微信的撤回指令在文件WeChatWin.dll中
关键为revokemsg
设置断点
经过测试,6cE1774C处的call为关键位置。
使用jmp命令跳过执行。
经测试,微信pc端,个人消息撤回和群消息撤回使用的同一个call。
保存补丁替换微信目录下的同名文件即可实现微信防撤回。
总结
防撤销的原理非常简单,无论是TIM还是微信聊天记录都是保存在本地的,而防撤回就是修改本地聊天信息的代码,让对方撤销之后,本地仍然可以显示出来。
作者作为一个汇编还没有学完的逆向新手,对实验中的一些数据和操作暂时也解释不清楚,只能希望自己可以从理论和实践双向出发来学习逆向。若文章中有不正确的地方欢迎修正
网友评论