爬虫逆向学习(九):记录一个集cookie、请求参数、请求体、响应文本加密的站点反爬

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理

反爬前置信息

站点:aHR0cHM6Ly96d2Z3LmNxLmdvdi5jbi9pY2l0eS9pY2l0eS9lbmdpbmVlcmluZy9uYXZpZ2F0aW9u
接口:/icity/api-v2/cq.app.icity.engineering.EngineeringCmd/getBusinessList
加密点:
在这里插入图片描述
在这里插入图片描述

逆向研究

老样子,看调用堆栈,直接进去红框的代码处
在这里插入图片描述

从这些代码我们可以拿到请求体原文,肯定是用它进行加密的,然后锁定cmd.setData(data);,大胆猜测加密就是在这里处理的
在这里插入图片描述

打上断点然后跟进去:cmd.setData(data);->$.extend(this.paramsObj, obj);
发现其实只是对请求体原文做一个处理,都没进行加密,不用说那就是cmd.executeAsync("getBusinessList")这个位置了

cmd.executeAsync("getBusinessList")打上断点跟进去,再进入红框代码
在这里插入图片描述

这里就能看到所有加解密操作了
在这里插入图片描述

addUrlAuth方法没啥难点,可以直接算法破解,其中__signature其实是在首页返回的,在整个破解过程中,我们需要从首页拿到XSRF-TOKENcookie和__signature
在这里插入图片描述

接下来看下加解密
在这里插入图片描述

使用文本解码就可以看到实际的文本代码了
在这里插入图片描述

其实就是原生的AES加密,这个也可以直接使用算法破解,注意加解密的key值是XSRF-TOKENcookie取十六位

算法破解

依赖包

import base64
import json
import random
import time
from binascii import hexlify
from binascii import unhexlify
from hashlib import md5

import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Util.Padding import unpad

addUrlAuth

def get_auth_params():
    sig = '__signature'
    chars = "0123456789abcdef"
    key = ''
    key_index = -1
    for i in range(6):
        c = sig[key_index + 1]
        key += c
        key_index = chars.index(c)
        if key_index < 0 or key_index >= len(sig):
            key_index = i

    timestamp = str(int(random.random() * (9999 - 1000 + 1) + 1000)) + "_" + key + "_" + str(int(time.time() * 1000))
    tkey = md5((timestamp + base64.b64decode('eWVVUkx5VFpvdW00SzI3ZA==').decode()).encode()).hexdigest()
    return {
        's': sig,
        't': timestamp,
        'o': tkey,
    }

encrypt_a

def encrypt_a(plaintext, xsrf_token_prefix):
    key = xsrf_token_prefix.encode('utf-8')[:16]
    cipher = AES.new(key, AES.MODE_ECB)
    padded_data = pad(plaintext.encode('utf-8'), AES.block_size)
    encrypted_data = cipher.encrypt(padded_data)
    hex_encrypted_data = hexlify(encrypted_data).decode('utf-8')
    return hex_encrypted_data

decrypt_a

def decrypt_a(hex_encrypted_data, xsrf_token_prefix):
    encrypted_data = unhexlify(hex_encrypted_data)
    key = xsrf_token_prefix.encode('utf-8')
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted_padded = cipher.decrypt(encrypted_data)
    return unpad(decrypted_padded, AES.block_size).decode('utf-8')

破解结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883143.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

江科大51单片机

文章目录 led灯led点亮led闪烁流水灯 独立按键按键点灯按键消抖按键实现二进制流水灯按键实现流水灯 数码管静态数码管显示动态数码管显示 矩阵键盘定时器/中断串口通信led点阵屏DS1302实时时钟蜂鸣器AT24C02DS18B20LCD1602直流电机驱动AD/DA红外遥控 led灯 创建项目&#xff…

打印沙漏(最蠢的办法)

直接给代码&#xff0c;很好理解的 #include<bits/stdc.h> using namespace std; int s(int b){if(b<1)return 0;if(b2)return 1;for(int i3;i<sqrt(b);i){if(b%i0)return 0;}return 1; } int main(){int n;cin>>n;char c;cin>>c;vector<int>s;…

网络原理之IP协议(网络层)

目录 前言 什么是IP协议&#xff1f; IP协议的协议头格式 16位总长度&#xff08;字节数&#xff09; 16位标识、3位标志位和13位片偏移 8位生存时间 IP地址管理 1.动态分配IP 2.NAT机制&#xff08;网络地址转换&#xff09; NAT机制是如何工作的 NAT机制的优缺点…

解决启动docker desktop报The network name cannot be found的问题

现象 deploying WSL2 distributions ensuring main distro is deployed: checking if main distro is up to date: checking main distro bootstrap version: getting main distro bootstrap version: open \wsl$\docker-desktop\etc\wsl_bootstrap_version: The network name…

Windows驱动调试方法

单步调试驱动 驱动的调试不能直接在本机上进行&#xff0c;而是要放在虚拟机&#xff08;或其它设备&#xff09;中。这是因为在内核模式下&#xff0c;一个断点的触发将会停下整个系统而不只是单个进程。 在前面的文章里&#xff0c;使用了DbgPrint函数来进行日志的输出&…

基于python+django+vue的旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Elasticsearch 分片迁移与移除集群节点操作

Elasticsearch 分片迁移与移除集群节点操作 问题背景 在单台服务器上部署了 7 个 Elasticsearch 节点&#xff0c;分别为 es-node1 到 es-node7&#xff0c;端口从 9201 到 9207。每个节点都承载大量数据&#xff0c;但没有设置副本分片。由于多个节点共享同一台服务器的硬件…

论文阅读 - SWATTING Spambots: Real-time Detection of Malicious Bots on X

https://web.archive.org/web/20240523035749id_/https://dl.acm.org/doi/pdf/10.1145/3589335.3651564 目录 ABSTRACT INTRODUCTION METHODOLOGY 3 RESULTS ABSTRACT 在 X&#xff08;前身为 Twitter&#xff09;等社交网络平台上&#xff0c;垃圾邮件机器人的活动日益…

【SpringBoot整合Redis测试Redis集群案例】

1、第一步&#xff0c;创建springboot项目&#xff0c;并导入依赖 如图&#xff0c;创建项目遇到的第一个问题就是&#xff0c;当type选择maven&#xff0c;jdk选择1.8时&#xff0c;java部分没办法选择1.8的版本&#xff0c;这怎么办呢&#xff1f; 原因&#xff1a;搜了一下…

【windows 11 安装maven】

从下载网址下载maven 解压&#xff08;路径无中文&#xff09; 配置本地仓库&#xff0c;用来存储jar包 配置仓库路径 配置文件路径&#xff1a;./conf/settings.xml(conf文件夹中的settings.xml文件中&#xff09; 定位到53行修改 <!-- localRepository| The path to the l…

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/&#xff1a;中文官网里面【教程】和【API】是比较重要的。用到api就去查询&#xff0c;实践当中记忆更牢靠。 风格指南&#xff1a;官方推荐写的一个代码风格cookbook&#xff1a;编写v…

从更底层的角度理解网站的访问过程

文章目录 1.示例&#xff0c;访问www.baidu.com是如何返回数据的1.输入www.baidu.com回车2.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件夹下有没有这个域名对应的映射&#xff1a; 1.示例&#xff0c;访问www.baidu.com是如何返回数据的 1.输入www.baidu.com回车…

光伏开发:一分钟生成光伏项目报告

传统光伏项目报告的编制往往需要收集大量数据、进行复杂计算与分析&#xff0c;耗时长且易受人为因素影响。自动生成光伏项目报告&#xff0c;依托大数据、云计算、人工智能等先进信息技术&#xff0c;实现了对光伏项目关键参数的快速分析、评估与预测。 一、核心功能与流程 1…

【C++笔试强训】如何成为算法糕手Day2

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题&#xff1a;牛牛的快递 第二题&#xff1a;最小花费爬楼梯 第三题&#xff1a;数组中两个字符串的最小距离 补充0x3f3f3f3f 第一题…

9/24作业

1. 分文件编译 分什么要分文件编译&#xff1f; 防止主文件过大&#xff0c;不好修改&#xff0c;简化编译流程 1) 分那些文件 头文件&#xff1a;所有需要提前导入的库文件&#xff0c;函数声明 功能函数&#xff1a;所有功能函数的定义 主函数&#xff1a;main函数&…

springboot实战学习(8)(登录接口中使用“JWT令牌“完成登录认证)(拦截器的创建与注册)

接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上。也提到了"JWT令牌"的组成与使用。具体往回看了解的链接如下。springboot实战学习&#xff08;7&#xff09;(JWT令牌的…

TCP网络编程概述、相关函数、及实现超详解

文章目录 TCP网络编程概述1. TCP协议的特点2. TCP与UDP的差异3. TCP编程流程 TCP网络编程相关函数详解1. socket()&#xff1a;创建套接字参数说明&#xff1a;返回值&#xff1a;示例&#xff1a; 2. connect()&#xff1a;客户端连接服务器参数说明&#xff1a;返回值&#x…

【CubeMX学习笔记】关于CAN通信协议

目录 一、CAN通信简介 二、CAN数据帧类型 三、格式帧 四、位同步 传输数据时可能遇到的问题 最小时间单位 硬同步 再同步 波特率的计算 STM32中的CAN外设 一、原理图 二、标识符筛选 三、配置单个邮箱&#xff08;正常模式或自发自收只需要修改模式&#xff09; …

【动态规划-多重背包】【hard】力扣2585. 获得分数的方法数

考试中有 n 种类型的题目。给你一个整数 target 和一个下标从 0 开始的二维整数数组 types &#xff0c;其中 types[i] [counti, marksi] 表示第 i 种类型的题目有 counti 道&#xff0c;每道题目对应 marksi 分。 返回你在考试中恰好得到 target 分的方法数。由于答案可能很…

基于yolov5滑块识别破解(二)

通过上一篇文章基于yolov5滑块识别破解&#xff08;一&#xff09;-CSDN博客&#xff0c;我们已经完成了yolov5的部署和训练&#xff0c;接下来我们将对源码进行改动&#xff0c;来实现滑块的自动滑动破解。 1.获取坐标 修改detect中for循环的内容&#xff0c;获取目标的左上角…