某直播APP反向TCP协议分析
浏览:692 次

1、 概述
拖延症晚期,一个小菜鸟终于完成了炫舞梦工厂app的分析。直播APP使用TCP协议。TCP连接建立后,首先执行基本连接认证。认证通过后,执行帐户认证。之后,可以进行获取角色信息、进入房间等各种操作。发送的数据由ProtoBuf序列化,然后由CRC32循环加密。添加标头(包括命令号、长度、校验位等)后,发送数据,接收的数据则相反。本文主要描述了反向过程中遇到的困难和想法、基本连接认证过程、数据包序列化过程、CRC32循环加密过程以及重要数据包的分析过程。旨在为APP反向中的TCP通信协议提供一种通用的分析和研究方法。如果您有更好的想法或经验交流,请联系。
本文使用的工具有:JEB2.3.13、GDA3.53、IDA7.0、闪电模拟器和玄武梦工厂APP。
2、 扭转困难和想法
1.找到切入点
一般来说,一个好的起点可以让我们事半功倍。联系APP后,首先进行流程分析。启动android监视器并登录。通过分析日志和调用方法堆栈,发现一条可疑的日志消息:
有理由相信z是必需的日志类。有了这样的起点,做很多事情都很容易。通常,App会在发布版本时重写日志类并关闭某些信息的输出。使用xpose钩住z类的所有方法并打印出日志信息。您可以发现日志输出了许多有用的信息。
通过对日志信息的分析,搜索日志标记:NetConnection。分析表明,com.h3d.qqx5.framework.d.g是该App的网络操作类。在该类中,执行连接之后的基本连接认证以及随后的数据分组的发送和接收。我们还发现了发送数据包的特定功能
当找到合同功能时,就找到了突破点。通过逐层跟踪可以找到调用级别。
2.代码混淆

APP代码混乱,这对协议分析非常不利。我的想法是跟踪方法过程并及时重命名。在重命名过程中,我的命名规则是:原始方法名_保留原始方法名,以方便后续钩子操作。例如,在我对该方法进行详细分析后,上述合同功能的效果如下:
3、 基本连接认证
通过数据包捕获分析和反编译后的代码分析,密钥认证代码位于com.h3d.qqx5.framework.d.g.b.a中:
了解建立连接后的基本连接身份验证过程,并比较数据包进行分析:
协议:
从long_1到long_2,依次计算其sha-256值,直到结果与数据包返回的long_key_sha-256的值相同。这里,限定值被命名为long_key
拼图:
到目前为止,tcp基本连接身份验证是成功的!您可以执行后续操作。
3、 数据序列化过程
这部分是最不舒服的部分,因为我一直认为这是谷歌的原型。我试图附加它来解决数据包,但效果不佳。App数据包解决方案的过程复杂且令人困惑。花了很长时间才了解这个过程。

以CEventQueryVideoAccountInfo的发送和接收为例
首先,Java有一个名为CEventQueryVideoAccountInfo的类,
整数压缩和解压缩算法以及加密和解密算法将在后面给出
接下来,我们将讨论返回的数据
Java还定义了返回的数据类
需要注意的是,并不是所有的数据结构类都会重写toString()方法来帮助我们理解每个属性的真正含义。类似地,许多类不重写此方法。因此,我们需要尽可能地重命名每个我们知道其真实含义的值,以便在将来遇到toString()方法未被重写时,我们可以猜测并验证其属性的含义。
4、 压缩和解压缩算法、加密和解密算法
1.压缩和解压缩算法如下:
2.加密和解密算法:
5、 重要数据包分析

在数据序列化部分,以QueryVideoAccountInfo为例进行了描述。在数据包捕获之后