首页 > 其他分享 >加速乐逆向 cookies 参数

加速乐逆向 cookies 参数

时间:2022-10-17 16:14:49浏览次数:82  
标签:逆向 cookies headers 参数 import cookie data response

简介

加速乐用于解决网站访问速度过慢及网站反黑客问题。
爬取使用该技术网站时需要携带特定的cookies参数(有的是__jsl_clearance_s,有的__jsl_clearance),本项目以一个使用该技术的网站为例进行逆向分析。
完整代码请前往github

第一步获取__jsluid_h参数

目标url = aHR0cDovL3d3dy56b25neWFuZy5nb3YuY24vb3Blbm5lc3MvT3Blbm5lc3NDb250ZW50L3Nob3dMaXN0LzE0NDIvNDU3MTIvcGFnZV8xLmh0bWw=
第一次请求网站,网站返回的响应状态码为 521,响应返回的为经过 AAEncode 混淆的 JS 代码;
需要获取的__jsluid_h参数在第一次请求的响应头中

import re

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
print(response.headers['Set-Cookie'])

image.png
__jsluid_h获取成功

第二步获取__jsl_clearance参数

__jsl_clearance前置参数在第一次请求的返回值中生成

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
print(response.text)

image.png
通过正则从响应值中取出js并执行,从而获得第一次的__jsl_clearance
cookie = re.findall(r'(cookie=.*?)location', response.text)[0]

import re

import execjs
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
cookie = re.findall(r'(cookie=.*?)location', response.text)[0]
js_code = "function get_cookies(){"+cookie+"return cookie}"
print(execjs.compile(js_code).call('get_cookies'))

image.png
再发起第二次请求,网站同样返回的响应状态码为 521,响应返回的为经过 OB 混淆的 JS 代码;
携带上一步获取到的cookie发起请求

import re

import execjs
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
cookie = response.headers['Set-Cookie'].split(';')[0].split('=')
cookies = {cookie[0]: cookie[1]}
cookie = re.findall(r'(cookie=.*?)location', response.text)[0]
js_code = "function get_cookies(){"+cookie+"return cookie}"
cookie = execjs.compile(js_code).call('get_cookies').split(';')[0].split('=')
cookies.update({cookie[0]: cookie[1]})
print(cookies)
response = requests.get(url, cookies=cookies, headers=headers)
print(response.text)

image.png
获取到一堆混淆后的代码

第三步对混淆代码进行解析逆向

在得到的混淆底部找到go函数

go({"bts":["1665989922.614|0|Q7i","PVU56j4JKfYysAKA6m6TpE%3D"],"chars":"muuwQudeqEBeV7IGhOHlff","ct":"4ed606e7793bd9acaa47abf7f9223f09","ha":"md5","tn":"__jsl_clearance","vt":"3600","wt":"1500"})

image.png
go函数主要功能是将传入对象中的参数bts数组第一个参数 + chars中的1个字符串 + chars中的1个字符串 + bts数组第二个参数进行组合成一个字符串cookie。
cookie = data["bts"][0] + i + j + data["bts"][1]
再对字符串进行加密后判断,如果加密后的值与对象中的ct参数值相同,那么组合的字符串参数正确也就获得了cookies中的__jsl_clearance参数。
而对象中的ha参数,表示的就是对应的加密方法,一个有三种MD5、SHA1、SHA256使用特定加密后判断就可以得到正确的__jsl_clearance值

def go(data):
    chars = data["chars"]
    for i in chars:
        for j in chars:
            cookie = data["bts"][0] + i + j + data["bts"][1]
            if data['ha'] == 'md5':
                encrypt = md5()
            elif data['ha'] == 'sha1':
                encrypt = sha1()
            elif data['ha'] == 'sha256':
                encrypt = sha256()
            encrypt.update(cookie.encode(encoding='utf-8'))
            if encrypt.hexdigest() == data['ct']:
                return cookie

获取的完整代码:

import ast
import re

import execjs
import requests
from hashlib import md5, sha1, sha256

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}

def go(data):
    chars = data["chars"]
    for i in chars:
        for j in chars:
            cookie = data["bts"][0] + i + j + data["bts"][1]
            if data['ha'] == 'md5':
                encrypt = md5()
            elif data['ha'] == 'sha1':
                encrypt = sha1()
            elif data['ha'] == 'sha256':
                encrypt = sha256()
            encrypt.update(cookie.encode(encoding='utf-8'))
            if encrypt.hexdigest() == data['ct']:
                return cookie

response = requests.get(url, headers=headers)
cookie = response.headers['Set-Cookie'].split(';')[0].split('=')
cookies = {cookie[0]: cookie[1]}
cookie = re.findall(r'(cookie=.*?)location', response.text)[0]
js_code = "function get_cookies(){"+cookie+"return cookie}"
cookie = execjs.compile(js_code).call('get_cookies').split(';')[0].split('=')
cookies.update({cookie[0]: cookie[1]})
response = requests.get(url, cookies=cookies, headers=headers)
data = ast.literal_eval(re.findall(r'go\((.*?)\)', response.text)[1])
print(go(data))

image.png

最后

携带这两个cookies参数,再次发起请求就可以获取到正确的响应值了
完整代码请前往github:https://github.com/futurebook/SpiderReverse.git
image.png

标签:逆向,cookies,headers,参数,import,cookie,data,response
From: https://www.cnblogs.com/Red-Sun/p/16799544.html

相关文章

  • 【ES6】函数的参数、Symbol数据类型、迭代器与生成器
    ......
  • 爬虫-获取某网站token(可变参数)的过程
    使用Selenium去获取token首先说明该方案失败了。由于该网站是不需要登录的,我分析了所有的请求过程,没有找到服务端返回token的请求。最终还是抱着试一试的心态,使用selenium......
  • Vue事件不带参数和带一个参数
    <script>exportdefault{ data(){  return{   message:0,   put1:'www.96net.com.cn',  } }, methods:{  dianji(p){   ......
  • deferred_segment_creation参数解析
    文档课题:deferred_segment_creation参数解析.该参数在10gR2中是没有的,从11g开始才有.默认值为true,表示当创建一个表时,先不分配空间,当向该表中插入第一条数据时才开始分配空......
  • CONTROL_FILE_RECORD_KEEP_TIME参数介绍
    文档课题:CONTROL_FILE_RECORD_KEEP_TIME参数介绍.该参数设置控制文件中存储备份记录的时间,在用RMAN的时候会涉及到该参数.备份记录包括完全的数据库备份记录,及指定的数据文......
  • Hystrix配置参数解析
    HystrixCommand配置方式我们的配置都是基于HystrixCommand的,我们通过在方法上添加 @HystrixCommand 注解并配置注解的参数来实现配置,但有的时候一个类里面会有多个......
  • Function parameters(参数) treated as constant
    constwarn=@import("std").debug.warn;fnnormal(x:i32)void{x+=1;warn("{}\n",x);}pubfnmain()void{varz:i32=12;normal(z);......
  • 参数的认识及使用
    1.声明在函数后面小括弧中的变量2.参数其实是一个定义在函数内部的局部变量,所以在函数内部不能再次定义相同的变量(只能定义一次)。函数内部可以直接访问变量3.在使用时先给变......
  • fixture传递参数
    测试过程中需要大量的测试数据,如果每条测试数据都编写一条测试用例,用例数量将是非常庞大的,一般我们在测试过程中会将测试用到的数据以参数的形式传入到测试用例中,并为每条......
  • mybatis的逆向工程
    Mybatis逆向工程实现步骤:mybatis逆向工程:1)简介:根据表生成mapper层三部分代码:实体类,mapper接口,映射文件。2)使用mybatis逆向工程:a)创建工程:crm-mybatis-generatorb)......