1、加密js在 component_sdk_common_min 这个js文件里面
入口代码
function S(r/*加密的内容*/, t/*风控的request_code*/,version/*JS版本号*/) {
var n = r;
return "object" === e(r) && (n = JSON.stringify(r)),
A(E.Kaito(n, t),version)
}
// 不同小程序 使用的版本号不一样。而加密方法里面有个 iv是参数用到了这个版本号
2、扣加密方法
Kaito: function(r, t) {
return d(e(r, t))
function e(r, t) {
return null == r || 0 === r.length ? r : (r = a(r),
t = a(t),
h(function(r, t) {
var e, n, o, i, a, h, u = r.length, s = u - 1;
for (n = r[s],
o = 0,
h = 0 | Math.floor(6 + 52 / u); h > 0; --h) {
for (i = (o = o + 2654435769 & 4294967295) >>> 2 & 3,
a = 0; a < s; ++a)
e = r[a + 1],
n = r[a] = r[a] + ((n >>> 5 ^ e << 2) + (e >>> 3 ^ n << 4) ^ (o ^ e) + (t[3 & a ^ i] ^ n)) & 4294967295;
e = r[0],
n = r[s] = r[s] + ((n >>> 5 ^ e << 2) + (e >>> 3 ^ n << 4) ^ (o ^ e) + (t[3 & s ^ i] ^ n)) & 4294967295
}
return r
}(u(r, !0), s(u(t, !1))), !1))
}
d = function() {
var r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
return function(t) {
var e, n, o, i, a, h, u;
for (n = o = 0,
i = t.length,
h = (i -= a = i % 3) / 3 << 2,
a > 0 && (h += 4),
e = new Array(h); n < i; )
u = t.charCodeAt(n++) << 16 | t.charCodeAt(n++) << 8 | t.charCodeAt(n++),
e[o++] = r[u >> 18] + r[u >> 12 & 63] + r[u >> 6 & 63] + r[63 & u];
return 1 == a ? (u = t.charCodeAt(n++),
e[o++] = r[u >> 2] + r[(3 & u) << 4] + "==") : 2 == a && (u = t.charCodeAt(n++) << 8 | t.charCodeAt(n++),
e[o++] = r[u >> 10] + r[u >> 4 & 63] + r[(15 & u) << 2] + "="),
e.join("")
}
}()
3、关键加密方法
function A(r,version) {
var t = w(r)
, e = W.padding.pkcs7.pad(t)
, n = function() {
var r = Math.random().toString().substr(2);
if (r.length < 16)
for (var t = 16 - r.length, e = 0; e < t; e++)
r += "M";
return r.length > 16 && (r = r.substring(0, 16)),
w(r)
}()
, i = function(r) {
var t = w("ABEATBETTER".concat(version));
return new W.ModeOfOperationCBX(t,r)
}(n).encrypt(e);
return function(r) {
for (var t = "", e = r.length, n = 0; n < e; n++)
t += String.fromCharCode(r[n]);
return D.encrypt(t)
}([].concat(o(Array.from(n)), o(Array.from(i))))
}
至于解密方法。没有。需要自己实现,
这里其实是 cbc算法 由于js代码 混淆过了 补全一下代码就可以解密了
风控参数分析
71 滑块风控
{
"env": {
"zone": [298.08, 57.408],
"client": [57.96, 340.4],
"Timestamp": [1725470050360, 1725470080487],
"count": 1,
"timeout": 1
},
"trajectory": [{
"point": [
[0, 91.333, 388.667, 30127],
[0, 98, 388.667, 30335]
]
}]
"zone": [298.08, 57.408],
"client": [57.96, 340.4], 固定
Timestamp 时间戳 第一个为 方法初始化的时候 第二个 第一次拉动滑块的时候 第二个时间 减去第一个时间 要等于 轨迹里面的 最后一个时间间隔
count滑块 固定
point 滑块拖动轨迹
[0, 91.333, 388.667, 30127], 坐标 + 间隔
如有侵权请联系作者删除。