171116 逆向-初探PCQQ防撤回

1625-5 王子昂 总结《2017年11月16日》 【连续第412天总结】
A. PCQQ防撤回
B.
修正:
后续实验中发现猜测的改动点错误,实际上真正起作用的是第二处改动点。
============================================================
目前网络上只有QQ小清新和NTRQQ这两款补丁可以对PC端的QQ进行防撤回。
安卓端和MAC端的QQ有一些比较详细的阐述,比如https://www.cnblogs.com/tututu-patch/p/Mac_*****.html
而PC端的上述两款补丁的开发者都没有开源和相关文章,于是只能自己鼓捣着尝试

首先从原理上来说
撤回消息的机制应该是用户点击撤回,本地先行执行撤回功能,然后向服务器发送撤回消息-服务器转发至相关用户的客户端-客户端接收到消息以后进行撤回

撤回功能的实质是删除本地数据库内对应的消息

那么可行的方案有几种:
1.拦截服务器发送的撤回消息,这需要分析QQ的协议,难度比较大
2.HOOK本地客户端接收到消息以后的删除代码

由于QQ反调太过强大,无法动态尝试,于是只好站在前人的肩膀上,对小清新补丁的实现进行分析
首先信息收集,可以确认撤回功能的实现存在于IM.dll中
小清新补丁加了SE壳,无力脱╮(╯_╰)╭
于是只好从效果来观察:
(QQ竟然不允许多个客户端存在,下次我就把你给逆了=A=)
首先重装QQ,打上反校验补丁后,用小清新补丁进行修改,注意加上备份
然后对备份文件和修改文件进行二进制对比:
171116 逆向-初探PCQQ防撤回
一共有4字节差异,两字节在这里
在IDA中进行定位:
171116 逆向-初探PCQQ防撤回
看起来是利用解码失败的错误函数,来令引擎忽视撤回

另外两字节则是把一个函数直接全部NOP掉了
171116 逆向-初探PCQQ防撤回
看作者的意思似乎是反收集信息,不太清楚……

于是自己手动**之前的函数也同样可行了

PS:
直接字符串查找Revoke,Recall,可以得到
171116 逆向-初探PCQQ防撤回
猜测DoRevoke应该是自己撤回,Buddy代表私聊,Group代表群组,Disc大概是删除本地数据……?
171116 逆向-初探PCQQ防撤回
recall则是文件相关的撤回功能

这些字符串都是用来记录Log的,足以见得Log函数对****有多大帮助……OTZ

本来想找类进行更深入探究的,然而所有名称相关的字符串全部被抹掉了……无能为力

C. 明日计划
APK相关学习