原文鏈接:比利時署球
七麥網app榜單鏈接:https://www.qimai.cn/rank
七麥網analysis參數破解請查看妄為寫代碼,鏈接為:https://mp.weixin.qq.com/s/1E_ONUnMwTFozd9-dB70Yw
前言
在此非常感謝【 妄為寫代碼】,我一直都沒有接觸過js混淆這塊,想找個簡單的js混淆學習,也沒有接觸過chrome的斷點調試,通過作者的講解,已經了解了chrome的斷點調試,也學會了使用snippets進行js測試,也了解了打斷點的需要注意的函數,收獲很大,再次感謝。該作者還有其它網站解析的原創文,有幾篇寫的也很好,有需要的朋友可以關注下。
寫這篇意義,1.記錄自己的學習情況;2.在原文的情況下,進一步完善。
問題
原文只分析到,第一頁的情況,獲取了第一頁的analysis,但是如果滾動條往下滾,可以發現analysis是有了新的變化,同時需要以下7個參數,並且你繼續往下滾,每次的analysis都是會變的。
查看斷點,發現出現以下函數:
解決
其實最終還是要進入到這個函數體里面:
紅色框框的代碼是轉折的重點,一步步點擊,你可以看到,這個函數把參數都放進m這個數組里面去了,同時綠色的框框,把m數組進行了排序,生成了一個字符串。可以看出,就是把所有參數合並在一起了。再往下走,你會發現進入了v函數
就是原文里面講的v函數。把拼接的參數,先運行一遍v函數,運行完你會發現m變成這個了
再往下運行,你會發現,最終的m是這樣
獲取到這個m就成功了,后面跟原文一樣,執行v(C(m_str,b_str))就行
這里說一個改動的地方,原文是取了44的長度,這里直接返回整個長度。
在此附上我所有的代碼
qimai .js
function C(a, n) { // n || (n = s()), a = a["split"](""); for (var t = a["length"], e = n["length"], r = "charCodeAt", i = 0; i < t; i++) a[i] = m(a[i][r](0) ^ n[i % e][r](0)); return a["join"]("") } function m(n) { var t = "fromCharCode"; return String[t](n) } function v(n) { return n_fun(encodeURIComponent(n)["replace"](/%([0-9A-F]{2})/g, function (a, n) { return m("0x" + n) })) } function n_fun(t) { var n; n = e_from(t.toString(), "binary"); return q_fromB(n) } function e_from(t_str, b) { var r = t_str.length; t = new Uint8Array(r); var i = t_write(t, t_str, b, r); return t } function W(t) { for (var e = [], n = 0; n < t.length; ++n) e.push(255 & t.charCodeAt(n)); return e } function K(t, e, n, r) { for (var i = 0; i < r && !(i + n >= e.length || i >= t.length); ++i) e[i + n] = t[i]; return i } function t_write(t, e, b, r) { return K(