很久没有发博文了,也是因为最近没有什么值得讲的,近日有了一些所得,便发出来和大家分享
首先是关于微信协议,以往的协议虽有缺陷,但总体还是可以做一些项目业务的,自微信8.0以来,协议几乎处于不可用状态,以往的一些项目也中断,建议大家逐渐脱离协议,协议的存在会让项目的稳定性十分脆弱
说完了协议,下面就是本片博文的重点了—微信HOOK
前些天因为客户的一个需求,我深入研究了撤回消息的一些操作
常规步骤分为两步
其1.HOOK微信发送消息的消息ID,定位到了消息ID才能正确指引微信要撤回
具体的哪条消息
其2.执行撤回命令的CALL,参数分别为WXID和消息ID
以上就是正常情况下的微信撤回操作了,当然博文不可能到此为止,不然我也不会单独发出来了
因为客户的一些需求,我需要实现的撤回操作不允许本地有提示,也不能撤回本地的聊天,但其他人的微信中,这条消息是正常撤回的
简而言之,就是我撤回了一条消息,但我这边没有任何提示和反应,其他人的微信却能看到正常的撤回消息
基于这个需求,我就开始思考实现方法了
众所周知,但凡通讯软件,都是要和服务器通讯的,然后由服务器进行处理分发
具体到撤回操作就是,发送撤回命令给服务器→服务器处理命令→处理结果回调给微信客户端
明白了这些,我们的思路就逐渐清晰了,想要真的撤回消息,又不显示出来,只能在服务器运算处理完成之后进行操作
因此我找到了微信接收撤回命令回调的区域,将此回调的消息ID随便改了个其他的数
到这里我想结果应该就完成了,回调的消息ID错误之后,本地的消息就不会被撤回,事情完成了
然而令人没有想到的是,微信的对撤回消息的回调还有一个单独的校验,当撤回正常时,客户端会向服务器发送一个已正常撤回的反馈,服务器确认后这事才算完
但是我们改动了消息ID,撤回失败了,成功撤回的反馈当然就没有了,然后服务器就不停的向本地客户端回调,到这里我就开始逐渐头大了
不过此事也算是我思考的过于简单了,撤回消息作为一个需要准确验证的功能,对他的回调结果再做一个校验也不足为奇
此事的最终结局当然也是我成功的搞定了回调结果的校验,不过收获也是蛮多的,一个真正的HOOK高手,不仅要有过硬的技术,还要有严谨,正确的思考逻辑,只有你能把这一个功能完善的写出来,你才能信手拈来的HOOK它
这篇博文算是比较冷门的功能,想要了解一些常用的微信HOOK功能请观看我的其他博文