(xxxx)十四:实战协议分析

  1、xxxx的聊天通信协议是基于tls 1.3精简了一些握手的方法,官方的介绍在这:https://mp.weixin.qq.com/s/tvngTp6NoTZ15Yc206v8fQ

     总的来说,这篇文章对xxxx协议做了总体的介绍。为了便于理解、抓住主脉络,我这里整理了整个协议的主干思路,如下:
       
  tls1.3协议网上介绍的文章也有很多,我就不赘述了(没意义)。从本文开始实战xxxx协议的分析,最终目标是复现xxxx的协议!
 
2、逆向入口
  xxxx这种大型的工程,代码估计百万行,转成汇编后估计千万行,从哪下手了? 所有逆向工程,一般都根据逆向需求从数据下手。xxxx协议是基于tls 1.3改的,保留了如下3种handshake方式:
  • 1-RTT ECDHE
  • 1-RTT PSK
  • 0-RTT PSK
  一般来说,刚点击xxxx登陆的时候,会和服务器开始通信,那么就会用到通信协议。tls1.3是从client主动发起Client Hello包开始的,xxxx会不会也这样了? 上一篇文章抓了部分xxxx的包,都是加密的,没法直接判断是不是Client Hello包,那么这次就换个思路:用IDA静态查找!
  用IDA打开xxxx最大的那个dll,在string windwos里面通过“client hello”关键词查询,果然找到了一些字符串:
       
  顺藤摸瓜,找到了这里:从代码看,貌似是个switch case结构,除了client hello,还有server hello、newsession ticket、server key exchange等关键字符串,这个函数肯定重要,先记住函数的偏移:0x67873090 - 0x66B00000 = 0xD73090;函数取名: package_type,表明数据包的类型;
       
  继续查看这个函数被谁调用了:选中函数,右键选择“xrefs graphs to”,得到下面的调用链:
     
 
  通过挨个查看,这些函数都调用了网络相关函数,肯定和收发数据相关,这里算出他们的偏移:0x67873280 - 0x66B00000 = 0xD73280 , 0x67870DA0 - 0x66B00000 = 0xD70DA0;

posted @ 2024-05-20 10:55  第七子007  阅读(106)  评论(0编辑  收藏  举报