DeviceCheck/identifierForVendor安全性问询:防重复兑换机制是否可被绕过
关于DeviceCheck/identifierForVendor防刷机制的绕过风险分析
嘿,针对你想用DeviceCheck或identifierForVendor防止同一设备重复领取新用户福利的问题,我结合实际开发经验和黑灰产的常见手段,给你拆解下这三种场景的风险:
一、越狱设备完全可以绕过
越狱设备拿到了系统最高权限,对付这两个机制毫无压力:
- 对于
identifierForVendor:这个标识存储在系统容器内,越狱后可以直接修改对应文件,或者用Frida、Substrate这类hook工具篡改API返回值,甚至不用重启APP就能生成新的ID。 - 对于DeviceCheck:虽然它依赖和苹果服务器的交互,但越狱后可以hook网络请求、篡改与苹果的交互数据,甚至有工具能模拟设备硬件指纹,骗过苹果的校验流程,生成有效的令牌。
二、自定义模拟器轻松绕过
不管是修改过配置的Xcode模拟器,还是第三方模拟器工具,绕过这类设备标识机制没任何难度:
identifierForVendor在模拟器环境下本身就是可配置的,要么修改模拟器的plist文件,要么启动时注入参数就能更换ID,部分第三方模拟器甚至直接提供了可视化的设备ID修改按钮。- DeviceCheck在模拟器环境下苹果的校验标准远低于真机,自定义模拟器可以直接伪造DeviceCheck相关数据,甚至跳过和苹果服务器的交互,自行生成假令牌供客户端使用。
三、iOS僵尸网络确实存在,批量刷奖毫无压力
首先明确:iOS僵尸网络是真实存在的,这类网络主要分两种:一种是被恶意软件控制的大量越狱真机,另一种是云服务商提供的批量模拟器/云真机实例。
不管哪一种,都能轻松绕过你的防刷机制:
- 越狱真机组成的僵尸网络,每个设备都能用上文的方法伪造标识,批量生成新的"设备ID",重复领取福利。
- 云真机/模拟器的每个实例都是独立环境,直接重置或生成新的
identifierForVendor即可,甚至能模拟不同的DeviceCheck令牌,实现批量自动化操作。
额外防刷建议
只依赖设备标识的防刷机制远远不够,建议叠加多种验证方式:
- 要求用户绑定手机号、邮箱等真实身份信息,将设备标识与真实用户身份绑定。
- 加入行为分析,比如检测操作频率、点击路径是否符合正常用户行为(比如一秒完成领取流程肯定存在异常)。
- DeviceCheck的校验必须在后端完成,绝对不能信任客户端返回的结果,后端直接调用苹果官方API验证令牌有效性。
- 针对领现金这类高风险操作,增加人机验证(如滑动验证、短信验证码)。
内容的提问来源于stack exchange,提问作者Anters Bear
相关产品推荐
相关产品推荐

