獲取移動裝置 可靠的唯一標示(反作弊)
在移動網際網路時代新零售行業獲取裝置可信的唯一id是一個常見的業務需求。
在我司瑞幸咖啡推廣拉新過程中,長期存在著新使用者第一杯免費的業務邏輯。可觀的利潤使得大量的黑產蜂擁而至。刷機,hook,裝置農場 等手段層出不窮,無所不用其極。
這是業務背景。

新使用者免費
而Android和ios 平臺對於裝置唯一Id的開發支援不容樂觀,在更高版本的android sdk上google 甚至遮蔽了大量業界常用的特徵api。
而imei,mac,等常規裝置標示,或是單獨生成的裝置唯一標示都存在各種缺陷。我們的裝置唯一標示必須克服類似xposed等作弊框架,,使用者許可權禁止等複雜的客戶端環境。
這是技術現狀。

原文地址:https://developer.android.com/training/articles/user-data-ids
綜上所述,在移動網際網路時代,我們需要一個通用,快速,安全獲取裝置唯一的方案。下面 介紹方案 MonitorFinger 。

一 我們如何使用ta。
1 匯入類庫,在Android平臺上我們使用的是so動態庫。
是的,我們的主體部分都是基於ndk使用c++開發完成的,原因稍後會介紹。

匯入類庫
2 初始化
初始化動作一般完成在app啟動時。
主要是特徵資訊採集,並且上傳至雲端。這裡的資訊採集需要注意的是快速,和穩定,和通用。

3 非同步獲取設定id

我們獲取的id生成規則都是在伺服器快速生成, 與裝置無關與裝置資訊有關 。 這樣做的好處有二:
1安全,標示規則不下發至客戶端,減少核心邏輯洩露風險
2快速響應,可以根據雲端策略迅速更新
二 我們如何實現ta
設計思路
把大象關冰箱一共需要三步,獲取一個可靠的裝置id也是。

1 藏起來
也就是說將裝置指紋的宣告週期與app生命週期脫離。
在Android中的具體表現就是將生產完的裝置id存放到sd卡和setting中各一。下一次啟動,嘗試讀取,併發生至雲端校驗。

sd卡目錄示意
不要小瞧這點,根據極光大佬在部落格中提到的,這一點就可以解決90%的情況。(我個人覺得,這是比例應該是沒有黑產因素的情況下)

外存方案
原文地址:http://blog.jiguang.cn/registrationid/
我們在外存的基礎上,給他新增了一點我們的創意: 圖片隱寫功能,常規的id隱藏方案是隱藏到sd的檔案中,但是這樣不管你如何修改後綴名都有暴漏的風險,因為id資訊的檔案特徵還是比較明顯的。這裡我們將其通過特定的演算法以混寫的方式寫入某些系統的圖片檔案中。
類似的方案,可以參考這篇文章:
https://blog.csdn.net/riba2534/article/details/70544076

畢竟儲存一顆珍珠的最好辦法,不是把它放進保險櫃加多少鎖,而是把它扔到大海里。
2 看清楚
多維度,快速,安全獲取裝置特徵資訊。
多維度 ,我們會獲取包括imei,mac,等常規資訊,還會獲取類似網路資訊,儲存裝置等物理資訊,以及很多不敏感的裝置資訊。 因為假的就是假的。黑產不論如何偽裝,一定會有他模擬不出來的資訊。
快速 ,獲取裝置資訊並且獲取id是不能影響業務的,不能造成長時間的程式阻塞,要做到使用者無感知。
安全
第一是資訊保安,要採用多種反逆向加固方法,防止被逆向破解。
第二是程式安全,不能因為某些許可權或機型問題,導致崩潰,影響到主業務。
針對android平臺,另外還有一點需要注意: 整體下沉
因為Android平臺xpose框架等工具存在,使得root後的裝置對於framework的hook成本極低。 所以Android端的所有業務邏輯必須下沉到ndk層,增加安全性。

xposed官網:https://repo.xposed.info/
3 聰明點
之前提到的,所有id的生成策略與裝置無關,與裝置資訊有關。 所有的id生成規則都是放到伺服器處理的,反作弊的策略也可以最快時間響應,這就屬於利用雲端的智慧去降維打擊客戶端作弊了。

之前在反編譯舊版支付寶的時候,發現其裝置id手段極為簡單,僅為兩部,第一步嘗試讀取imei,如果獲取不到直接生產uuid並且上報伺服器。(新版本已經不是如此了)
我對這種現象是理解支付寶的使用者資料來源足夠多,他對自己的大資料能力極為自信而引起的。
我們比第三方服務優勢的地方,是因為我們懂得業務。
我們在自研裝置指紋之前,採用過第三方服務。然後我們經常會發現很多對方無法發現的作弊情況。因為黑產座標通常都是產業化和批量化的,因此一定會有很多業務特徵上的體現,這一點是第三方反作弊平臺無法實現的。

常見維度和策略舉例。
比如網路環境資訊,比如對方對手機的imei和mac等資訊做了更改行為,但是通過對對方網路環境的資訊檢測,我們可以返回其之前的id資訊,而不認為是一個新的裝置。
提高作弊成本。商業行為一定是講究投入產出比例的。其實我們沒有辦法從根本上遮蔽作弊行為,但是
如果對方之前想要作弊刷到一張咖啡券的時間成本和資金成本,大於一張咖啡券的成本。那我們就成功了。

三 測試
Xposed修改檢測 pass
Root檢測(包括存在root管理工具的情況) pass
夜神,mumu等6款主流模擬器 pass
使用者不開啟許可權的過程 可以採集到其他維度的資訊,pass
四 結果和產出
內部資料
五 後續工作
內部資料
備註:
思路借鑑:1極光,友盟等推送推送服務商 公開部落格
2逆向部分app,分析其實現思路
3移動端團隊聰明的大腦,很多創新的點子