天天看點

TikTok 的應用程式日志都記錄了什麼内容?

TikTok 的應用程式日志都記錄了什麼内容?

作者 | Elliot Alderson

譯者 | Sambodhi

策劃 | 趙钰瑩

近日,TikTok 的命運可謂一波三折。本文,我們來看下黑客對 TikTok 的研究結果吧。

本文最初發表在 Medium 部落格,經原作者 Elliot Alderson 授權,InfoQ 中文站翻譯并分享。

自從我發表第一篇文章《TikTok 用什麼算法傳輸并加密内容?》(TikTok: Logs, Logs, Logs) 以來,發生了很多事情。

  • 微軟證明,該公司正在尋求收購 TikTok 在美國、澳洲、加拿大和紐西蘭的業務。
  • 特朗普本應在 8 月 2 日禁止 TikTok,随後威脅稱,除非有美國公司收購,否則 TikTok 将在 9 月 15 日“關閉”。最後,他 簽署了一項行政指令,要求 TikTok 的中國母公司字條跳動必須在從周四開始的 45 天中完成出售交易,規定期限一過,将不允許任何美國的個人或企業與其進行交易。又簽署了一項行政指令,将在 45 天後禁止美國管轄下的個人或公司與擁有微信的中國公司騰訊進行 “任何交易”。
  • 特朗普後來改變了主意,給了 TikTok 一個新的最後期限:90 天,而不是原先稱的 45 天。
  • 《華爾街日報》透露,TikTok 在 2019 年 11 月之前,在未經使用者同意的情況下,一直 跟蹤使用者裝置的 MAC 位址。

我們還是用事實說話,以更好地了解 TikTok。

1 免責聲明

  • TikTok 為使用者提供了大量功能,這要歸功于它高達數百萬行的代碼。是以,僅靠一篇文章是不可能涵蓋像“TikTok 是否對國家安全構成威脅?”這樣寬泛而模糊的問題答案。是以,我計劃在一系列文章中讨論該問題,每篇文章都有特定的主題。
  • 我是一名法國安全研究員,多年來,一直在分析移動應用程式。你可以在 http://fs0c131y.com/press 網站找到我的公開作品,在 http://twitter.com/fs0c131y 找到我。
  • 我的目标完全透明,就是分享我知道的所有内容。
  • 如果想跳過技術細節,可以在本文末尾找到總結。

2 前言

在我上一篇文章《TikTok 用什麼算法傳輸并加密内容?》(TikTok: Logs, Logs, Logs) 中,我對 TikTok 發出的 app_log 網絡請求的内容進行了解密。

TikTok 的應用程式日志都記錄了什麼内容?

完成解密後,有一個問題仍然存在:

事件記錄。我需要仔細研究一下他們認為的“事件”是什麼,但就我所知,這似乎是一個相當标準的分析解決方案。

在本文中,我将回答以下問題:TikTok 的應用程式日志的定義是什麼?

3 什麼是 TikTok 的應用程式日志?

我們的起點是 app_log 這一關鍵字。為了解 TikTok 是如何處理應用程式日志的,我對應用程式進行了反編譯,并分析了源代碼。我很快在 DBHelper 類中找到了 ss_app_log.db 的定義。

TikTok 的應用程式日志都記錄了什麼内容?

這很有趣,TikTok 使用本地資料庫來存儲應用程式日志。我特意檢視了測試用的手機才确認這一點。

TikTok 的應用程式日志都記錄了什麼内容?

正如你所見,TikTok 建立了許多資料庫。如果你打開 ss_app_log.db 這個檔案,你可以在事件表中找到一些資料。

TikTok 的應用程式日志都記錄了什麼内容?

這些方法的簽名給我們提供了 3 個新對象:LogEvent、LogPage、LogSession。

TikTok 的應用程式日志都記錄了什麼内容?

這回答了我們最初的問題!TikTok 的應用程式日志可以是 LogEvent、LogPage 或 LogSession。

4 這些應用程式日志(實際上)裡面有什麼?

很好,我找到了不同日志對象的定義,但 TikTok 真正發送的是什麼呢?

是時候用 Frida 攔截 DBHelper 類的 6 種插入方法了。

TikTok 的應用程式日志都記錄了什麼内容?

通過這種方法,我得到了 TikTok 在使用應用程式時建立的所有應用程式日志的詳細資訊。下面是日志會話、日志事件和日志以及雜項日志的示例。

[Log Session]
active = false
app_version =  17.2.4
duration = 0
eventIndex = 0
id = 0
launch_sent = false
non_page = true
pausetime = 1596980554524
timestamp = 1596980554524
value = 6630a167-4cf8-46a3-ac6c-c4b45aab0a00
version_code = 2021702040
[Log Event]
category = event_v3
ext_json =  {"is_cache":1,"is_timeout":1,"cache_num":1,"_event_v3":1,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","nt":4}
ext_value = 0
id = 0
instant_only = false
label = null
mHasTimelySend = false
session_id = 39
tag = pull_out_cache_video
teaEventIndex = 1
timestamp = 1596980554524
user_id = 0
value = 0
[Log]
value = {"event":[{"ad_extra_data":"{\"non_hb_ad\":0,\"hb_ad\":0}","is_ad_event":1,"is_i18n_sdk":1,"refer":"sdk","ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","nt":4,"category":"event_v1","tag":"sdk_ad","label":"ad_sdk_bid_upload","session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34","event_id":655},{"nt":4,"category":"event_v1","tag":"launch_time","label":"perf_monitor","ext_value":858,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34","event_id":658}],"event_v3":[{"nt":4,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","event":"pull_out_cache_video","params":{"is_cache":1,"is_timeout":1,"cache_num":1},"event_id":653,"tea_event_index":1,"local_time_ms":1596980554524,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34"},{"nt":4,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","event":"caijing_iap_google_set_host","params":{"params_for_special":"caijing_pay_casher","set_host":"tp-pay-mva.byteoversea.com"},"event_id":654,"tea_event_index":2,"local_time_ms":1596980554600,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34"},{"nt":4,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","event":"caijing_iap_google_upload_host","params":{"params_for_special":"caijing_pay_casher","upload_host":"tp-pay-mva.byteoversea.com","from":"confirm_task"},"event_id":656,"tea_event_index":3,"local_time_ms":1596980554729,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34"},{"nt":4,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","event":"main_boot_type","params":{"type":1},"event_id":657,"tea_event_index":5,"local_time_ms":1596980554808,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34"},{"nt":4,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623","event":"power_launch_log","params":{"last_start_power":"100","last_session":"18980","last_end_power":"100","current_power":"100","launch_num":"14","is_cold_launch":"1","is_charging":"1"},"event_id":659,"tea_event_index":6,"local_time_ms":1596980554851,"session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","datetime":"2020-08-09 15:42:34"}],"launch":[{"datetime":"2020-08-09 15:42:34","session_id":"6630a167-4cf8-46a3-ac6c-c4b45aab0a00","local_time_ms":1596980554524,"tea_event_index":0,"is_background":true,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623"},{"datetime":"2020-08-09 15:42:34","session_id":"05430002-b046-4ab3-9e7b-e4cc52f1a0b3","local_time_ms":1596980554861,"tea_event_index":0,"ab_sdk_version":"1799896,185215011,1868782,1788470,1791623"}],"magic_tag":"ss_app_log","time_sync":{"server_time":1596980557,"local_time":1596980557},"header":{"openudid":"e4340d3235274e4b","sdk_version":"2.5.6.3","package":"com.zhiliaoapp.musically","channel":"googleplay","display_name":"TikTok","app_version":"17.2.4","version_code":2021702040,"timezone":1,"access":"wifi","os":"Android","os_version":"8.1.0","os_api":27,"device_model":"Nexus 6P","device_brand":"google","device_manufacturer":"Huawei","language":"en","resolution":"2392x1440","display_density":"mdpi","density_dpi":560,"clientudid":"8e9b0431-e442-49c7-ac03-4bfea91b540f","install_id":"6857220033589053189","device_id":"6727990782160700929","sig_hash":"194326e82c84a639a52e5c023116f12a","aid":1233,"push_sdk":[1,2,7,8,9],"rom":"EMUI-4805388","release_build":"074debc_20200803","update_version_code":2021702040,"manifest_version_code":2021702040,"app_version_minor":"","cpu_abi":"arm64-v8a","not_request_sender":0,"rom_version":"OPM6.171019.030.E1","region":"US","tz_name":"Europe\/Paris","tz_offset":7200,"custom":{"filter_warn":0,"web_ua":"Mozilla\/5.0 (Linux; Android 8.1.0; Nexus 6P Build\/OPM6.171019.030.E1; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/84.0.4147.111 Mobile Safari\/537.36","user_period":-1,"user_mode":-1},"google_aid":"315f154c-a3a0-48de-b932-319e0595114b"},"_gen_time":1596980557330}
log_type =  0
[Misc Log]
session_id = 40
log_type =  media_loader
value = {"cache_content_length":0,"cache_hit_off":0,"download_task_num":0,"encrypt_version":1,"end_req_t":1596980559207,"err_code":0,"file_key":"v09044ac0000brd02sf4gdtjhfg5lrtg_bytevc1_540p_981609","han_sh_st":4,"io_read_size":0,"io_read_time":1,"is_auth_err":-1,"is_crc_err":-1,"is_hiJack_err":0,"l_err_code":0,"l_sta_code":206,"loader_download_size":1897451,"loader_info":"{\n   \"ac_check_level\" : 0,\n   \"check_sum_level\" : 0,\n   \"cost_time\" : 2042,\n   \"crc_err_url_index\" : 0,\n   \"down_load_size\" : 1897451,\n   \"download_size\" : 1897451,\n   \"end_req_t\" : 1596980559204,\n   \"err_code\" : 0,\n   \"err_stage\" : 0,\n   \"io_write_size\" : 1897451,\n   \"io_write_time\" : 171,\n   \"is_all_forbid\" : 0,\n   \"is_call_f_api\" : 0,\n   \"is_crc_err\" : -1,\n   \"is_enble_pre_con\" : 1,\n   \"is_hiJack_err\" : 0,\n   \"marked_io_speed\" : 0,\n   \"net_log\" : [\n      {\n         \"dns_start_t\" : 1596980557162,\n         \"dns_t\" : 1596980557266,\n         \"end_req_t\" : 1596980559204,\n         \"http_err_code\" : 0,\n         \"http_err_stage\" : -1,\n         \"http_first_body_t\" : 1596980557589,\n         \"http_open_end_t\" : 1596980557589,\n         \"ip_info\" : \"2.21.35.19\",\n         \"ip_list\" : \"2.21.35.19,2.21.35.42,2.21.35.8,2.21.35.24,2.21.35.43,2.21.35.41,2.21.35.16,2.21.35.25,2.21.35.27,\",\n         \"is_crc_err\" : -1,\n         \"is_force_https\" : 0,\n         \"is_socket_reuse\" : 0,\n         \"is_tls_ses_reuse\" : 0,\n         \"read_off\" : 1897451,\n         \"read_size\" : 1897451,\n         \"req_check_t\" : -1,\n         \"req_t\" : 1596980557162,\n         \"tcp_con_start_t\" : 1596980557266,\n         \"tcp_con_t\" : 1596980557322,\n         \"tcp_err_code\" : 0,\n         \"tcp_first_pack_t\" : 1596980557393,\n         \"tcp_window_size\" : -100000,\n         \"tls_version\" : \"TLSv1.2\",\n         \"url_index\" : 0\n      }\n   ],\n   \"network_version\" : \"avnetwork_andorid_1.1.4.5_boringssl\",\n   \"ori_url_num\" : -1,\n   \"read_off\" : 1897451,\n   \"req_t\" : 0,\n   \"speed_coe_value\" : 0.0,\n   \"tcp_err_code\" : 0,\n   \"url_fail_count\" : 0,\n   \"url_index\" : 0,\n   \"url_suc_count\" : 1,\n   \"urls\" : [\n      \"https:\/\/v16m.tiktokcdn.com\/2120bf3fa76a176531a3c7a37d1008eb\/5f32a04c\/video\/tos\/useast2a\/tos-useast2a-pve-0068\/73089af821d24176945a10483a866aec\/?a=1233&br=1916&bt=958&cr=3&cs=2&dr=0&ds=6&er=&l=20200809134235010189066019293A1EAC&lr=all&mime_type=video_mp4&qs=11&rc=anU4aW1nN3YzdTMzZjczM0ApODlmOjg4ODs5NzRlNzYzZWdxaWRlcWRjL2FfLS1eMTZzczZfYjUxY2JhL2FfMDJjYGI6Yw%253D%253D&vl=&vr=\",\n      \"https:\/\/v19.tiktokcdn.com\/3740f4af6869fd6e64346601b8163868\/5f32a04c\/video\/tos\/useast2a\/tos-useast2a-pve-0068\/73089af821d24176945a10483a866aec\/?a=1233&br=1916&bt=958&cr=3&cs=2&dr=0&ds=6&er=&l=20200809134235010189066019293A1EAC&lr=all&mime_type=video_mp4&qs=11&rc=anU4aW1nN3YzdTMzZjczM0ApODlmOjg4ODs5NzRlNzYzZWdxaWRlcWRjL2FfLS1eMTZzczZfYjUxY2JhL2FfMDJjYGI6Yw%253D%253D&vl=&vr=\",\n      \"https:\/\/api16-normal-c-useast1a.tiktokv.com\/aweme\/v1\/play\/?video_id=v09044ac0000brd02sf4gdtjhfg5lrtg&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&bytevc1=1&quality_type=11&adapt540=1&source=PackSourceEnum_FEED&pass-region=1&pass-route=1&iid=6857220033589053189&device_id=6727990782160700929&ac=wifi&channel=googleplay&aid=1233&app_name=musical_ly&version_code=170204&version_name=17.2.4&device_platform=android&ab_version=17.2.4&ssmix=a&device_type=Nexus%2b6P&device_brand=google&language=en&os_api=27&os_version=8.1.0&openudid=e4340d3235274e4b&manifest_version_code=2021702040&resolution=1440%2a2392&dpi=560&update_version_code=2021702040&_rticket=1596980556917&storage_type=1&current_region=FR&app_type=normal&pass-route=1&cpu_support64=true&host_abi=arm64-v8a&sys_region=US&appTheme=light&pass-region=1&timezone_name=Europe%252FParis&residence=FR&app_language=en&ac2=wifi&uoo=0&op_region=FR&timezone_offset=3600&build_number=17.2.4&locale=en&region=US&ts=1596980556&cdid=3506991f-9724-4c2c-b62e-37e84dc465fe\"\n   ]\n}\n","loader_type":0,"log_type":"media_loader","net_content_length":1897451,"raw_key":"v09044ac0000brd02sf4gdtjhfg5lrtg_bytevc1_540p_981609","read_cache_size":0,"read_loader_size":1897451,"receive_req_t":1596980557154,"reply_code":206,"reply_player_size":1897451,"req_end_off":0,"req_off":0,"ret":0,"sdk_ua":"AVMDL-1.0.33.1-boringssl-boringssl-ANDROID","sdk_version":"AVMDL-1.0.33.1-boringssl-boringssl","task_type":1,"trace_id":"6727990782160700929T1596980557123T18185","use_file_mgr":1,"wait_task_num":0}
```           

複制

我還釋出了 TikTok 在應用程式啟動期間建立的應用程式日志的完整清單:

https://gist.github.com/fs0c131y/b4ef278e8863c636964793e1b27f889d

TikTok 的應用程式日志都記錄了什麼内容?

這些日志是否包含個人資料?答案是沒有。你最多能找到的是關于裝置的資料,如作業系統、作業系統版本、裝置型号、裝置品牌、像素密度等,基本上就這些了,僅此而已。

5 總結

在本文中,我找到了 TikTok 不同類型日志的定義,并觀察了他們是如何動态建立的。經過分析,應用程式日志似乎并不含個人資料。

通過這兩篇文章,我們對 TikTok 應用程式日志有了一個很好的概述。下一篇文章将專門讨論 TikTok 如何在 Android 系統上使用一個衆所周知的技巧來擷取使用者裝置的 Mac 位址。

作者介紹:

Elliot Alderson,法國黑客。在 Predicta Lab 打擊虛假資訊,與 USANetwork 無關。

原文連結:

https://medium.com/@fs0c131y/tiktok-what-is-an-app-log-da70193f875