安卓手机游戏的识别码设计思路
通常安卓手机用作识别码的有IMEI、MAC、Android ID。但是这几个值在虚拟器上面都是可以改的,有些虚拟器的IMEI值就是空或者都是一样的,特别是到了后面的安卓版本,玩家是可以不允许APP获邓这些值的权限的,这个有点尴尬。
假如我们不用上述的值,还有什么办法能获得一个手机的唯一码,可以在app删除,重装,清空缓存等操作后,仍然能获取到这个相同的码吗?
我们先看看市场上有没有这种功能的app?有,包括友盟统计,百度统计等统计的SDK,它们是怎么实现手机识别的呢?它既然能统计app安装的次数,那肯定能识别出这个手机是不是已经安装过了吧?是怎么识别的呢?
最简单的就是反编译一下大厂的统计sdk看看。原来大厂的手机识别码设计思路真是超级简单:
1、第一次启动时,按固定的几个保存的地方查找手机识别码
2、如果找到,就用它。并且将那些用户误删除掉的文件再重新生成会来。
3、如果没有找到,就随机(真的就是随机)生成一个,并且在所有固定的目标生成文件保存这个识别码。
真的蛮简单粗爆的,这种方法其实还是有漏洞,就是将所有的文件都删除后,再次启动的程序会生成一个全新的识别码,这样就相当于是一个新的手机了。但现实中这种机率太低了,为什么,看看大厂们都保存到了哪儿吧:
先看百度统计的cuid,原来百度统计是将自己的cuid保存在一个叫libcuid.so的文件里面,有点夸张,居然用了so文件后缀,so是动态库文件,这样垃圾清空软件就不敢轻易删除这个so文件,(哈哈,只能说百度全家桶真的不是一般的贱,程序猿的日常--祝百度早日倒闭):
百度的cuid一共保存了以下这几个地方,在使用时按以下优先级查找
- 先在程序内部files中找 libcuid.so
- 查找接收 "com.baidu.intent.action.GALAXY" 的接收者的包名,在它包名目录下面找libcuid.so (看起来像是找百度全家桶的包在sd卡生成的缓存)
- 用 getSystemSettingValue("com.baidu.deviceid.v2")的设置值加密
- 找文件"backups/.SystemConfig/.cuid2"
- 直接用getSystemSettingValue(“com.baidu.deviceid”)的值
- 找文件"baidu/.cuid"
- 找文件"backups/.SystemConfig/.cuid"
上述缓存文件都找不到,就生成一个随机数做md5加密
android sdk<23就用一个随机生成的数,大于23则用android_id
看看百度将cuid保存的几个地方,一般用户根本就不太可能删除得干净。特别是有全家桶的情况下,更加不可能了。
然后再看看友盟统计的umid的加载:
1、 在app内部加载一个.imprint的文件
2、从这个.imprint文件中读取一个umid的值
3、如果这个值不存在,会从下面三个文件中加载
4、如果这个三个文件不存在,会将imprint的值按顺序写入上面三个文件。如果上述三个文件中的值存在,但是和imprint的值不一样,会使用上述三个文件中的值,但是没有看到imprint的值怎么处理的代码。
5、另外还有一个extid.dat的地方保存了umid
友盟的初始化umid的地方一直没有找到代码。但保存的地方就上述几个文件。
友盟的umid不是用deviceID 或者android_id,因为它的代码里面这几个id是不一样的用途,所以猜测每一次生成umid时应该和百度的cuid一样仍然是一个随机数。但友盟的代码混驳做得比较好,函数名太乱,反编译没有找到初始化umid这一步。
友盟统计UMID潜在的一个坑
https://blog.csdn.net/codezjx/article/details/51823694
这个文章提到2016年时的umid在不同机器上是有可能相同的
UMID 方案解析
https://www.cnblogs.com/Umeng/p/3885497.html
这个文章提到了新的umid在同一个设备中也是可能会变化的,但是um sdk尽量用缓存保证它的生命周期足够长,不容易变化
跟据上述的分析,友盟的umid很有可能和百度cuid一样,是用随机值生成的。
好了,上述分析完大厂的做法,我们自己游戏的uid设计思路:
1、从app内部目录找xxxxxxuid.dat文件,从中读取uid
2、固定几个缓存目录,如果不存在xxxxxxuid.dat,就用内部的数据生成,如果存在,就和内部数据对比,如果不一致,就使用缓存的更新内部的
3、如果上述的缓存都不存在,就随机生成一个uid,并且保存在内部xxxxxxuid.dat和外部xxxxxxuid.dat
4、外部的缓存目录参考友盟,定为如下三个:
/sdcard/Android/data/.xxxxxx/xxxxxxuid.dat
/sdcard/Android/obj/.xxxxxx/xxxxxxuid.dat
/data/local/tmp/.xxxxxx/xxxxxxuid.dat(这个目录可能有写权限问题,还是换一个吧)
好了,到此,我们设计了一个uid,保存在上述三个地方,应该足够保证app被删除后再重装还是能找回来了。
安卓手机游戏的识别码设计思路相关推荐
- android 升级带服务端,安卓应用升级服务端设计思路
原标题:安卓应用升级服务端设计思路 前言 去年支付宝集福卡活动玩出新花样,增加了一种花花卡,豪称全年帮你还花呗,一时火热.听到很多人在说要花花卡时,不准备玩集福卡的我准备再玩一把.进入页面功能点直接系 ...
- 2018年android游戏,2018年十佳安卓手机游戏!都是用心做出来的精品!
原标题:2018年十佳安卓手机游戏!都是用心做出来的精品! 国外手游媒体评选的2018年十佳安卓手机游戏,排名不分先后.老外的口味跟我们稍微有点不一样~看看就好 游戏名称:阿尔托的奥德赛 类型:跑酷 ...
- 安卓手机游戏测试要点
安卓手机游戏测试要点 广告位 1.上线产品是否需要加上广告,广告是否加上 <!--[if !supportLists]-->2.<!--[endif]-->广告位是否遮挡重要信 ...
- 基于android平台的手机游戏的设计与实现,基于Android平台手机游戏社区的设计与实现...
摘要: 在移动终端性能的不断提高和移动互联网的不断普及,SNS社区以及不再只停留在电脑上,逐渐的走进了手机里,与以往的社区相比,手机社区有更好的实时性,以及能够更方便的提供LBS服务功能.目前每个社区 ...
- 安卓手机应用软件UI界面设计展示PR样机模板MOGRT
9个不同角度展示安卓手机应用软件UI界面设计作品展示PR模板Mogrt|Android安卓样机模板 主要特点: 适用于 Premiere Pro CC 2021+ 适用于图像或视频 轻松改变颜色 轻松 ...
- 最新的安卓手机游戏排行榜Top10
最新的安卓手机游戏排行榜Top10火热出炉,快来看看有哪些你喜爱的手机游戏上榜了吧.更多好玩有趣的安卓手机游戏下载尽在卓易市场,众多玩家等着你的加入哦! 1.梦幻西游 梦幻西游手游延续了中国经典.传统 ...
- android 呼入电话游戏闪退,安卓手机游戏卡顿、闪退问题解决方案
安卓手机游戏卡顿.闪退问题解决方案,下面就由去游戏pro小编忆成殇为大家带来安卓手机游戏卡顿.闪退问题解决方案,剑魂之刃闪退.卡顿一直困扰着玩家,那么究竟怎样更好的玩好我们的卡顿及闪退问题呢,下面就随 ...
- sketch android设计,安卓手机预览sketch设计稿的偏方
在Android和iOS都使用同一套设计风格的情况下.我见过很大部分的视觉设计师,都喜欢并擅长从iOS端开始设计工作. Android和iOS的交互方式大大不同,设计风格也各有千秋.甚至在某一个官方设 ...
- sketch设计android,安卓手机预览sketch设计稿的偏方
在Android和iOS都使用同一套设计风格的情况下.我见过很大部分的视觉设计师,都喜欢并擅长从iOS端开始设计工作. Android和iOS的交互方式大大不同,设计风格也各有千秋.甚至在某一个官方设 ...
最新文章
- 前端知识点回顾之重点篇——JavaScript异步机制
- jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求
- 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法
- 小程序与云服务器api接口,小程序云函数调用http api进行对云数据库的操作
- java插入时间 mssql_JAVA操作数据库Datetime数据
- html向后端发送请求
- 简单看java异常栈
- idea怎么把代码放到git_在IntelliJ IDEA中同步代码到华为云git仓库 (on windows)
- 电脑中毒了怎么办 电脑中病毒的解决方法
- 数据结构 3-0 栈与队列总结
- Filenet 周报(12.02-12.08)
- flash基础动画制作
- 第九讲 函数间接展开成幂级数
- 电子元器件篇—共模电感
- python自动qq群发_自动给qq好友发消息
- iOS 微信支付和支付宝支付
- error C2059: syntax error : 'constant'
- STM32 GPS悬停飞控 (三十五)树莓派 4g视频回传
- Leetcode学习之贪心算法
- TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别