5.分析snkrs的Android的DeviceID生產規則
- 2019 年 11 月 1 日
- 筆記
分析Android的DeviceID生產
前面已經把web端的分析了一些,要想實現其實容易也難,容易是規則很容易,難是時間生成控制很難,我之前大概花了一周時間分析和梳理,然後行為測試,之前我已經講過canvas中的fp生產,但是怎麼生產唯一的canvas base64,這個就要知道webgl了,具體我不闡述。下面我實現後的一些函數結構,大家可以參考
協議
授權協議:只允許研究、學習目的的分享、使用、修改,不允許任何商業用途。轉載請註明出處,感謝。
生產出來的函數結構

本文主要講android端的deviceId生產規則,在一些請求的時候會提交這樣的闡述,這是android端,ios端類似,只是加密演算法不一致而已,我也分析過了。

在android端實現,大概是通過aes加密,android端aeskey如下
//aes public static aesKey = Buffer.from([ 16, -59, 20, -5, -54, -85, 110, 61, -51, -99, 70, -78, 11, -44, 3, 5, -120, 58, -14, 74, 13, -122, 35, 120, 14, -60, 67, 73, -58, -90, 42, 112, ]); 解密演算法
如果我們解密aes後其實會得到這樣一個對象數據,對象數據拆分,其實就是0500keylenkeylen 大概是這的格式,每次上傳deviceId,會有一個時間戳,大概演算法如下

/** * 獲取客戶端時間 */ public static getClientTime(): string { const date = new Date(); let v = `${date.getUTCFullYear()} ${(date.getUTCMonth() + 1).toString().padStart(2, '0')} ${date.getUTCDate().toString().padStart(2, '0')} `; v += `${date.getUTCHours().toString().padStart(2, '0')}:`; v += `${date.getUTCMinutes().toString().padStart(2, '0')}:${date.getUTCSeconds().toString().padStart(2, '0')}.`; v += `${date.getUTCMilliseconds()}`; return v; } 反序列化函數大概長這樣
/** * 反序列化參數 * @param str */ public static deSerializationInfo(str: string): any { const map: any = {}; let v = str.substring(4, str.length - 4); //0500 const head = v.substring(0, 4); //頭部 const mapLen = parseInt(head, 16); v = v.slice(4); for (let i = 0; i < mapLen; i++) { //key let keyHead = v.substring(0, 4); //頭部 v = v.slice(4); let len = parseInt(keyHead, 16); const key = v.substring(0, len); v = v.slice(len); //body keyHead = v.substring(0, 4); //頭部 v = v.slice(4); len = parseInt(keyHead, 16); const val = v.substring(0, len); v = v.slice(len); map[key] = val; } return map; } 
如果自己實現演算法後,盡量要進行順向加密和逆向解密,這樣保證數據是完全沒問題的,文本就點播到這裡,後面可能會寫android端akamai的生產規則,android端程式碼分析比較煩,生產規則也比較複雜,涉及到非對稱加密,所以驗證起來也比較難。目前這個akamai 的bot sdk大概完工了2個部分,一個部分是web端的,一個是android端的,後續我會開源一個球鞋監控系統和公眾號,大家可以關注公眾號接收最新的球鞋通知,nice app通過手動綁定帳號nice幫你搶snkrs鞋,他們真聰明,帳號錢也省了,出問題也不管自己的事,對吧,還可以測試一波自己的bot系統是否靠譜,厲害厲害。
部落格: https://github.com/zhaojunlike

