原文链接:比利时署球
七麦网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(