揭秘-Android刷量有多容易

做互联网开发的同学可能对流量这个词很熟悉,

在互联网行业中对一个产品的质量有一些关键指标,比如日活DAU,比如次日留存,点击率。

往往评估一个产品的变现能力会通过日活来计算。

因此也就诞生了一些灰色产业,专门在日活上做文章。

而作为金主(广告主)来说,如何判断一个产品的真实日活就显得非常重要了。

行业潜规则里,你自己家给的日活数据都要打个折。。除非能提供一些第三方的统计数据。

今天要说的是一个设计不完善的DAU系统有多容易伪造数据。

刷量手段

现在市面上做Android灰色产业的技术手段离不开这几种

· 协议破解

· 伪造用户操作

· 伪造用户数据

我们以其中"伪造用户数据"这一点为例子来展示一下如何通过技术手段实现用一个手机让一个app日活过百的。

一个正常的日活

首先我挑选了一个国外的小众SDK,类似于友盟这种有日活统计功能的。

下面是在我开始刷量之前的数据,

记住哦,从这里开始我都只用了两台手机。

可以看到DAU在3/6之前不超过5(当然这里面超过2的那些是google play上的其他真实用户)。

开始破解

首先需要确定的是它用哪个指标来进行用户唯一性的判断,

这里我通过抓包分析它的接口数据如下,

{
 "advertiser_id": "966694c4-05fa-4020-a39c-ad3bced26b62",
 "carrier": "",
 "custom_id": "",
 "screen_height": 1920,
 "screen_width": 1080,
 "limit_tracking": false,
 "ln": "zh",
 "locale": "CN",
 "device_brand": "Xiaomi",
 "device_model": "MI MAX",
 "device_type": "tablet",
 //省略无关数据
 "device_time": 1526006628156,
 "controller_version": "1.0.9.16",
 "user_metadata": {},
 "device_audio": false,
 "test_mode": false,
 "guid": "395fce37-55c3-410e-bdb8-7d20fad3c14e",
 "guid_key": "395fce37-55c3-410e-bdb8-7d20fad3c14eDUBu6wJ27y6xs7VWmNDw67DD"
}

乍看下来没发现什么特别的字段,起码没有我想象中应该出现的 device_id这种字段。

但是我发现了一个熟悉的数据模式

"advertiser_id": "966694c4-05fa-4020-a39c-ad3bced26b62",

做过SDK相关的同学会知道,这个字段跟UUID一模一样,

那么这个UUID是从哪里来的呢?

进一步猜测

到这里开始陷入僵局,接下来有两种可能性,

· sdk在app第一次启动的时候生成了UUID

· sdk在上报数据的时候从GP取的UUID

做过海外的同学可能了解,GP本身也有一个AdvertisingIdClient.Info,可以获取设备唯一性识别码,而这个编码跟上面接口中的数据长的也是一样的。

如果是第二种可能的话,要破解就比较麻烦了。

那么我们从简单的第一个可能下手。

如果把gms service删了会怎样?这样就能排除 gp的干扰了。

在这个思路下,我把手机的 GMS框架删掉后重新请求了数据,

这时候的接口数据变成下这样了,

{
 "advertiser_id": "",
 "device_id": "97b4cf89a32c3ddb08c1ee0be43d827b129a134b",
}

上面的接口数据只列出了前后的差异,并不是只有这两条哦。

可以看到原本的跟UUID一模一样的字段变空了,取而代之的是多了个 device_id字段,

也就是说,

这个SDK 在国内环境下(没有谷歌的环境)用了另一套机制用来确定设备唯一性,

然而这里再次陷入僵局。

这一长串字符是什么玩意?

山穷水尽疑无路

这个时候开始基本就是靠猜了,

一般用来确定设备唯一性的数据有这个几个

· UUID

· android_id(通过 Setttings获取)

· IMEI/MEID等移动设备唯一编号

对于上面这几种可能来说,比较可能的是第二第三个数据,

第一个为什么被我排除了呢,

因为考虑到 device_id 应该是经过了加密,而UUID加密不出来这样的字段,所以我们可以先从第二个可能性开始。

接下来就是确定它的加密方式了!

一般常见的加密方式,不外乎 md5/sha1这些,可以先暴力猜测一下,顶多20分钟就可以知道结果。

5分钟后。。。

运气不错,当尝试到 android_id + sha1 组合的时候就得到了接口中的 device_id数据。

数据有了,接下来的思路就是用 Xposed框架来 hook获取 android_id的接口了,

相对于上面的破解过程,Xposed的代码非常简单,

private void hookAndroidID(XC_LoadPackage.LoadPackageParam lpparam, final DeviceInfo info) {
 XposedBridge.log("[methodhook] hookAndroidID()");
 XposedHelpers.findAndHookMethod(Settings.Secure.class.getName(), lpparam.classLoader, "getString", ContentResolver.class, String.class, new XC_MethodHook() {
 @Override
 protected void afterHookedMethod(MethodHookParam param) throws Throwable {
 XposedBridge.log("[afterHookedMethod] hookAndroidID: " + (String)info.getAndroidId());
 param.setResult((String)"whatever you want");
 super.afterHookedMethod(param);
 }
 });
}

在hook了这个方法之后,每次sdk要去拿 android_id,都会被替换成我们设置进去的假数据。

伪造后的日活

下面来看看在经过破解之后的数据吧,

看看这暴涨100倍的日活。

如何防御刷量

其实关于破解和加密一直都是魔高一丈道高一尺的博弈,

并没有能够完全无解的加密逻辑,有的只是无限提高破解代价的逻辑。

对于上面给出的例子来说,其实只要在接口和唯一性数据的选择上给出更好的方案就可以避免被刷量了。

比如接口数据加密,不要用 device_id这种显眼的字段,

比如用下发秘钥的方式去和 android_id一起加密,这样即使拿到其中一个,也猜测不出来加密算法。

总而言之,Android 的刷量思路基本就跟上面所说的这样,

但我不鼓励大家去恶意刷量,希望在平时开发中在敏感数据的设计上多绕几个弯,这样能避免被其他人利用。

喜欢的亲们请点个关注吧!欢迎转发。

更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是机锋市场的完整功能版客户端项目源码 并非只有UI布局的项目 机锋市场作为国内数一数二的正规安卓市场其客户端项目有非常大的借鉴和学习意义的 项目运行以后会提示更新 选择否 点击任意软件即可下载 下载的时候会在下载图片上出现一个圆形进度条 下载完成以后点击安装 长按删除 项目内应用按照分类 专题 排行等来进行不同展现 本项目属于大型项目 需要耐心梳理 包括82个布局文件 38个动画效果文件以及大量的工具类 项目中集成使用了统计 支付宝 谷歌广告等模块 现在初步整理软件实现的功能: 1 可以通过通知栏告知手机上有多少款软件需要更新 2 搜索页可以搜机锋市场内的应用与机锋论坛里的附件 3 注册页面可以根据邮箱来注册 并且有邮箱 密码匹配过滤 4 有装机必备专题 可以一次性下载多个应用 5 主界面包括首页 分类页 排行页和管理页 6 排行页下有应用 游戏 电子书 风向标等几个不同类型的排行 7 分类页有最新 最热 精选 装机必备 等分类 8 应用详情页会显示应用公司 名称 评级 是否安装 简介 大小 版本 下载量 评论 截图 权限等信息 9 登录后会显示个人中心 可以充值购买付费内容 也可以开启云推送 可以在应用详情页评论吐槽 10 支持移动 联通 电信等手机充值卡充值 支持支付宝在线充值 11 支持直接更新或者卸载手机应用 注意:本源码不带服务端源码 项目内所有数据直接在机锋网获取 本项目源码为商业源码 售价50专家币 以下截图是项目编译后的工程截图 截图中的功能都已经实现 识货的朋友可以在后台在线充值后下载 涉及模块&技术 通知栏 网络检测 支付宝集成 登录注册 图片缓存 文件下载 文件扫描 充值支付 ">本项目是机锋市场的完整功能版客户端项目源码 并非只有UI布局的项目 机锋市场作为国内数一数二的正规安卓市场其客户端项目有非常大的借鉴和学习意义的 项目运行以后会提示更新 选择否 点击任意软件即可下载 下 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值