文章总结: 文章逆向分析了TikTok旗下PangleSDK的加密机制,发现其cypher:3方案存在致命设计缺陷。虽然采用了AES-256-CBC算法,但密钥与初始化向量被嵌入消息明文头部传输,且原生库中存在硬编码密钥。作者成功编写解密程序,对694个载荷实现百分百解密,证实该加密形同虚设,仅为流量混淆,无法保护用户设备指纹等敏感隐私数据,揭示了严重的安全隐患。 综合评分: 88 文章分类: 逆向分析,移动安全,漏洞分析,应用安全,数据安全
TikTok广告SDK上传指纹加密信息破译
二进制空间安全
2026年3月10日 10:47 北京
将二进制空间安全设为”星标⭐️”
第一时间收到文章更新
技术背景
#
#
Pangle SDK是TikTok for Business(字节跳动旗下)推出的程序化移动广告平台Pangle提供的软件开发工具包。它的主要作用是帮助全球移动应用开发者在其App中集成广告功能,从而实现流量变现和用户增长。
在使用过程中,SDK会收集用户终端的一些指纹信息, 并将数据以“cypher:3”为标记进行加密传输,大致格式如下:
{"cypher": 3, "message": "3eT2HZkAvtEl4Z1cgNmwq7mfXKhJdLTi..."}
SDK逆向工程
Pangle SDK 通过字节跳动的 Maven 仓库artifact.bytedance.com公开分发。本次试验的版本为 6.5.1.2 版本,首先分析本地库和 Java 类。通过前期静态分析,该SDK包含四个本地库:
libtobEmbedPagEncrypt.so(8KB加密库)
libpglarmor.so (61KB加密封装器)
libnms.so(281KB网络库)
libtt_ugen_layout.so(广告布局引擎)
利用jadx 工具反编译Java 类,并通过四个关键文件追踪加密流程, 定位到四个关键文件:
(1).PangleEncryptManager.java
(2).PglCryptUtils.java
(3).PangleEncryptUtils.java
(4).aT.java
其中aT.java是经过混淆的类, 里面实现了cypher:3 加密方法, 加密原理如下:
(1).生成一个随机的 32 字符密钥和一个 16 字符初始化向量 (IV)。
(2).使用 AES-256-CBC 加密,并采用 PKCS5 填充。
(3).连接:版本字节 + 打乱的密钥 + IV + Base64(密文)
其生成的消息格式如下图:
加密密钥和初始化向量 (IV) 都嵌入在每条消息中。 要解密任何cypher:3有效载荷,只需读取字符位置1-32的密钥,位置33-48的初始化向量,以及位置49及之后的密文即可。
这相当于把前门锁上,然后把钥匙用胶带粘在门框上。这种方案与其说是加密保护,不如说是对SDK流量的混淆,因为任何阅读过公开代码的人都可以解密每条消息。
该SDK还包含第二条加密路径,即通过名为libtobEmbedPagEncrypt.so 的原生库实现的加密。反汇编这个8KB的二进制文件后发现,.rodata部分中硬编码了一个以明文形式存储的AES密钥:UK*@3oKpFlVVnads 。该密钥在SDK版本5.3.1.0和6.5.1.2中完全相同,这意味着每个使用Pangle SDK的应用程序在其二进制文件中都包含相同的静态密钥。
确认算法
Cb/aT.java 中的底层密码算法是标准的 Java 加密技术:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(1, secretKeySpec, new IvParameterSpec(str2.getBytes()));
AES-256-CBC 在密钥保持机密的情况下是一种非常强的加密算法。但在这里,密钥却与密文一起传输。
利用其加密原理很容易写出解密程序, 通过对捕获到的694 个cypher:3 载荷进行了测试。结果是:694个请求全部成功解密,成功率达到100%。
解密后的指纹信息大致如下:
{ "device": { "device_model": "iPhone15,3", "os_version": "18.7.2", "battery_remaining_pct": 83, "total_space": "255413800960", "free_space": 66881117072, "screen_bright": 0.71, "ip": "192.168.x.x", "device_city": "America/New_York", "idfv": "[redacted]", "darkmode": 1, "rooted": 0 }, "app_id": "8139319", "sdk_version": "7.2.0.4", "mediation": "google"}
大致包含的信息有:设备型号、CPU核心数、总内存、总存储容量、可用存储容量、屏幕尺寸和像素密度、电池电量和充电状态、屏幕亮度、音量、耳机是否连接、飞行模式、低功耗模式状态、内部IP地址、网络连接类型、时区、运营商名称等。
(全文完)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:二进制空间安全 《TikTok广告SDK上传指纹加密信息破译》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。












评论