1.加密流程分析
先看看请求
参数:一个sensor_data,包含了浏览器信息和轨迹信息,包含58个数组,根据58个数组,进行排序,加密生成sensor_data
返回:true并且cookie中包含||-1||这样特征的abck就是破盾成功了,则成功,否则失败
请求地址:每天都会变,在页面的script标签中
2.sensor_data分析
参数是由一个大数组组成,然后加密
先将js解混淆,方便分析
加密参数分析,这里只给出一部分,后面的请自己分析
1.固定值-100
2.浏览器信息
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36,uaend,12147,20030107,zh-CN,Gecko,3,0,0,0,411182,0,1920,1040,1920,1080,2400,340,1920,,cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1,8100,0.589200354294,835576031539.5,0,loc:
--------------------------------------------------------------------------------
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
window["window"]["navigator"]["userAgent"]["replace"](/\\|"/g, "")
--------------------------------------------------------------------------------
,uaend
--------------------------------------------------------------------------------
,12147
值计算出来
window["window"]["navigator"]["userAgent"]["replace"](/\\|"/g, "")
var kY = d0["window"]["innerWidth"] ? 1 : 0;
var MY = d0["window"]["outerWidth"] ? 1 : 0;
var RY = d0["window"]["addEventListener"] ? pn[7] : pn[3];
var nY = d0["window"]["XMLHttpRequest"] ? 1 : 0;
var DY = d0["window"]["XDomainRequest"] ? 1 : 0;
var HY = d0["window"]["emit"] ? pn[7] : 0;
var zY = d0["window"]["DeviceOrientationEvent"] ? pn[7] : 0;
var AY = d0["window"]["DeviceMotionEvent"] ? 1 : pn[3];
var WY = d0["window"]["TouchEvent"] ? 1 : 0;
var xY = d0["window"]["spawn"] ? pn[7] : pn[3];
var cY = d0["window"]["chrome"] ? 1 : 0;
var NY = d0["Function"]["prototype"].bind ? 1 : 0;
var OY = d0["window"]["Buffer"] ? 1 : 0;
var rY = d0["window"]["PointerEvent"] ? 1 : pn[3];
var sY = RY + (nY << 1) + (DY << 2) + (HY << 3) + (zY << 4) + (AY << 5) + (WY << 6) + (xY << 7) + (kY << 8) + (MY << 9) + (cY << 10) + (NY << 11) + (OY << 12) + (rY << 13);
--------------------------------------------------------------------------------
,20030107
d0["navigator"]["productSub"]
--------------------------------------------------------------------------------
,zh-CN
d0["navigator"]["language"]
--------------------------------------------------------------------------------
,Gecko
d0["navigator"]["product"]
--------------------------------------------------------------------------------
,3
d0["navigator"]["plugins"]["length"]
--------------------------------------------------------------------------------
,0
d0["window"]["_phantom"]
--------------------------------------------------------------------------------
,0
d0["window"]["webdriver"]
--------------------------------------------------------------------------------
,0
d0["window"]["domAutomation"]
--------------------------------------------------------------------------------
,411182
d0["parseInt"](d0["window"].bmak["startTs"] / pn[34], 10)
--------------------------------------------------------------------------------
,0
--
,1920
d0["window"]["screen"] ? d0["window"]["screen"]["availWidth"]
--
,1040
d0["window"]["screen"] ? d0["window"]["screen"]["availHeight"]
--
,1920
d0["window"]["screen"] ? d0["window"]["screen"]["width"]
--
,1080
d0["window"]["screen"] ? d0["window"]["screen"]["height"]
--
,2400
d0["window"]["innerWidth"]
--
,340
d0["window"]["innerHeight"]
--
,1920
d0["window"]["outerWidth"]
--
,,cpen:0
",cpen:["concat"](d0["window"]["callPhantom"] ? 1 : 0)
--
,i1:0
"i1:"["concat"](d0["window"]["ActiveXObject"] && "ActiveXObject" in Windows ? 1 : 0)
--
,dm:0
"dm:"["concat"]("number" == typeof d0["document"]["documentMode"] 1 : 0)
--
,cwen:0
"cwen:"["concat"](d0["window"]["chrome"] && d0["window"]["chrome"]["webstore"] ? 1 : 0)
--
,non:1
"non:"["concat"](d0["navigator"]["onLine"] ? 1 : 0)
--
,opc:0
"opc:"["concat"](d0["window"]["opera"] ? 1 : 0
--
,fc:0
"fc:"["concat"]("undefined" != typeof d0["InstallTrigger"] ? 1 : 0)
--
,sc:0
"sc:"["concat"](d0["window"]["HTMLElement"] && d0["Object"]["prototype"]["toString"].call(d0["window"]["HTMLElement"])["indexOf"]("Constructor") > 0 ? 1 : 0)
--
,wrc:1
"wrc:"["concat"]("function" == typeof d0["window"]["RTCPeerConnection"] ? 1 : 0)
--
,isc:0
"isc:"["concat"]("mozInnerScreenY" in d0["window"] ? 1 : 0)
--
,vib:1
"vib:"["concat"]("function" == typeof d0["navigator"]["vibrate"] ? 1 : 0)
--
,bat:1
"bat:"["concat"]("function" == typeof d0["navigator"]["getBattery"] ? 1 : 0)
--
,x11:0
"x11:"["concat"](d0["Array"]["prototype"]["forEach"] ? 0 : 1)
--
,x12:1
"x12:"["concat"]("FileReader" in d0["window"] ? 1 : 0)
--
,8100
var vX = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
for (var wX = 0, GX = 0; GX < vX["length"]; GX++) {
var IX = vX["charCodeAt"](GX);
IX < 128 && (wX += IX);
}
--
,0.589200354294
var LY = d0["Math"]["random"]();
var FY = d0["parseInt"](1000 * LY / 2, 10);
var KY = "" ["concat"](LY);
KY = KY["slice"](0, 11) + FY;
--
,835576031539.5
d0["window"].bmak["startTs"] / 2;
--
,0
--
,loc:
3.固定值-105
4.表单验证
0,-1,0,0,-1,566,0;0,-1,0,0,-1,566,0;
--
取表单的值,然后进行计算
function cz() {
TM.push(242);
for (var Jv0 = "", Fv0 = -1, Kv0 = d0["document"]["getElementsByTagName"]("input"), tv0 = 0; tv0 < Kv0["length"]; tv0++) {
var vv0 = Kv0[tv0],
Cv0 = sS(15, [sA, 0, vv0["getAttribute"]("name")]),
pv0 = sS(15, [sA, 0, vv0["getAttribute"]("id")]),
wv0 = null == vv0["getAttribute"]("required") ? 0 : Q0[Q0.b0.call(null, 77, 3, 91, -446, 55)](),
Gv0 = vv0["getAttribute"]("type"),
Bv0 = null == Gv0 ? -1 : hX(Gv0),
Iv0 = vv0["getAttribute"]("autocomplete");
Fv0 = null == Iv0 ? -pn[7] : "off" === (Iv0 = Iv0["toLowerCase"]()) ? pn[3] : "on" === Iv0 ? 1 : 2;
var mv0 = vv0["defaultValue"],
lv0 = vv0["value"],
Ev0 = pn[3],
Pv0 = 0;
mv0 && pn[3] !== mv0["length"] && (Pv0 = 1);
!lv0 || 0 === lv0["length"] || Pv0 && lv0 === mv0 || (Ev0 = 1);
2 !== Bv0 && (Jv0 = ""["concat"](Jv0 + Bv0, ",")["concat"](Fv0, ",")["concat"](Ev0, ",")["concat"](wv0, ",")["concat"](pv0, ",")["concat"](Cv0, ",")["concat"](Pv0, ";"));
}
var kv0;
kv0 = Jv0;
TM.pop();
return kv0;
}
5.固定值-108
6.计算后的固定值0
7.固定值-101
8.事件检测
do_en,dm_en,t_en
---
Mz = d0["window"]["DeviceOrientationEvent"] ? "do_en" : Q0.BV.call(null, 591, 6, 55, 46),
Dz = d0["window"]["DeviceMotionEvent"] ? "dm_en" : Q0.lV.call(null, -83, 80),
zz = d0["window"]["TouchEvent"] ? "t_en" : Q0.hV.call(null, -125, false, false, 37),
fz = "" ["concat"](Mz, ",")["concat"](Dz, ",")["concat"](zz),
9.固定值-110
10.轨迹收集
0,1,15792,1573,301
1,1,27318,1960,306
114,3,55578,775,213,-1
115,4,55652,775,213,86
--
0-100是鼠标移动轨迹,类型是1
100以后是鼠标点击坐标,类型是2-4
轨迹的值,编号(0-100)+类型(1,2,3,4)+(bmak["get_cf_date"]() - bmak["start_ts"])+x+y+ 转码方法(ZX["getAttribute"]("name"))
11.固定值-117
12.计算后的固定值""
13.-109
14.计算后的固定值""
15.固定值-102
16.跟第四步一样,第四步是初始化加载,这一步是点击的时候加载,值可能会更多
0,-1,0,0,-1,566,0;0,0,0,0,-1,1686,0;0,0,0,0,-1,1144,0;0,0,0,0,-1,950,0;0,0,0,0,-1,1373,0;0,0,0,0,-1,718,0;
17.固定-111
18.计算后的固定值""
19.固定-114
20.计算后的固定值""
21.固定-103
22.事件的事件记录
3,78;2,530;3,6655;2,7473;0,33874;0,53790;0,178879;
--
事件类型+","+开始时间-当前时间+";"
var Y90 = pD() - d0["window"].bmak["startTs"],
O90 = ""["concat"](c90, ",")["concat"](Y90, ";");
FW += O90;
23.固定值-106
24.第一个固定,第二个数随机
2,6
25.固定值-115
最后将数组加密,生成sensor_data参数
到这里就完成了akamai2.0,第一步