阅读 212

TikTok 用什么算法传输并加密内容?

最近,美国计划让微软收购视频分享社交网络移动应用 TikTok,因为“它对美国国家安全构成了风险”,必须交由美国本土的科技公司管理。TikTok 最近得到了多家媒体的报道,但其中又有多少是真实的呢?每篇文章都会回答一个非常具体的问题。现在,是时候把事实重新摆回桌面了。

免责声明

  • TikTok 为用户提供了大量功能,这要归功于它高达数百万行的代码。因此,仅靠一篇文章是不可能涵盖像“TikTok 是否对美国国家安全构成了威胁?”这样宽泛而模糊的问题答案。因此,我计划在一系列文章中讨论该问题,每篇文章都有特定的主题。

  • 我是一名法国安全研究员,多年来,一直在分析移动应用程序。你可以在 http://fs0c131y.com/press 网站找到我的公开作品,在 http://twitter.com/fs0c131y 找到我。

  • 我的目标是完全透明。我会和你分享我知道的所有内容。

  • 如果想跳过技术细节,可以在本文末尾找到总结。

前言

2020 年 8 月 2 日,我开始分析 TikTok,并在 Twitter 上发布了相关信息。


就在这条推文发布几分钟后,我的一个粉丝评论道:


我们通过私信进行了讨论,他向我解释了这个问题。他监听了 TikTok 发出的网络请求,发现每隔 2 分钟就有一个请求。但是,内容是加密过的,他无法解密。

这听起来像是一个好的起点:

  • TikTok 定期发送的是什么内容?

  • 什么时候发送?

  • 发送到哪里?

  • 这些内容是怎么加密的?

TikTok 定期发送什么内容?

当调试某个程序时,90% 的工作是需要重现它。所以,首先我试着重现这个问题。

  1. 我在法国 PlayStore 下载了最新版本的 TikTok;

  2. 我设置了 Burp Suite 来拦截从手机发出的网络请求;

  3. 我使用了 Frida 脚本来绕过应用程序中的 SSL 锁定,并启动了 TikTok。

图片

果然,每隔 5 分钟,TikTok 就会发送一个包含加密内容的网络请求。

/service/2/app_log/ 端点

让我们关注对端点 /service/2/app_log/ 发出的请求。

图片

参数

在研究其加密内容之前,我们已经可以看到这个请求包含了大量参数。

图片

这里面的大多数名称都能说明问题,我可以看到有三种类型的参数:

  • 有关设备的信息:device_iddevice_typedevice_brandos_apios_version ……

  • 有关 App 的信息:app_typeapp_languageversion_codeversion_namebuild_number ……

  • 有关用户的信息:current_regionlocaleregion

事实上,这种做法非常标准,我们所使用的大多数应用程序都有相同的数据检索过程。

加密内容

现在,是时候看加密内容了。我反编译了 App,并搜索了 app_log ,在com.ss.android.common.applog.NetUtil 类中找到了 sendEncryptLog方法。


看不懂代码没关系,可以看下这个函数签名,需要 4 个参数。arg4 是 URL, arg5 是请求的内容(未加密),其余的暂时不用关心。

现在,我可以使用 Frida 截取此方法的调用,并在加密之前查看请求的内容。

图片

我使用了小的 TTencryptedLog 方法,得到了以下输出:

图片

如果我们仔细查看 JSON 文件的内容,就会看到非常标准的数据。

  • 像以前一样,有很多关于设备的信息;

  • 这个应用程序最后一次启动是什么时候;

  • 事件记录,需要仔细研究他们认为的“事件”,就我所知,这似乎是一个相当标准的分析解决方案。

什么时候发送?

回答这个问题就等于回答什么时候调用方法。通过使用 JEB 按下 X 键,你可以很容易地获得所有的交叉引用。


可以看到如下 4 种方法:

  • doUpdateConfig

  • sendTimelyEvent

  • sendLog

  • deviceRegister 包中的未知方法

sendEncryptLog 方法用于发送不同类型的 JSON。所以,我清理了 TikTok 的数据,一切从头开始,我设法捕获了以下 JSON:

当设备被注册时请求的内容:

图片

TikTok 修改日志设置时的请求内容:

图片

同样,字段名本身就可以说明一切。我在这些 JSON 中看不到任何可疑或特定于 TikTok 的东西。

发送到哪里?

正如你在前面的截图看到的那样,请求被发送到 log16-normal-c-useast1a.tiktokv.com。有意思的是,我人在欧洲,但我的日志却被发送到美国东部的据点……TikTok 是一个全球范围使用的应用程序,他们可能用了几个端点来上传日志。

经过深入研究,我们可以找到 URLConfig 类。

图片

可以看到一共有 7 种 URL 配置:中国、美国、美国 HTTP、SIG AWS、SIG ALIYUN (阿里云新加坡)、Musically、Musically HTTP 等。

再说一次,居然没有欧洲的 URL 配置,似乎很奇怪是吧,但是没有关系。

这些内容是怎么加密的?

你还记得 sendEncryptLog 方法吗?

图片

加密就发生在这一行:v5 = b.a(v5, v5.length);

图片

EncryptorUtil 才是乐趣所在:

图片

果然如此,加密是在本地库完成的。TikTok 使用的所有本地库都位于手机的文件夹/data/data/com.zhiliaoapp.musically/app_librarian/<version>中。我就讲到这里。至于 TikTok 关于加密数据的实际操作,值得单独写成一篇文章。

总结

本文,我试图了解 TikTok 定期发送回其服务器的数据,我对请求的内容进行了解密并分析。据我们所知,在目前的状态下,TikTok 并没有什么可疑的行为,也没有泄露不寻常的数据。获取用户设备的数据这种行为在移动领域相当普遍,在 Facebook、Snapchat、Instagram 和其他网站也会有类似的结果。


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


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐