众所周知 耐克nick 阿迪adidas 德州仪器(TI ti.com) 得捷电子(digikey )贸泽电子(mouser)等较大的芯片 购物之类的网站都引入了akamai的js防机器人识别系统,现在最新的akamai版本是1.7,如果想实现http抢购,那么破解akamai的js 实现sensor_data 然后换取相关有用的_abck是必须的,然后模拟tsl(模拟浏览器怎么发送请求的 不是简单的python go php等)使用个requests就可以的,然后发送相关的数据,那么问题就解决了。
其中 第一部分的函数体 200来行到底是干啥的呢,慢慢分析 如下文
if (function(t) {
var a = {};
t[_ac[195]] = a,
a[_ac[261]] = function() {
var t = bmak[_ac[408]]();
return !(!~t[_ac[74]](_ac[326]) || !(~t[_ac[74]](_ac[298]) || ~t[_ac[74]](_ac[463]) || ~t[_ac[74]](_ac[38])))
}
,
a[_ac[155]] = _ac[109],
a[_ac[713]] = !1,
a[_ac[628]] = _ac[109],
a[_ac[61]] = _ac[109],
a[_ac[752]] = {},
a[_ac[333]] = -999999,
a[_ac[7]] = function() {
a[_ac[752]] = {}
}
,
a[_ac[205]] = function() {
a[_ac[713]] = !0;
try {
var t = 0;
t = Date[_ac[82]] ? Date[_ac[82]]() : +new Date;
var e = a[_ac[35]]();
a[_ac[155]] = e[_ac[518]](/\"/g, _ac[277]);
var n = 0;
n = Date[_ac[82]] ? Date[_ac[82]]() : +new Date,
a[_ac[333]] = n - t
} catch (t) {}
}
,
a[_ac[92]] = function() {
return (new Date)[_ac[757]]()
}
,
a[_ac[35]] = function() {
var t = screen[_ac[98]] ? screen[_ac[98]] : -1
, e = screen[_ac[722]] ? screen[_ac[722]] : -1
, n = navigator[_ac[454]] ? navigator[_ac[454]] : -1
, o = navigator[_ac[578]] ? navigator[_ac[578]]() : -1
, m = navigator[_ac[258]] ? navigator[_ac[258]] : -1
, r = _ac[783];
r = bmak[_ac[614]] ? bmak[_ac[729]] ? a[_ac[140]]() : a[_ac[150]]() : _ac[270];
return [a[_ac[382]](_ac[625]), a[_ac[382]](_ac[487]), r, a[_ac[83]](), a[_ac[54]](), a[_ac[158]](), a[_ac[1]](), a[_ac[92]](), a[_ac[174]](), t, e, n, o, m][_ac[179]](_ac[640])
}
,
a[_ac[480]] = [_ac[46], _ac[756], _ac[512], _ac[709], _ac[677], _ac[272], _ac[129], _ac[377], _ac[373], _ac[708], _ac[549], _ac[719], _ac[588], _ac[748], _ac[593], _ac[495], _ac[560], _ac[802], _ac[127], _ac[460], _ac[435], _ac[43], _ac[673], _ac[507], _ac[641], _ac[293], _ac[500]],
a[_ac[83]] = function() {
if (void 0 === navigator[_ac[196]])
return null;
for (var t = a[_ac[480]][_ac[798]], e = _ac[388], n = 0; n < t; n++) {
var o = a[_ac[480]][n];
void 0 !== navigator[_ac[196]][o] && (e = e + _ac[226] + n)
}
return e
}
,
a[_ac[382]] = function(t) {
try {
if (void 0 !== a[_ac[752]][_ac[382]])
return a[_ac[752]][_ac[382]];
var e = -1;
if (!a[_ac[261]]()) {
var n = document[_ac[149]](_ac[382]);
if (n[_ac[104]] = 280,
n[_ac[654]] = 60,
n[_ac[363]][_ac[684]] = _ac[621],
_ac[554] == typeof n[_ac[458]]) {
var o = n[_ac[458]](_ac[472]);
o[_ac[580]] = _ac[309],
o[_ac[352]](100, 5, 80, 50),
o[_ac[580]] = _ac[182],
o[_ac[139]] = _ac[192],
o[_ac[75]](t, 10, 40),
o[_ac[59]] = _ac[41],
o[_ac[558]](80, 10, 20, 0, Math[_ac[365]], !1),
o[_ac[238]]();
var m = n[_ac[208]]();
e = 0;
for (var r = 0; r < m[_ac[798]]; r++) {
e = (e << 5) - e + m[_ac[776]](r),
e &= e
}
e = e[_ac[687]]();
var i = document[_ac[149]](_ac[382]);
i[_ac[104]] = 16,
i[_ac[654]] = 16;
var c = i[_ac[458]](_ac[472]);
c[_ac[139]] = _ac[617],
a[_ac[628]] = Math[_ac[744]](1e3 * Math[_ac[70]]())[_ac[687]](),
c[_ac[75]](a[_ac[628]], 1, 12);
for (var b = i[_ac[208]](), d = 0, s = 0; s < b[_ac[798]]; s++) {
d = (d << 5) - d + b[_ac[776]](s),
d &= d
}
a[_ac[61]] = d[_ac[687]]()
}
}
return e
} catch (t) {
return _ac[232]
}
}
,
a[_ac[140]] = function() {
var t = 200
, e = bmak[_ac[138]]()
, n = [];
if (!a[_ac[261]]() && document[_ac[42]]) {
var o = [_ac[338], _ac[781]]
, m = [0, 0]
, r = [0, 0]
, i = document[_ac[149]](_ac[313]);
i[_ac[363]][_ac[28]] = _ac[108];
var c;
for (c = 0; c < o[_ac[798]]; c++) {
var b = document[_ac[149]](_ac[351]);
b[_ac[630]] = _ac[227],
b[_ac[363]][_ac[99]] = _ac[456],
b[_ac[363]][_ac[22]] = o[c],
i[_ac[743]](b)
}
for (document[_ac[42]][_ac[743]](i),
c = 0; c < i[_ac[730]][_ac[798]]; c++)
b = i[_ac[730]][c],
m[c] = b[_ac[206]],
r[c] = b[_ac[629]];
if (document[_ac[42]][_ac[318]](i),
bmak[_ac[138]]() - e > t)
return _ac[388];
var d = [_ac[170], _ac[55], _ac[467], _ac[534], _ac[230], _ac[803], _ac[346], _ac[483], _ac[242], _ac[52], _ac[405], _ac[464], _ac[711], _ac[32], _ac[735], _ac[509], _ac[40], _ac[618], _ac[632], _ac[561], _ac[596], _ac[734], _ac[471], _ac[234], _ac[644], _ac[566], _ac[680], _ac[265], _ac[686], _ac[60], _ac[793], _ac[638], _ac[661], _ac[396], _ac[290], _ac[587], _ac[21], _ac[364], _ac[537], _ac[381], _ac[747], _ac[658], _ac[447], _ac[633], _ac[260]]
, s = document[_ac[149]](_ac[313]);
s[_ac[363]][_ac[28]] = _ac[108];
for (var k = [], l = 0; l < d[_ac[798]]; l++) {
var u = document[_ac[149]](_ac[313]);
for (c = 0; c < o[_ac[798]]; c++) {
var b = document[_ac[149]](_ac[351]);
b[_ac[630]] = _ac[227],
b[_ac[363]][_ac[99]] = _ac[456],
b[_ac[363]][_ac[22]] = d[l] + _ac[226] + o[c],
u[_ac[743]](b)
}
s[_ac[743]](u)
}
if (bmak[_ac[138]]() - e > t)
return _ac[388];
document[_ac[42]][_ac[743]](s);
for (var l = 0; l < s[_ac[730]][_ac[798]]; l++) {
var _ = !1
, u = s[_ac[730]][l];
for (c = 0; c < u[_ac[730]][_ac[798]]; c++) {
var b = u[_ac[730]][c];
if (b[_ac[206]] !== m[c] || b[_ac[629]] !== r[c]) {
_ = !0;
break
}
}
if (_ && k[_ac[102]](l),
bmak[_ac[138]]() - e > t)
break
}
document[_ac[42]][_ac[318]](s),
n = k[_ac[449]]()
}
return n[_ac[179]](_ac[226])
}
,
a[_ac[150]] = function() {
var t = [];
if (!a[_ac[261]]() && document[_ac[42]]) {
var e = [_ac[457], _ac[338], _ac[781]]
, n = [0, 0, 0]
, o = [0, 0, 0]
, m = document[_ac[149]](_ac[351]);
m[_ac[630]] = _ac[227],
m[_ac[363]][_ac[99]] = _ac[456];
var r;
for (r = 0; r < e[_ac[798]]; r++)
m[_ac[363]][_ac[22]] = e[r],
document[_ac[42]][_ac[743]](m),
n[r] = m[_ac[206]],
o[r] = m[_ac[629]],
document[_ac[42]][_ac[318]](m);
for (var i = [_ac[170], _ac[55], _ac[467], _ac[534], _ac[230], _ac[803], _ac[346], _ac[483], _ac[242], _ac[52], _ac[405], _ac[464], _ac[711], _ac[32], _ac[735], _ac[509], _ac[40], _ac[618], _ac[632], _ac[561], _ac[596], _ac[734], _ac[471], _ac[234], _ac[644], _ac[566], _ac[680], _ac[265], _ac[686], _ac[60], _ac[793], _ac[638], _ac[661], _ac[396], _ac[290], _ac[587], _ac[21], _ac[364], _ac[537], _ac[381], _ac[747], _ac[658], _ac[447], _ac[633], _ac[260]], c = [], b = 0; b < i[_ac[798]]; b++) {
var d = !1;
for (r = 0; r < e[_ac[798]]; r++)
if (m[_ac[363]][_ac[22]] = i[b] + _ac[226] + e[r],
document[_ac[42]][_ac[743]](m),
m[_ac[206]] === n[r] && m[_ac[629]] === o[r] || (d = !0),
document[_ac[42]][_ac[318]](m),
d) {
c[_ac[102]](b);
break
}
}
t = c[_ac[449]]()
}
return t[_ac[179]](_ac[226])
}
,
a[_ac[174]] = function() {
return _ac[554] == typeof window[_ac[695]] || _ac[554] == typeof window[_ac[576]] || _ac[554] == typeof window[_ac[590]]
}
,
a[_ac[1]] = function() {
return !!a[_ac[357]]()
}
,
a[_ac[54]] = function() {
return !!a[_ac[701]]()
}
,
a[_ac[158]] = function() {
return !!a[_ac[659]]()
}
,
a[_ac[701]] = function() {
try {
return !!window[_ac[145]]
} catch (t) {
return !1
}
}
,
a[_ac[659]] = function() {
try {
return !!window[_ac[581]]
} catch (t) {
return !1
}
}
,
a[_ac[357]] = function() {
return !!window[_ac[706]]
}
}(bmak),
其实就是检测了电脑的各种信息 小到字体 大到存储 插件 等等14个吧 然后增加了几个属性
分析完成后其实就是下面几行代码
var a = {};
t.fpcf = a, //给bmak 和 t 都挂在 属性 fpcf = {}
a.sf4 = false, //主要是看下是手机 还是 mac iPhone 因为是电脑 直接返回false
a.fpValstr = "-1",
a.fpValCalculated = !1,
a.rVal = "-1",
a.rCFP = "-1",
a.cache = {},
a.td = -999999,
a.clearCache = function() {a.cache = {}},
a.fpVal = function() {
a.fpValCalculated = !0; //改为true了
var t = +new Date;
a.fpValstr =a.data(); //这个信息自己去分析吧,就是指纹信息然后json.";"了下,感觉还不行还特么的字符串替换了么
var n = +new Date;
a.td = n - t
},