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