JS逆向-马蜂窝加速乐ck
标签搜索

JS逆向-马蜂窝加速乐ck

sana
2024-07-17 / 0 评论 / 5 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年07月19日,已超过319天没有更新,若内容或图片失效,请留言反馈。

一、马蜂窝

1.前置:

  • 网址:aHR0cHM6Ly93d3cubWFmZW5nd28uY24v
  • 需要逆向的参数:cookie/加速乐;

2.逆向流程:

  • 首先我们需要理解加速乐的过程,整体逻辑如下:
  • 首先进行第一次页面请求,它会返回一个响应的cookie,以及一段简单的js代码,那么第一次请求就会得到两个cookie,分别为 __jsluid_s__jsl_clearance_s,第一次请求结束之后,带着这两个cookie去进行第二次请求,会得到一个js代码。它会生成一个新的cookie值,将它赋给__jsl_clearance_s,然后再带着这两个cookie进行第三次请求,就能够得到最终的响应;
  • 理解了整体的逻辑我们就可以进行第一步了;首先查看第一次请求;

image-20240120164914067

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

image-20240120170106246

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

image-20240120170255996

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

image-20240120170427039

  • 我们将代码折叠,来进行相应的分析;

image-20240120170517021

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

image-20240120170744143

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

image-20240120170832071

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

image-20240120170905590

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

image-20240120175628575

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

image-20240120175819329

image-20240120175834065

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

image-20240120180103099

  • py代码如下:
# 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

评论 (0)

取消