5.分析snkrs的Android的DeviceID生產規則

分析Android的DeviceID生產

前面已經把web端的分析了一些,要想實現其實容易也難,容易是規則很容易,難是時間生成控制很難,我之前大概花了一週時間分析和梳理,然後行爲測試,之前我已經講過canvas中的fp生產,但是怎麼生產唯一的canvas base64,這個就要知道webgl了,具體我不闡述。下面我實現後的一些函數結構,大家可以參考

協議

授權協議:只允許研究、學習目的的分享、使用、修改,不允許任何商業用途。轉載請註明出處,感謝。

生產出來的函數結構

2019-11-01-16-49-32

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

在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,會有一個時間戳,大概算法如下

2019-11-01-16-54-48

  /**
   * 獲取客戶端時間
   */
  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;
  }

2019-11-01-16-58-27

如果自己實現算法後,儘量要進行順向加密和逆向解密,這樣保證數據是完全沒問題的,文本就點播到這裏,後面可能會寫android端akamai的生產規則,android端代碼分析比較煩,生產規則也比較複雜,涉及到非對稱加密,所以驗證起來也比較難。目前這個akamai 的bot sdk大概完工了2個部分,一個部分是web端的,一個是android端的,後續我會開源一個球鞋監控系統和公衆號,大家可以關注公衆號接收最新的球鞋通知,nice app通過手動綁定賬號nice幫你搶snkrs鞋,他們真聰明,賬號錢也省了,出問題也不管自己的事,對吧,還可以測試一波自己的bot系統是否靠譜,厲害厲害。

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