天天看點

JS逆向 -- 分析某站buvid3和_uuid的加密過程

作者:之乎者也吧呀

一、通過抓包,發現buvid3值存在與該連結的響應cookie中

JS逆向 -- 分析某站buvid3和_uuid的加密過程

二、Python代碼實作

import requests
def 擷取buvid3():
    視訊位址='https://www.bilibili.com/video/BV1vo4y1A7ED/'
    頭資訊={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
    }
    響應=requests.get(url=視訊位址,headers=頭資訊)
    buvid3=響應.cookies.get_dict()
    print(buvid3['buvid3'])


擷取buvid3()           

三、重新清除cookie,重新整理頁面,全局搜尋_uuid的值,并在關鍵處下斷,這裡是一個三元運算符,如果空值,就指派Object(l.a)()

JS逆向 -- 分析某站buvid3和_uuid的加密過程

四、進入Object(l.a)()函數

JS逆向 -- 分析某站buvid3和_uuid的加密過程
JS逆向 -- 分析某站buvid3和_uuid的加密過程

五、将該函數複制到js編輯器,然後再找a函數和s函數,a函數又用到了o函數,正好都在附近,最終js代碼加密如下

function getuuid(){
        var e = a(8)
          , t = a(4)
          , r = a(4)
          , n = a(4)
          , o = a(12)
          , i = (new Date).getTime();
        return e + "-" + t + "-" + r + "-" + n + "-" + o + s((i % 1e5).toString(), 5) + "infoc"
    }
    
    
function a(e) {
        for (var t = "", r = 0; r < e; r++)
            t += o(16 * Math.random());
        return s(t, e)
    }
function s(e, t) {
        var r = "";
        if (e.length < t)
            for (var n = 0; n < t - e.length; n++)
                r += "0";
        return r + e
        }
function o(e) {
        return Math.ceil(e).toString(16).toUpperCase()
    }           

六、運作結果

JS逆向 -- 分析某站buvid3和_uuid的加密過程