首页
社区
课程
招聘
DeviceCheck 防护方案探讨
发表于: 2024-5-19 19:57 4421

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的方案大家绕过成本高不高.或者有别的防刷量方案也可以指点下

0x04 大概看了下token生成逻辑.因为群里很多大佬都说他们可以批量生产DeviceCheck的token.所以肯定还是能绕过

生成token的函数 _encryptData:serverSyncedDate:error:大致流程

1. 初始化和日志记录

函数开始时,获取并保留参数a3a4,并记录日志消息“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对象保存加密数据,并记录二进制日志。最后,释放所有分配的资源并返回结果。通过以上分析来看.函数内部没有唯一标识符.所以关键点在于证书.继续分析下证书有没有被伪造的可能

使用的加密算法

  1. AES-GCM:高级加密标准(AES)的一种运行模式,结合了计数器模式和伽罗华域认证,提供高效的加密和数据认证。
  2. ECDH:基于椭圆曲线的Diffie-Hellman密钥交换协议,用于安全地交换密钥。
  3. HKDF:基于HMAC的密钥提取和扩展函数,用于从原始密钥材料中派生高质量的密钥。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 3
活跃值: (193)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
求个大佬群。。
2024-5-22 09:01
0
游客
登录 | 注册 方可回帖
返回
//