1625-5 王子昂 总结《2017年11月18日》 【连续第414天总结】
A. PCQQ防撤回 (2)
B.

QQ(PC端)防撤回

(测试版本8.9.5)

应用背景

QQ为手误操作等理由提供了弥补选项–撤回。
撤回功能本是方便不小心打错字、发错地方等失误而提供的,但是有些人却利用它来逃避责任,例如打下欠条、做出承诺后撤回,发布广告甚至是反动消息后撤回

本项目就是为了防止成员传播反动、色情等违法违规消息或发布广告等垃圾消息后撤回,便于管理员进行管理而开展的

原理

撤回机制

Created with Raphaël 2.1.0点击撤回客户端删除本地数据库中的消息   并向服务器发出请求服务器接收到请求向其他客户端发送撤回请求其他客户端接收到请求删除本地数据库中的消息消息被撤回

目标

使本地数据库中的消息不被删除,从而防撤回

方法

  • 拦截服务器发送的撤回消息,这需要分析QQ的协议,难度比较大
  • 修改本地客户端接收到消息以后的代码

操作步骤

搜索相关代码

利用工具UltraEdit搜索文件夹内所有Dll,查找有Recall、Revoke字符出现的Dll
171118 逆向-再探QQ防撤回

171118 逆向-再探QQ防撤回
可以看到出现次数较多的主要是IM.dll和MsgMgr.dll两个文件,于是优先对它们进行分析

MsgMgr.dll

查询可知它是负责消息管理器相关的功能,与消息框的撤回无关

IM.dll

查询未果,进行逆向分析
查找字符串发现以下内容
171118 逆向-再探QQ防撤回

逐个检验可知DoRevokexxx处为本地发起撤回的相关功能,OnRevoke处则是具体实现撤回的功能(包括撤回自己的消息和别人的消息被撤回)

对本地消息进行处理的函数分为4个子函数
171118 逆向-再探QQ防撤回

负责撤回别人消息的关键函数为
171118 逆向-再探QQ防撤回
将其**掉(直接RETN 10返回)即可实现撤回功能失效

其他3个函数还包括撤回消息的回复、撤回自己消息等功能,进行**的话还可以实现保留本地消息的同时,发出撤回他人消息请求的效果

效果截图

171118 逆向-再探QQ防撤回

171118 逆向-再探QQ防撤回

可以看到,无论是对方的撤回,还是自己的撤回,都可以在本地拦截下数据删除,而向服务器正常发出消息

结论

缺陷

  • QQ程序本身没有加壳,从而导致逆向可以直接查看源代码

  • Log记录都是明文,从而使得逆向者在不具备符号文件来参考函数名、变量名时,可以通过明文Log来索引定位关键代码

修复方法

  • 对程序加壳,从而对抗****

  • 将Log记录中的字符进行简单加密,使用时再解密

相关文章:

  • 2021-04-09
  • 2021-09-11
  • 2021-04-26
  • 2021-08-12
  • 2021-04-15
  • 2021-11-08
  • 2022-12-23
  • 2021-11-02
猜你喜欢
  • 2021-07-21
  • 2021-08-29
  • 2021-12-23
  • 2021-04-13
  • 2021-04-26
  • 2022-12-23
相关资源
相似解决方案