引言:
在移动互联网时代新零售行业获取设备可信的唯一id是一个常见的业务需求。
在app推广拉新过程中,长期存在着新用户第一杯免费的业务逻辑。可观的利润使得大量的黑产蜂拥而至。刷机,hook,设备农场 等手段层出不穷,无所不用其极。
这是业务背景。
而Android和ios 平台对于设备唯一Id的开发支持不容乐观,在更高版本的android sdk上google 甚至屏蔽了大量业界常用的特征api。
而imei,mac,等常规设备标示,或是单独生成的设备唯一标示都存在各种缺陷。我们的设备唯一标示必须克服类似xposed等作弊框架,,用户权限禁止等复杂的客户端环境。
这是技术现状。
原文地址:https://developer.android.com/training/articles/user-data-ids
综上所述,在移动互联网时代,我们需要一个通用,快速,安全获取设备唯一的方案。下面介绍方案 MonitorFinger。
一 我们如何使用ta。
1 导入类库,在Android平台上我们使用的是so动态库。
是的,我们的主体部分都是基于ndk使用c++开发完成的,原因稍后会介绍。
2 初始化
初始化动作一般完成在app启动时。
主要是特征信息采集,并且上传至云端。这里的信息采集需要注意的是快速,和稳定,和通用。
3 异步获取设置id
我们获取的id生成规则都是在服务器快速生成,与设备无关与设备信息有关。 这样做的好处有二:
1安全,标示规则不下发至客户端,减少核心逻辑泄露风险
2快速响应,可以根据云端策略迅速更新
二 我们如何实现ta
设计思路
把大象关冰箱一共需要三步,获取一个可靠的设备id也是。
1 藏起来
也就是说将设备指纹的声明周期与app生命周期脱离。
在Android中的具体表现就是将生产完的设备id存放到sd卡和setting中各一。下一次启动,尝试读取,并发生至云端校验。
不要小瞧这点,根据极光大佬在博客中提到的,这一点就可以解决90%的情况。(我个人觉得,这是比例应该是没有黑产因素的情况下)
原文地址:http://blog.jiguang.cn/registrationid/
我们在外存的基础上,给他新增了一点我们的创意: 图片隐写功能,常规的id隐藏方案是隐藏到sd的文件中,但是这样不管你如何修改后缀名都有暴漏的风险,因为id信息的文件特征还是比较明显的。这里我们将其通过特定的算法以混写的方式写入某些系统的图片文件中。
类似的方案,可以参考这篇文章:
https://blog.csdn.net/riba2534/article/details/70544076
毕竟保存一颗珍珠的最好办法,不是把它放进保险柜加多少锁,而是把它扔到大海里。
2 看清楚
多维度,快速,安全获取设备特征信息。
多维度,我们会获取包括imei,mac,等常规信息,还会获取类似网络信息,储存设备等物理信息,以及很多不敏感的设备信息。 因为假的就是假的。黑产不论如何伪装,一定会有他模拟不出来的信息。
快速,获取设备信息并且获取id是不能影响业务的,不能造成长时间的程序阻塞,要做到用户无感知。
安全
第一是信息安全,要采用多种反逆向加固方法,防止被逆向破解。
第二是程序安全,不能因为某些权限或机型问题,导致崩溃,影响到主业务。
针对android平台,另外还有一点需要注意:整体下沉
因为Android平台xpose框架等工具存在,使得root后的设备对于framework的hook成本极低。 所以Android端的所有业务逻辑必须下沉到ndk层,增加安全性。
xposed官网:https://repo.xposed.info/
3 聪明点
之前提到的,所有id的生成策略与设备无关,与设备信息有关。 所有的id生成规则都是放到服务器处理的,反作弊的策略也可以最快时间响应,这就属于利用云端的智慧去降维打击客户端作弊了。
之前在反编译旧版支付宝的时候,发现其设备id手段极为简单,仅为两部,第一步尝试读取imei,如果获取不到直接生产uuid并且上报服务器。(新版本已经不是如此了)
我对这种现象是理解支付宝的用户数据来源足够多,他对自己的大数据能力极为自信而引起的。
我们比第三方服务优势的地方,是因为我们懂得业务。
我们在自研设备指纹的同时,采用过很多第三方服务。然后我们经常会发现很多对方无法发现的作弊情况。因为黑产坐标通常都是产业化和批量化的,因此一定会有很多业务特征上的体现,这一点是第三方反作弊平台无法实现的。
常见维度和策略举例。
比如网络环境信息,比如对方对手机的imei和mac等信息做了更改行为,但是通过对对方网络环境的信息检测,我们可以返回其之前的id信息,而不认为是一个新的设备。
提高作弊成本。商业行为一定是讲究投入产出比例的。其实我们没有办法从根本上屏蔽作弊行为,但是
如果对方之前想要作弊刷到一张咖啡券的时间成本和资金成本,大于一张咖啡券的成本。那我们就成功了。
三 测试
Xposed修改检测 pass
Root检测(包括存在root管理工具的情况) pass
夜神,mumu等6款主流模拟器 pass
用户不开启权限的过程 可以采集到其他维度的信息,pass
备注:
思路借鉴:1极光,友盟等推送推送服务商 公开博客
2逆向部分app,分析其实现思路
3移动端团队聪明的大脑,很多创新的点子