-
-
DeviceCheck 防护方案探讨
-
发表于:
2024-5-19 19:57
4421
-
0x01 大厂用来判断新增
- 别的大厂app是这么做的,只要来一次DeviceCheckInfo,你标识一次,下次这个指纹来,在你的app上是新注册的,但dchck已经标识过了,就可以说明被改了
0x02 我想用来判断3日活跃7日活跃
- 因为我们的app需要投放广告到各个渠道让别人打开我们的app.有些渠道会通过改机去拉起我的app(白白损失广告费).
- 所以想通过这个来存储下(3日活跃7日活跃这两个状态)到时候和设备指纹去比较.如果设备指纹显示3日没有拉活,但是DeviceCheckInfo却显示有拉活就直接风控这个设备,此次拉起不做记数据
- 0x03 还可以通过DeviceCheckInfo的上次修改时间来做一些和设备指纹上次打开app的时间来做下风控判断
0x03 想问下0x02的方案大家绕过成本高不高.或者有别的防刷量方案也可以指点下
生成token的函数 _encryptData:serverSyncedDate:error:
大致流程
1. 初始化和日志记录
函数开始时,获取并保留参数a3
和a4
,并记录日志消息“Encrypting data...”。
2. 获取客户端App ID并进行编码
函数通过-[DCContext clientAppID]
获取客户端应用ID,并使用sel_dataUsingEncoding_
进行编码,获取其字节长度和字节内容。
3. 准备数据缓冲区
函数分配内存以容纳需要加密的数据,包括客户端App ID的字节长度和内容。
4. 使用AES-GCM进行加密准备
函数通过调用ccaes_gcm_encrypt_mode()
来获取AES-GCM模式,并准备必要的缓冲区和变量。
5. 创建密钥引用
函数使用aks_ref_key_create
创建一个密钥引用,并获取公钥。如果公钥长度不符合预期,则记录错误日志并返回。
6. 打印公钥和计算ECDH共享密钥
函数打印随机生成的公钥,然后通过调用aks_ref_key_compute_key
计算ECDH共享密钥,并将其打印出来。
7. 使用HKDF派生密钥和初始化向量
函数使用cchkdf
函数,通过HKDF从共享密钥中派生出加密密钥和初始化向量(IV),并分别打印出来。
8. 使用AES-GCM进行加密
函数调用ccgcm_one_shot
使用AES-GCM模式对数据进行加密,并打印生成的标签(tag)。
9. 处理加密结果并释放资源
函数处理加密结果,创建NSData对象保存加密数据,并记录二进制日志。最后,释放所有分配的资源并返回结果。通过以上分析来看.函数内部没有唯一标识符.所以关键点在于证书.继续分析下证书有没有被伪造的可能
使用的加密算法
- AES-GCM:高级加密标准(AES)的一种运行模式,结合了计数器模式和伽罗华域认证,提供高效的加密和数据认证。
- ECDH:基于椭圆曲线的Diffie-Hellman密钥交换协议,用于安全地交换密钥。
- HKDF:基于HMAC的密钥提取和扩展函数,用于从原始密钥材料中派生高质量的密钥。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)