最近在研究Android设备唯一码问题,发现avbobo获取的机制有点有趣,具体分析如下:
RN
其开发采用RN引擎开发的,核心代码用js写的,放在apk/assets/index.android.bundle文件下,直接分析该文件即可
Sdcard
经过测试其打开后会在/sdcard目录下新建一个以*.id.txt格式明名的文件,里面内容格式如下: xxxxxxxxxxxxxxxxxxxxxxxxxxxx|xxxxxxxxx
ID生成算法
在bundle文件搜索该文件名找到如下代码
可知其内容生成规则为hash(uniqueId+"fake"+hash("nR9I694ZiYHDN3iqWtYYjJTui20W7hAK7OswKO0zeM"))+"|"+uniqueId
至于uniqueId如何生成的,往下看
RNDeviceInfo经过全局搜索定位到其所在类名为com.learnium.RNDeviceInfo.RNDeviceModule
具体获取uniqueId如下
即设备的android_id值
而上面的hash经猜测并验证为md5计算
因此最终的设备唯一码生成规则如下:
md5(android_id+"fake"+md5("nR9I694ZiYHDN3iqWtYYjJTui20W7hAK7OswKO0zeM"))+"|"+android_id
总结
ID生成算法简单,就一个MD5计算,知道了算法可以通过外部修改,不用修改应用程序,直接修改那个*id.txt文件内容就行
建议采用更加复杂的hash算法,无法凭其特征猜测出其采用的算法