求助某安js逆向存在反debugger和混淆策略分析
最近有个需求想抓取某安的一些公开数据,但该网站有较强的反爬策略,下面详细描述下该网站的一些技术点,希望各位大佬给出一些指点过程如下:
1、该网站请求首页后会加载十几个js,这些js向浏览器写入cookie
2、后续的请求都要带着js写入的cookie放在请求头中向后台请求数据,如果检查不对则提示参数错误。
分析过程:
1、检查该网站发现大量js都是混淆过的,无法通过document.cookie搜索到,于是使用js对写cookie进行hook操作并进行debugger,hook代码如下:
var v = "";
Object.defineProperty(document, "cookie", {
set: function(val) {
// if(val.indexOf("sajssdk_2015_cookie_access_test") == -1) {
// debugger;
// }
if(val.indexOf("bnc-uuid") !== -1) {
debugger;
}
if(val.indexOf("deviceId") !== -1) {
debugger;
}
if(val.indexOf("se_gd") !== -1) {
debugger;
}
if(val.indexOf("thx_guid") !== -1) {
debugger;
}
if(val.indexOf("device-info") !== -1) {
debugger;
}
v = val;
return v;
},
get() {
return v;
}
})
2、通过对cookie的hook操作后,找到写cookie的代码位置,但代码存在大量的js混淆,查看了下应该是ob混淆,部署代码如下:
function x(W, X, Y, Z) {
var a0 = f['vtYVa'](f(f(W + f + f, f(l, X)) + f + f(l, Y ? Y : '') + b('0x1ef', 'J^06') + Z, b('0xa7', '39fF')), new n()());
var a1 = new q();
a1] = a0;
g['_tmp'] = a1;
}
try {
var y = new n()['getTime']();
var z = c(0x4);
var A = z;
var B = z;
var C = z;
var D = z;
var E = f['EjXxV'](c, 0x1);
var F = f['EjXxV'](c, 0x2);
var G = '20231227';
var H = '';
var I = new n()['getTime']() - y;
function W(a1) {
var a2 = {
'WycGn': function(a8, a9) {
return v['WGXHb'](a8, a9);
}
};
function a3(a8) {
a8 = a2['WycGn'](a8, '');
if (a8['length'] >= 0xd) {
return a8['substring'](0x0, 0xd);
} else {
while (a8['length'] != 0xd) {
a8 = '0' + a8;
}
}
return a8;
}
var a4 = a3(new n()['getTime']());
var a5 = v['LlNoU'](a1 + ':' + C['grs'](0x13), a4);
var a6 = 0x1;
var a7 = v['wqcyX'](v['MwWnU'](A, a5 + C['sph'](a5, 0x4)), a6);
return a7;
}
function X(a1, a2, a3) {
C['p_c'](a1, a2, a3);
}
function Y() {
return C['g_c']('se_gsd');
}
var J = '';
var K = [];
function Z(a1) {
if (!a1) {
return;
}
if (typeof a1 == 'string') {
K['push'](a1);
} else {
K = K['concat'](a1);
}
if (t) {
return ![];
}
var a2 = t;
t = function() {
if (arguments > 0x1) {
this = arguments;
}
a2(this, arguments);
}
;
var a3 = t')];
t = function() {
try {
var a4 = this;
for (var a5 = 0x0; a5 < K; a5++) {
if (v(a4(K), -0x1)) {
this(b('0x1ea', '4eNd'), J);
this(v, v(W, 'rd'));
var a6 = '';
try {
a6 = v(E, H);
} catch (a7) {
a6 = b('0x6c', 'zjpA');
}
this(b('0x152', 'NjVu'), a6);
break;
}
}
} catch (a8) {
x(w(), b('0x225', '1ZL7') + g, C(a8), G);
}
a3(this, arguments);
}
;
tR')] = !![];
}
function a0(a1) {
if (a1 && a1) {
try {
var a2 = a1('')()('');
a2 = C['sr'](a2, f(u, a2 / 0x5));
var a3 = a2(0x0, 0x1);
var a4 = a2(0x1, 0xd);
if (a3 == '1') {
H = a4;
} else {
H = '';
}
if (a2 > 0xd) {
var a5 = a2(0xd);
f(X, f, a5, f(f(f(0x64, 0x16d), 0x18) * 0x3c, 0x3c) * 0x3e8);
}
} catch (a6) {
fR')](x, f(w), f + g, C(a6), G);
}
}
}
J = f(W, 'pd');
if (g && g && gR')]) {
f(Z, g);
}
var L = C['g_c'](f);
if (!L) {
L = f(W, 'sd');
X(b('0x1d', 'ouDj'), L);
}
var M = C(f);
if (!M || f(f(M, 0x4), 0x0)) {
M = f['EjXxV'](W, 'gd');
f(X, 'se_gd', M, f(f(0x64 * 0x16d * 0x18 * 0x3c, 0x3c), 0x3e8));
}
var N = Y();
var O = f(new n()(), y);
var P = f(F);
var Q = new n()R')]() - y;
var R = {};
R = J;
R = L;
R = M;
R = N;
R')] = C(b('0x30', 'Id4I'));
R = C(b('0x15f', 'g^n3'));
R['ev'] = P;
R = f(I, '');
R = O + '';
R = f(Q, '');
var S = f(f(w), f);
var T = A(JSON(R));
var U = {
'onSuccess': function(a1) {
f(a0, a1);
},
'onError': function() {}
};
f(D, S, {
'c': T,
'sv': G,
't': new n()()
}, U);
return Z;
} catch (a1) {
f(x, f(w), g, C(a1), G);
var V = function() {};
return V;
}
}));
2、本来想根据hook的位置对写入的cookie扣js代码返回回来用于后续请求时请求头cookie,但发现有十几个js文件在写cookie,且每个js都有几万行混淆代码,想要扣或还原比较困难。
3、分析最重要的登陆操作时,对于device-info的写入cookie操作时,发现在进入debugger的瞬间页面就进行了删除debugger操作并刷新页面,然后所有请求返回状态码为403的操作,应该是检测到我在debugger,后面所有请求都是403拒绝。
求助的问题如下:
1、使用python模拟请求时,反爬策略中请求首页时会同时下载十几个js进行cookie写入操作(有可能有些js没有作用只是混淆视听),每个js都进行了混淆,最大的js文件格式化后有九万行这么大(比较难还原),有什么办法找到主要能用的参数。
2、使用写cookie的hook操作debugger时,该网站使用了什么技术检测到我在debugger,又是怎么直接删除debugger使用无法打断点的,如何避免? 你的意思是,想看如何生成 cookie 的吗 黄色土豆 发表于 2024-3-26 11:46
你的意思是,想看如何生成 cookie 的吗
不是,我已经hook到了,在hook里面打上了debugger,前几个cookie的生成通过hook已经找到了,但还有一个cookie是device-info的写入我使用判断打印debugger时,那个网站好像能检测到我在debugger,不知道用了什么技术直接把我这个debugger断点删掉了,导致我无法debugger断点在那,之后就一直在刷新,后面就403不再让我访问了 yoin528 发表于 2024-3-26 11:49
不是,我已经hook到了,在hook里面打上了debugger,前几个cookie的生成通过hook已经找到了,但还有一个co ...
看看 403 的截图 这个图片我说明了下 网站发一下,我试试 黄色土豆 发表于 2024-3-26 11:55
网站发一下,我试试
可以发网址吗?
https://accounts.binance.com/ 我想要的就是这个请求头计算device-info的试,还有其它cookie的方式,看看哪个大佬能帮下
yoin528 发表于 2024-3-26 12:04
我想要的就是这个请求头计算device-info的试,还有其它cookie的方式,看看哪个大佬能帮下
简单看了一下,发现这个 device-info 的值是不变的,如果考虑使用的话,可以复制过来直接用。 黄色土豆 发表于 2024-3-26 14:29
简单看了一下,发现这个 device-info 的值是不变的,如果考虑使用的话,可以复制过来直接用。
我把cookie和这个属性放进去了,但是请求得到的是400,参数非法,估计还有其它什么东西计算有误
页:
[1]
2