最近在研究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算法,無法憑其特徵猜測出其採用的算法