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

时间:2022-07-23
本文章向大家介绍TikTok 用什么算法传输并加密内容?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

作者 | Elliot Alderson

译者 | Sambodhi

策划 | 赵钰莹

近日来,由于一些原因,TikTok 的命运可谓一波三折。TikTok 本身真的存在隐私问题吗?本文,我们来看下黑客对 TikTok 的研究结果吧。 本文最初发表在 Medium 博客,经原作者 Elliot Alderson 授权,InfoQ 中文站翻译并分享。

最近,美国计划让微软收购视频分享社交网络移动应用 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 和其他网站也会有类似的结果。

作者介绍:

Elliot Alderson,法国黑客。在 Predicta Lab 打击虚假信息,与 USANetwork 无关。

参考阅读:

https://medium.com/@fs0c131y/tiktok-logs-logs-logs-e93e8162647a