实战3-cookie参数acw_sc_v2
目标网站
aHR0cHM6Ly93d3cubHlkaC5jb20vaml0dWFuLw==
1.分析网站
在网站中看到两个请求,我们想要的数据在第二个请求中

分析第二个请求,发现在第二个请求中需要携带两个cookie值分别是acw_tc和acw_sc__v2

往上看第一个请求,在第一个请求中发现,服务器会返回cookie值中的acw_tc

2.获取cookie值中的acw_tc
url = "aHR0cHM6Ly93d3cubHlkaC5jb20vaml0dWFuLw=="
response = requests.get(url, headers=headers)
cooks = {}
for k, v in response.cookies.items():
cooks[k]=v
print(cooks)
得到acw_tc值

3.获取cookie值中的acw_sc__v2
继续看第一个请求,发现第一个请求的出的数据是ob混淆的代码
3.1解析ob混淆代码
可以先在fiddle中hook一下,在页面中就会被debugger断住
查看堆栈,点击进入脚本中

老规矩,搜索document查看cookie位置,得知document[_0x1e8e('0x9')]是结果(可以自己在控制台中输出看看)

查看document[_0x1e8e('0x9')]组成方式,发现arg3是最关键位置

向上查看arg3来,在for嵌套的while中,将这一整段抠出,arg2需要也抠出来,上面一段也需要,抠出来,共三部分

将其优化缺了就补,具体代码在下面
其中mask是'3000176000856006061501533003690027800375'好像acw_sc_v2的js中都有这串数字,
3.2通过js获取到acw_sc__v2
在第一个请求得出的数据是ob混淆的代码中有一条数据是arg1的值
取出arg1,将他作为参数传入到js中
def get_js(arg1):
with open('洛阳大华.js', mode='r') as f:
js_code = f.read()
compile_result = execjs.compile(js_code)
result = compile_result.call('get_arg', arg1)
return result
headers = {
"user-agent": "***"
}
url = "aHR0cHM6Ly93d3cubHlkaC5jb20vaml0dWFuLw=="
response = requests.get(url, headers=headers)
arg1 = re.search(r"var arg1='(.*)';", response.text).group(1)
acw_sc__v2 = get_js(arg1)
print(acw_sc__v2)
4.js代码
function get_arg(arg1){
var posList = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24];
var mask = '3000176000856006061501533003690027800375';
var outPutList = [];
var arg2 = '';
var arg3 = '';
for (var i = 0x0; i < arg1['length']; i++) {
var this_i = arg1[i];
for (var j = 0x0; j < posList['length']; j++) {
if (posList[j] == i + 0x1) {
outPutList[j] = this_i;
}
}
}
arg2 = outPutList['join']('');
for (var i = 0x0; i < arg2['length'] && i < mask['length']; i += 0x2) {
var GxjQsM = '1|4|3|0|2'['split']('|')
, QoWazb = 0x0;
while (!![]) {
switch (GxjQsM[QoWazb++]) {
case '0':
if (xorChar['length'] == 0x1) {
xorChar = '0' + xorChar;
}
continue;
case '1':
var strChar = parseInt(arg2['slice'](i, i + 0x2), 0x10);
continue;
case '2':
arg3 += xorChar;
continue;
case '3':
var xorChar = (strChar ^ maskChar)['toString'](0x10);
continue;
case '4':
var maskChar = parseInt(mask['slice'](i, i + 0x2), 0x10);
continue;
}
break;
}
}
return arg3
}
var arg1 = '4E0EB0FBC047D55251580E09CEDDE09B73531272';
console.log(get_arg(arg1))
参考链接

浙公网安备 33010602011771号