一、马蜂窝
1.前置:
- 网址:aHR0cHM6Ly93d3cubWFmZW5nd28uY24v
- 需要逆向的参数:cookie/加速乐;
2.逆向流程:
- 首先我们需要理解加速乐的过程,整体逻辑如下:
- 首先进行第一次页面请求,它会返回一个响应的cookie,以及一段简单的js代码,那么第一次请求就会得到两个cookie,分别为 __jsluid_s和__jsl_clearance_s,第一次请求结束之后,带着这两个cookie去进行第二次请求,会得到一个js代码。它会生成一个新的cookie值,将它赋给__jsl_clearance_s,然后再带着这两个cookie进行第三次请求,就能够得到最终的响应;
- 理解了整体的逻辑我们就可以进行第一步了;首先查看第一次请求;

- 可以看到返回了一小段js代码,这段代码可以直接在控制台执行得到结果的,我们肯定需要进行第一次请求拿到这个结果,以及服务器为我们响应的cookie;
- 其次再进行第二次的请求,带着第一次请求得到的两个cookie去请求,会得到另一段比较长的js代码;

- 可以看到是经过混淆的代码,那么我们就需要去看这段js代码了,我们在这里打上一个事件断点;

- 然后将cookie清空进行刷新,此时就可以断住,来到我们的第二段js代码;


- 其实它是经过了ob混淆的,第一行是一个大数组,第二行一个自执行,第三行解密函数,用来解混淆,那么重要的也就是后面的东西,结尾可以看到它调用了go函数,往里面传了参数,那么我们就来看看go函数;

- 搜索document,打上断点,因为cookie就是与document相关的,我们让程序执行过来;

- 里面其实就是cookie,那么后面的就是我们的值;

- 那么我们就可以去找值的生成位置了,对于加速乐来说,直接全部拿下来就可以了,进行简单的补环境即可;

- 需要注意的是,这里的参数里的hs也就是里面的hash算法,他一共有三种,我们需要进行一个判断,然后写三种加密,分别为md5、sha1、sha256,然后进行一个简单的判断;


- 我们就可以得到第二次请求需要携带的cookie,然后我们进行相应的请求进行测试;
- 请求成功的结果如下:

# coding: utf-8
# File: 马蜂窝加速乐.py
# Author: 下雨天
# Date: 2024/01/20 16:50
from calendar import c
import re
from urllib import response
import execjs
import requests
url = "https://www.mafengwo.cn/"
headers = {
···
}
def first_req():
response = requests.get(url, headers=headers)
cookie1 = re.findall('document.cookie=(.*?);location', response.text)[0]
__jsl_clearance_s = execjs.eval(cookie1).split('clearance_s=')[-1]
__jsluid_s = response.cookies.get_dict()['__jsluid_s']
return __jsluid_s,__jsl_clearance_s
def sec_req():
__jsluid_s,__jsl_clearance_s = first_req()
cookies = {
"__jsluid_s": __jsluid_s,
"__jsl_clearance_s": __jsl_clearance_s
}
response = requests.get(url, headers=headers, cookies=cookies).text
res = execjs.eval(re.findall('};go\((.*?)\)</scri',response)[0]) # 通过正则匹配到js代码,然后用execjs.eval()将得到的值变成字典
print(res)
cook3 = execjs.compile(open('马蜂窝加速乐.js', 'r', encoding='utf-8').read()).call('go', res)
cookies = {
"__jsluid_s": __jsluid_s,
"__jsl_clearance_s": cook3.split('ce_s=')[-1],
}
return cookies
def third_req():
cookies = sec_req()
response = requests.get(url, headers=headers, cookies=cookies)
print(response.text)
if __name__ == '__main__':
third_req()
评论 (0)