hook android api伪造设备信息做刷量
概述
Android平台上app的统计数据都是基于Android的设备信息的,比如首次使用(激活),活跃(日活跃DAU,月活跃MAU)等都需要根据设备唯一信息来统计。不仅统计,业务需求也都是根据设备唯一信息来展开的,比如签到,同一台设备不能签第二次,比如运营推广发积分发红包,每台手机只能领取一次,再比如app分发渠道统计应用的激活,同一台手机第一次使用某app才算激活等等这些场景都需要靠设备信息来唯一确定一台手机。
怎么唯一确定一台Android手机,Android程序员都知道,
- IMEI
- IMSI
- SIM_SER sim卡序列号
- MAC地址,
- Android_ID android系统第一次启动生成的一个唯一ID
- Brand 手机品牌
- Model 手机型号
这些信息基本能唯一定位一台手机,为了便于使用,我们的设备ID一般取其中的部分字段做hash,比如hash(MAC地址+IMEI)。
有些刷量的工具依赖于虚拟机,开发虚拟机或者修改android模拟器来模拟不同的硬件设备。从分层角度上看,android系统从下到上可以抽象为这几层 :设备硬件层,应用框架层API,和应用APP,其中设备+API 两层就可以看做是实现了虚拟机。
应用层App直接与API打交道,相同的api调用,不同的返回就相当于不同的虚拟机了。
- APP
API
硬件设备
hook简介
Cydia Substrate hook框架可以hook Java和 C native层的代码,运行时改变代码的实现,是一个很强大的hook工具,也能做为很强大的调试工具。
官网地址:http://www.cydiasubstrate.com/
SDK下载地址:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip
demo地址:https://github.com/zencodex/cydia-android-hook.git
hook框架:https://cache.saurik.com/apks/com.saurik.substrate_0.9.4010.apk
Cydia Substrate的使用:
- 前提,手机需要root权限
- 手机上安装hook框架apk
- 参考demo编写hook的源程序
- 使用hook框架程序link,重启手机验证
注意hook是针对这个系统的,而不是某个特定的app。某个api被hook后,比如获取手机号的api被hook,这台手机上所有的app获取的手机号都是被修改后的手机号,因此,如果手机上的设备相关api都被hook了,相当于是虚拟了一个新的手机了。
cydia substrate的使用可以参考这两篇文章