这里分享下 快手iOS APP聊天协议分析过程。

iOS逆向首先需要获取一个脱壳的APP,脱壳简单就不说了,可以用crackerxi+来操作。


将下载后的ipa文件用解压缩软件(如7zip等)解压,从解压后的目录Payload/Aweme.app/找到Aweme可执行文件,拖入IDA进行反编译,ida可以检测objective-c语法。

然后进入主题,既然是聊天发消息,就尝试在ida里搜索"message",看看能否找到对应的类或函数。

这里找到了messageBaseViewController,发现一个名为didSendContent: 的函数,根据名字可以大概推断出这应是发送消息的入口,此函数又调用了checkAndSendMessage,

应该是发送前的检查操作,如消息长度等,重点关注回调block,


进入回调函数,可以看到这里出现了一些参数,如目标uid,消息类型等,最后调用sendMessage方法


先看看prepareToSend 方法,里面发现了createConversation方法,应该是创建对话,每个聊天都需要先创建一个会话,

也就是先检查跟目标用户之间是否已有对话(可以理解为聊天列表是否有记录)


回到4中提到的prepareToSend 执行后的回调block(即创建对话完成后执行的操作)

可以看到这里继续调用了了sendMessage:conversation:方法(conversion即createConversation返回的会话对象)



以看到im消息是走的google的protobuf协议(不熟悉的可以找相关资料了解一下,就是一个序列化协议),发送消息的protobuf

消息结构大致如下图,消息内容,类型等参数都是设置在TIMPBNSendMessageRequestBody里。

构建出protobuf消息体后,剩下的发送过程就很简单了,

首先protobuf消息体序列化得到字节集,

在这里插入图片描述


然后使用常用的post操作就可以了,消息类型前面已经提到过了,这里补一张发送的名片、链接消息效果




©著作权归作者所有:来自51CTO博客作者A新媒体_营的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 闪存出现“位置不可用无法访问函数不正确”的解决方法
  2. 一篇常做错的经典JS闭包面试题
  3. DolphinDB模块复用教程
  4. js 中的作用域与闭包,类与继承 ---- 0402
  5. JavaScript知识:作用域与闭包以及类与类的继承
  6. 数组函数的练习
  7. 搞懂作用域与闭包
  8. 课程学习记录之python迭代器和生成器
  9. 学习vue实现双向绑定【附源码下载地址】

随机推荐

  1. 【Android UI】Android Layout XML属性
  2. Android(安卓)ListView 和 BaseAdapter
  3. Android中的Handler机制
  4. Android开机LOGO
  5. Android控件开发之四----ListView(4)
  6. android binder机制之--(我是binder)
  7. Android上开发Android软件
  8. 为Android开发者定制的搜索引擎
  9. Android(安卓)NDK之二:创建NativeActivity
  10. Android Studio下载安装教程及开发环境搭