「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

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

2020 年 8 月 06 日

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

近日来,由于一些原因,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


2020 年 8 月 06 日 14:598101

评论 4 条评论

发布
用户头像
联想系,多年受美国国会外资审查委员会的洗礼,向来在合规方面做得非常不错。而且,柳甄担任字节跳动的高级副总裁,合规方面就完全没有问题。
2020 年 08 月 10 日 13:18
回复
用户头像
该评论已删除
2020 年 08 月 09 日 16:35
回复
看的很细致,请小编现身回答
2020 年 08 月 10 日 14:15
回复
谁删了我的评论?
2020 年 08 月 11 日 16:12
回复
该评论已删除
2020 年 08 月 14 日 17:39
回复
用户头像
……相当于什么都没说?调到非Java部分直接掐断文章????
2020 年 08 月 09 日 13:29
回复
该评论已删除
2020 年 08 月 10 日 10:17
回复
没有更多了
发现更多内容

聊聊dubbo协议

捉虫大师

高并发调优backlog多大合适?

运维研习社

运维 Nginx PHP-FPM 5月日更 并发调优

Pulumi 如何在 Windows 环境中设置

HoneyMoose

PKI系统简介

上海派拉基础研发

CA PKI

GitHub开源史上最大规模中文知识图谱

不脱发的程序猿

人工智能 自然语言处理 GitHub 开源项目 中文知识图谱

一张图看懂嵌入式系统组成

不脱发的程序猿

硬件开发 嵌入式系统 嵌入式学习路线

This BigData,Hadoop组成及生态

Simon郎

大数据 hdfs YARN hadoop3 大数据MapReduce

音频均衡器EQ

floer rivor

音视频 Eq

从技术趋势看质量赋能

BY林子

敏捷 软件测试 质量赋能

浅谈负载均衡

Damon

负载均衡 5月日更

Windows Terminal 安装和运行

HoneyMoose

中公、马士兵、千锋、拉勾入局,腾讯课堂“薪选”IT人才培养按下加速键

DT极客

Flutter开发:Another exception was thrown:Unable to load asset:…的解决方法

三掌柜

5月日更

微软 WSL 重装操作系统

HoneyMoose

5G进京 “赶考”记:“占得上、保持稳、体验优、信号好”四道考题,分别打几分?

脑极体

国内日志监控分析王者之sls

代码先生

分布式日志 海量数据分析 日志监控分析

人人都爱Kubernetes,Docker难道就不香了吗?

读字节

Docker Kubernetes DevOps

【和平精英x TcaplusDB】两周年,让我们一起加油!

tcaplus

数据库

“为爱而生 温暖陪伴”——2021年中国洗地机行业发展峰会圆满落幕

DT极客

快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”

蚂蚁集团移动开发平台 mPaaS

小程序 mPaaS 移动开发平台

Hadoop定位问题日志跟踪

InfoQ_Springup

hadoop

并行文件存储和分布式 NFS 文件存储有何不同

焱融科技

云原生 高性能 文件存储 容器存储 技术博客

融云2021 X-Meetup技术沙龙 探讨音视频技术新方向

融云 RongCloud

Windows 任务管理器中如何显示 CPU 逻辑处理器情况

HoneyMoose

CMMI V2.0丨如何通过CMMI真正在企业中的实施规模化敏捷开发

渠成CMMI

软件 研发管理 CMMI

关于OpenHarmony 2.0共建进展

罗燕珊

鸿蒙 开源项目 OpenHarmony

多方安全计算:隐私保护集合求交技术

华为云开发者社区

数据集 PSI 隐私保护集合交集 可信 伪随机函数

拥有5大核心竞争力的华为云GaussDB,成SACC2021最靓那一个…

华为云开发者社区

数据库 华为云 GaussDB 存算分离 GaussDB(for Redis)

保障实时音视频服务体验,华为云原生媒体网络有7大秘籍

华为云开发者社区

云原生 华为云 实时音视频 媒体网络 架构分层

Too many open files 的四种解决办法

陈迪

这一次,彻底搞懂 Go Cond

HHFCodeRv

go

TikTok 用什么算法传输并加密内容?(一)-InfoQ