某音 x-gorgon, 设备注册tc, 私信imapi, xlog 等各个版本协议破解探讨

>做android好多年了, 我一直比较好奇某音内部是怎么实现这种国民级app的, 无论是数据埋点, 行为风控 , 数据安全等, 这次我们一起扒扒 , 看看数据传输协议有何神奇之处

本次以某音官网当前最新版本10.9为例, 经过这么长时间的发展, 某音的协议加密策略在不停的升级, 低版本的不难处理, 就不多介绍了, 想探讨的加qq。我们就从xg,tc,imapi,xlog这4个算法作简单讲解。

#### 1. x-gorgon (简称xg)

也许你很好奇,这是什么算法。其实xg算法无处不在,我们利用fiddler随便抓个包看看:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-59925b07c18dd914.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

每个请求的请求头里都会有xg这个参数,可以看到xg是以04开头的,实际上它还有02,03的版本,无论怎么变,只要摸清楚它的生成规律就好。那么xg在哪生成的呢?

![image.png](https://upload-images.jianshu.io/upload_images/3764710-617f5370b422bad5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

通过查看此代码发现,xg的本质是对url进行了一些骚操作,并调用了native层的leviathan方法,其实里面还有很多重要的处理细节。

#### 2.tc (设备注册)

这个算法在设备注册的时候有使用,如图

![image.png](https://upload-images.jianshu.io/upload_images/3764710-3efdc812b80bb783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

它的请求加密体前两个字节是以tc开头的加密体, 新版本的tc相对于旧版本在java层变化不大,但在so层难度增加了不小, 这是java层tc加密的位置:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-dd7eae9605fc8703.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

再来领略一下ida的ollvm平坦化混淆图,这种混淆的控制块无处不在,在我们硬破解的时候带来不小的麻烦,并实现了不同语言的版本,java和c#:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-9c01fa11fbdaa4d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 3.imapi

该算法以imapi域名开头 ,出现在登录之后,使用到了谷歌的probuf加密方式,这种方式的优点是跨平台加解密,需要注意的是加解密的请求和响应是分开的,如下:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-f5723566ea25c05c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 4.xlog

这个无论是登录前还是登录后xlog都存在,旧版本的xlog01和新版本的xlog02, 他们都往往以xlog的域名开头,而请求的加密体里在旧版里第一个字节以01开头, 新版以02开头,下图是新版的02:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-d19146e119f70570.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

再看下ida里的ollvm平坦图 ,欣赏一下:

![image.png](https://upload-images.jianshu.io/upload_images/3764710-5d7503f530e9a9e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 写在最后

看完上面的主要算法之后,其实他们的网络请求也基于okhttp,在视频方面用到了ffmpeg, 一些常用的框架比如butterknife, rxjava 等, 另外也用到了kotlin协程,美团的robust热更新,通过这些框架,我们在hook的时候就多了一种考虑的方向。最后,某音的算法当然不止这些,如as, cp, mas 等等 , 写这个主要是兴趣, 如果你也对这个感兴趣,不妨加qq:2801833342, 共同探讨 ~。

你可能感兴趣的:(某音 x-gorgon, 设备注册tc, 私信imapi, xlog 等各个版本协议破解探讨)