本文仅用于逆向研究交流,禁止非法用途,如遇侵权联系删除!!!
aHR0cHM6Ly93ZS41MWpvYi5jb20vcGMvc2VhcmNoP2pvYkFyZWE9MDEwMDAwJmtleXdvcmQ9JnNlYXJjaFR5cGU9MiZzb3J0VHlwZT0wJm1ldHJvPQ==
1接口分析
本次分析接口用的是搜索后的职位列表
经过多次增删发现
ck中acw_sc__v2 是必须带的,也是本次逆向的目标

2acw_sc__v2解析
首先控制台hook下ck
(function () {
'use strict';
var cookieTemp = '';
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('acw_sc__v2') != -1) {
debugger;
}
console.log('Hook捕获到cookie设置->', val);
cookieTemp = val;
return val;
},
get: function () {
return cookieTemp;
},
});
})();
清空下ck和存储的信息点一下下一页
hook到了!我们跟下栈

可以在这里看到值得生成
我们详细得解析一下这个函数做了什么

生成函数
结构是混淆+两个循环
!function(Vs, VD) {
var tz = tD;
for (var VP = JSON[tz(DD.Y9)](tz(DD.YY) + tz(DD.Yk) + tz(DD.Yl) + tz(DD.YV) + tz(DD.YX) + tz(DD.Yo) + tz(DD.Yt) + tz(DD.Ya) + tz(DD.YU) + tz(DD.YH) + tz(DD.Yg) + tz(DD.Yc) + tz(DD.Ys) + tz(DD.YD) + tz(DD.YP)), Vf = tz(DD.Yf) + tz(DD.YO) + tz(DD.Yh) + tz(DD.Yz), VO = [], Vh = '', Vz = '', VM = 0xe3 * -0x11 + 0x1 * 0x610 + 0x903; VM < Vs[tz(DD.YM)]; VM++)
for (var Vq = Vs[VM], Vn = -0x23 * 0xdb + 0xd * 0x6e + 0x185b; Vn < VP[tz(DD.Yq)]; Vn++)
lN[tz(DD.Yn)](VP[Vn], lN[tz(DD.YI)](VM, 0x1fc7 * -0x1 + 0x21d6 + -0x36b + PX)) && (VO[Vn] = Vq);
for (Vh = VO[tz(DD.YA)](''),
VM = 0x1ad0 + -0x50f * -0x1 + -0x1fdf; lN[tz(DD.YE)](VM, Vh[tz(DD.YM)]) && VM < 0x1a54 + 0xa1c + -0x2448; VM += 0x1a85 + 0x1b08 + -0x36e8 + PX) {
var VI = (lN[tz(DD.Yu)](parseInt, Vh[tz(DD.YT)](VM, VM + (0x38 * 0x11 + -0x2 * -0x2fb + -0xb09 + PX)), -0x39e * 0x3 + -0x538 + 0x5 * 0x33a) ^ lN[tz(DD.Yu)](parseInt, Vf[tz(DD.YT)](VM, lN[tz(DD.Yr)](VM, 0x8b1 * -0x1 + -0x13e6 + -0x48a * -0x6 + PX)), -0xfe8 * -0x1 + -0x1 * 0x5ad + 0x89 * -0x13))[tz(DD.YS)](0x6e4 + -0x9f1 * -0x1 + -0x51 * 0x35);
lN[tz(DD.Ym)](0x449 * 0x9 + 0x4f5 + 0x3 * -0xef6 + PX, VI[tz(DD.Yq)]) && (VI = lN[tz(DD.Yw)]('0', VI)),
Vz += VI;
}
kR(VD, Vz);
}(Vk, V2),
看下入参
VD很明显是url链接

VS来自 无ck请求返回得值

把函数都扣下来还原下混淆
所有得属性都被加密了
都经过函数tz
tz(DD.YE)
可以手动也可以扣下来解密函数
属性都搞下来之后可以看到大概长这个样子

这里给下解混淆过得
!function (Vs, VD) {
for (var VP = JSON["parse"]("[15, 35, 29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11,39,18,20,8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36]"), Vf = '3000176000856006061501533003690027800375', VO = [], Vh = '', Vz = '', VM = 0; VM < Vs['length']; VM++)
for (var Vq = Vs[VM], Vn = 0; Vn < VP['length']; Vn++)
lN['TkOjj'](VP[Vn], lN['akNsR'](VM,-348 + PX)) && (VO[Vn] = Vq);
for (Vh = VO['join'](''),
VM = 0; lN['PktzN'](VM, Vh['length']) && VM < 40; VM += -347+ PX) {
var VI = (lN['JrXJd'](parseInt, Vh['slice'](VM, VM + (-347 + PX)), 16) ^ lN['JrXJd'](parseInt, Vf['slice'](VM, lN['xrjKF'](VM, -347+ PX)), 16))['toString'](16);
lN['kYITR'](-348 + PX, VI['length']) && (VI = lN['YFqAX']('0', VI)),
Vz += VI;
}
console.log(Vz)
}(a1, a2)
接下来是花指令
这个花指令需要注意下,嵌套了两层花指令
初次为对象LN
LN得部分花指令函数又引用了Yt
都补上之后就可以拿到数据了
花指令可以补也可也还原回去,没什么检测

python测试一下没什么问题

7783

被折叠的 条评论
为什么被折叠?



