Android應用分身檢測

最近app在推廣過程中發現有大量的用戶使用小號來領取邀請獎勵,而小號的操作往往是利用多開軟件開啓應用分身來登錄。爲此,我需要區分出本體和克隆體。

當今市面上流行的分身主要有三類

1.修改Framework

手機廠商實現的分身功能就是用這種方式實現的

檢測方案:手上有個小米測試機,正好自帶分身,通過getFileDir()的api試了下,在本體得到的是data/data/com.xxx.xxx/files,克隆體得到的是data/user/10/com.xxx.xxx/files

2.修改apk

通過反編譯apk,修改apk包名、簽名等將apk僞裝成另外一個app。市面上常見的第三方多開app大部分都是使用的這種技術。其特點是每次製作一個分身都需要時間拷貝、並且在應用列表中可以看到

檢測方案:
跟上面一樣,可以用getFileDir()來檢測,只不過一個是data/data/com.xxx.xxx/files,另一個是data/data/com.xyz.xyz/files

3.虛擬操作系統

虛擬一個操作系統,克隆體app在這個虛擬系統中運行,在應用列表不可見,代表產品:360分身大師

檢測方案:
這個據說是唯一一種繞過getFileDir()的分身方式,確實這種方式讓我耗費了很長時間,下面以360的分身大師舉例,詳細說下分析過程

  1. 首先通過getFileDir()嘗試,本體和克隆體輸出一致。失敗!!
  2. 通過在本體和克隆體登錄不同賬號獲取SP中存儲的賬號信息,確定獲取的信息不同,證明存儲位置不一致
  3. 通過文件管理器查看最近修改的文件,發現系統根目錄下有一個docker的文件夾,裏面包含了跟根目錄類似的結構,在其裏面的Android/data下就會發現我們自己的包名,分身的本地數據就存放在這裏。
  4. 找到分身的本地存儲後,本想向其中存儲數據用來標記是否爲分身,但本體運行時報了一個無權限寫入的異常,因此改爲了判斷當前是否有對該目錄的寫入權限

PS:據說“平行空間”原理和“360分身大師”相同,經測試發現通過getDirFile()就可以判斷出來,至此,分身檢測基本完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章