首页
社区
课程
招聘
[原创]浅谈 iOS 上某视频 App 的设备注册信息收集
发表于: 2小时前 189

[原创]浅谈 iOS 上某视频 App 的设备注册信息收集

2小时前
189

本文只讨论互联网时代个人隐私信息收集相关内容,用于学习 iOS App 行为分析、隐私合规核对和逆向研究记录,不涉及任何违法违规操作。文中包名、接口、设备标识、账号、IP、证书、密钥等敏感信息均已做脱敏处理。

如有违规可联系删除,邮箱:ann99445566@gmail.com

鉴于 iOS 闭源的特性,相对于 Android,iOS 上公开资料较少,工具链也没有 Android 生态成熟,分析起来会更麻烦一些。好在 Frida、lldb、class-dump、Mach-O 解析工具和各种开源文章已经覆盖了大部分基础工作。【frida小子罢了】

**苦于IOS trace 没有太成熟的工具 只能frida 乱搓,不管相对于七神而言,难度不值一提,主要定位点在awemecore,里面是个vmp混淆 分析几次发现因为上报的protobuf比较固定 而且对于同个设备来说 没有大改 上报信息基本没什么变化 所以hook memcpy即可定位 算法没有什么难点 主要是vmp分支处理比较麻烦 不过也仅是伪控制流 和我的几亿Token去说吧 **

该文70%由Codex代写

本文不讨论业务功能破解,只站在 device register 的角度,记录点击“同意”之后 App 可能采集了哪些设备信息,这些信息大致如何进入注册、上报和安全 SDK 请求链路。

众所周知,首次下载 App 打开后通常会出现隐私协议弹窗。用户点击同意后,App 才会继续进入主流程;如果不同意,部分版本会直接退出或限制使用。

从网络行为看,点击同意后通常会触发几类请求:

下面内容均以 device register 视角分析,参数只展示脱敏样例。

这里的“新机”指从未安装或打开过该 App 的设备,或者 App 本地数据已经清空、服务端无法关联历史安装记录的环境。

首次启动时,本地一般还没有稳定的 device_id / install_id,因此注册请求会携带一组本地可获得的设备信息,服务端根据这些信息返回新的标识。

image-20260601214757888

以下只展示结构化后的部分字段,非完整请求体:

首次注册完成后,服务端通常会返回或间接写入以下标识:

在实际样本中,后续 /sdi/get_token/report 请求会继续携带这些标识,用于把安全 SDK、上报系统和设备注册系统串起来。

脱敏后的典型字段:

结合本目录内 字段映射现状.md,可以看到安全 SDK 请求里也包含一份设备快照。不同接口字段号不同,但语义基本相近。

设备注册本身是常规结构化请求,难点主要集中在 mssdk 的 /sdi/get_token/report。这两个请求外层是 protobuf envelope,真正的设备环境和 SDK 数据在 field4 加密体里。

大体流程如下:

几个关键点:

还原时不要一开始就盯着网络包硬猜。更稳的方式是先定位 SDK 内部加密函数,hook 入口上下文,把 key、IV、入参、出参长度跑通,然后再回头写解析器。

前面提到的关键点是 mssdk 加密函数附近,重点不是 hook UIDevice 这类系统 API,而是确认 SDK 加密上下文。以下代码只保留核心形式,地址、模块名和函数名按实际样本替换。

分析中确认 sub_D71E57C 入口上下文里可以取到 AES 参数:

输出示例做脱敏处理:

这里主要用来确认加密前后的边界,避免 protobuf 外层、zlib 数据、AES 数据混在一起看。

这段 hook 的目的只是确定“哪一段是内层 protobuf,哪一段是加密结果”。具体参数位置要结合反编译伪代码和寄存器调用约定调整,不同版本偏移会变。

如果已经在抓包里拿到完整 body,可以先在本地解析外层 envelope。正常情况下可以看到类似结构:

hook 时只要能把 f4 前后的明文、密文对应上,后续分析就比较直观:外层负责路由和时间戳,内层才是设备环境主体。

这个链路可以分成三层看。

第一层是设备注册。它更像“建档”:App 把机型、系统、地区、语言、网络、IDFV、IDFA、CDID 等本地信息提交上去,服务端返回 device_idinstall_id。这一步字段比较直观,抓包后结构化即可。

第二层是安全 SDK。它不是简单重复注册字段,而是把设备环境、沙盒状态、权限状态、部分运行时信息打进加密 payload。get_token 里常见的是设备快照加 SDK blob,report 里更像启动环境上报。字段号不同,但很多语义可以互相印证。

第三层是加密封装。这里的重点不在“有没有 AES”这种表面结论,而是要确认数据边界:protobuf 明文在哪里、zlib 从哪里开始、CRC 覆盖哪些字节、XTEA IV 放在哪里、AES 外层又包了什么。只要边界确定,后续字段映射和样本比对就会稳定很多。

从隐私角度看,值得关注的点有四个:

整体看,iOS 上这类信息收集不是一个接口完成的,而是注册、SDK token、report 三条链路互相补充。单独看某个字段意义不大,最好把字段来源、首次出现位置、是否持久化、是否随重装变化这几件事一起记录。

阶段 作用 典型内容
设备注册 生成或换取 device_id / install_id 设备型号、系统版本、IDFV、地区、语言、网络、App 版本
安全 SDK 获取风控 token 或设备可信标记 设备环境、权限状态、沙盒信息、加密 blob
行为上报 上报启动、激活、环境快照 设备快照、网络状态、越狱状态、App 配置
参数 脱敏样例 来源/说明
device_model iPhone10,3 设备机型标识,可由 uname / system info 获取
hardware_model D22AP 硬件代号,和机型绑定
os iOS 操作系统
os_version 15.0.1 系统版本
resolution 1125*2436 屏幕分辨率
vendor_id 145321EA-****-****-****-4FEA7AEFF211 IDFV,
idfa 9992FD16-****-****-****-20C89336C7EC IDFA,
cdid 8DCE0718-****-****-****-5DA9BAB01B32 App 自定义持久化 ID
app_version App 版本
build_number `` 构建号
channel App Store 安装渠道
region CN 地区
language zh-Hans-CN 系统语言
tz_name Asia/Shanghai 时区名
tz_offset 28800 UTC+8
access WIFI 网络类型
carrier 中国移动 运营商展示名
is_jailbroken false 越狱状态

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
打赏
分享
最新回复 (2)
雪    币: 76
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
秒吃
2小时前
0
雪    币: 80
活跃值: (450)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1
2小时前
0
游客
登录 | 注册 方可回帖
返回