爬虫逆向实战(29)-某蜂窝详情页(cookie、混淆、MD5、SHA)

news2024/9/30 17:33:34

一、数据接口分析

主页地址:某蜂窝

1、抓包

通过抓包可以发现数据是静态的,在html中。
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?
    通过查看“cookie”模块,可以发现cookie中携带了加密参数__jsl_clearance_s__jsluid_s
    在这里插入图片描述

二、加密位置定位

1、分析

因为是请求静态页面时携带了cookie,所以肯定在这个请求之前还有其他请求,在“应用”模块中,将cookie全部清除
在这里插入图片描述
再次刷新页面,观察抓包,可以发现,在获取到正常的html页面之前,网站获取到了两个状态码是521的响应。
在这里插入图片描述
但是在“响应”模块中无法加载响应数据,所以我们可以使用Python发包,看看返回的响应是什么。可以发现,第一次请求,网站返回的响应中,是一段js代码,而且可以看出是设置cookie中的__jsl_clearance_s参数的,同时响应头中还设置了__jsluid_s参数,而且这个js代码只是一段简单的字符拼接。
在这里插入图片描述
携带这两个cookie,再次发送请求,可以发现,网站返回的还是js代码,而且这次的js代码还是混淆的。
在这里插入图片描述
我们将响应的js代码放入到js文件中,再使用ast解混淆可以发现,在这段js代码中重新设置了cookie中的__jsl_clearance_s参数,cookie值的生成是使用的_0xa4b0eb方法(每次请求方法名可能会不同,根据位置找即可)。
在这里插入图片描述
所以我们将_0xa4b0eb方法扣出,在_0xa4b0eb方法中还用到了一个hash,同样将hash扣出即可。运行代码,发现可以生成cookie值。
在这里插入图片描述
但是,当我们通过请求调用js进行生成可以发现,有时候可以生成,有时候又生成不了。这个时候我们对比传入方法中的ha的值可以发现,可以生成的是sha1,生成不了的是md5还有sha256。再对比代码可以发现,ha的值不同,hash这个方法也不同,所以我们就需要根据ha的值,进行处理。同时可以怀疑hash这个方法就是md5加密或者sha加密。
在这里插入图片描述
这时,我们就需要验证一下,hash是不是标准的加密算法。我们将cookie清空,同时勾选上“事件监听器断点”中的“脚本”,再次刷新页面。
在这里插入图片描述
等断到上方分析的这个js代码段的时候,往下找到hash方法的调用位置,hash方法有时候可能会混淆,可以根据代码结构找到大概位置,下断点。断住之后,在控制台中调用hash方法加密字符串'1',再拉到源代码最底部,查看ha的值,发现是sha256,同时hash加密出的密文,与标准模块一致。同样的步骤,可以验证出md5与sha1都是标准算法,所以可以将hash方法使用标准模块代替。
在这里插入图片描述

三、源代码

JavaScript源码:

const CryptoJS = require('crypto-js')

var _0x442d45 = new Date();

function _0x29a569(_0x4c0f0f, _0x4ac451, _0xff3a7) {
  var _0x2aba4e = _0xff3a7["chars"]["length"];

  for (var _0x5e8fd5 = 0; _0x5e8fd5 < _0x2aba4e; _0x5e8fd5++) {
    for (var _0x32eaed = 0; _0x32eaed < _0x2aba4e; _0x32eaed++) {
      var _0x2f5939 = _0x4ac451[0] + _0xff3a7["chars"]["substr"](_0x5e8fd5, 1) + _0xff3a7["chars"]["substr"](_0x32eaed, 1) + _0x4ac451[1];
      var hash;
      switch (_0xff3a7['ha']) {
        case 'md5': {
          hash = CryptoJS.MD5
          break;
        }
        case 'sha256': {
          hash = CryptoJS.SHA256
          break
        }
        case 'sha1': {
          hash = CryptoJS.SHA1
          break
        }
      }
      if (hash(_0x2f5939).toString() == _0x4c0f0f) {
        return [_0x2f5939, new Date() - _0x442d45];
      }

    }
  }
}

function get_cookie(_0xff3a7) {
    return _0x29a569(_0xff3a7['ct'], _0xff3a7["bts"], _0xff3a7);
}

python源码:

"""
Email:912917367@qq.com
Date: 2023/9/7 11:27 
"""
import json
import re

import execjs
import requests


class Spider:
    def __init__(self):
        self.session = requests.session()
        self.session.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
            'authority': 'www.mafengwo.cn',
            'referer': 'https://www.mafengwo.cn/',
        }
        with open('reverse.js', 'r', encoding='utf-8') as f:
            self.js_obj = execjs.compile(f.read())

    def send1(self):

        response = self.session.get('https://www.mafengwo.cn/i/24326610.html')
        cookie = re.findall(r"document.cookie=(.*?);location.href", response.text)[0]
        cookie = self.js_obj.eval(cookie).split(';')[0]
        cookie_list = cookie.split('=')
        self.session.cookies[cookie_list[0]] = cookie_list[1]

    def send2(self):
        response = self.session.get('https://www.mafengwo.cn/i/24326610.html')
        go = re.findall(r';go\((.*?)\)</script>', response.text)[0]
        go = json.loads(go)
        cookie = self.js_obj.call('get_cookie', go)
        self.session.cookies[go['tn']] = cookie[0]

    def send3(self):
        response = self.session.get('https://www.mafengwo.cn/i/24326610.html')
        print(response.text)


if __name__ == '__main__':
    s = Spider()
    s.send1()
    s.send2()
    s.send3()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC是不是有点虎头蛇尾

一、前言 2023年上半年AI与AIGC真是风风火火&#xff0c;不管是技术界还是资本界还是其他任何领域&#xff0c;如果你不知道chatgpt和AIGC&#xff0c;你就是个跟不上时代的人儿。如今大半年过去了&#xff0c;好像这个chatgpt和AIGC比没有太多的人提起&#xff0c;是不是有点…

ONNX OpenVino TensorRT MediaPipe NCNN Diffusers

框架 和Java生成的中间文件可以在JVM上运行一样&#xff0c;AI技术在具体落地应用方面&#xff0c;和其他软件技术一样&#xff0c;也需要具体的部署和实施的。既然要做部署&#xff0c;那就会有不同平台设备上的各种不同的部署方法和相关的部署架构工具 onnx 在训练模型时可以…

工业4.0时代生产系统对接集成优势,MES和ERP专业一体化管理-亿发

在现代制造业中&#xff0c;市场变化都在不断加速。企业面临着不断加强生产效率、生产质量和快速适应市场需求的挑战。在制造行业&#xff0c;日常管理中的ERP系统、MES系统就显得尤为重要。越来越多的企业正在采用MES系统和ERP管理系统的融合&#xff0c;以实现智能化生产管理…

手把手教你在linux中部署kong网关

一 Kong网关介绍 Kong是一个云原生&#xff0c;快速&#xff0c;可扩展的分布式微服务抽象层&#xff08;也被称为API网关或API中间件&#xff09;&#xff0c; 它的核心价值是高性能和可扩展性&#xff0c;于2015年作为一个开源项目提供;Kong可以充当微服务请求的网关&#x…

SpringCloud环境搭建及入门案例

技术选型&#xff1a; Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计&#xff1a; 父工程&#xff1a;SpringCloudAlibaba订单微服&#xff1a;order-service库存微服&#xff1a;stock-service 1.创建…

g++安装 yum -y install gcc+ gcc-c++ 报错Unable to find a match: gcc+

文章目录 1. Linux 中 g: command not found 解决方法2. g安装 yum -y install gcc gcc-c 报错Unable to find a match: gcc 1. Linux 中 g: command not found 解决方法 原因&#xff1a;G没有安装或者没有更新 解决方法如下&#xff1a; centos&#xff1a; yum -y update…

Vue echarts 饼图 引导线加小圆点,文字分行展示

需求 重点代码 完整代码 initChart() {// 创建 echarts 实例。var myChartOne this.$echarts.init(this.$refs.Echart);myChartOne.setOption({tooltip: {trigger: "item",},title: {top: center,text: [{name| this.chartTitle.name },{value| this.chartTitle.…

探索Kubernetes的高可用性:单master集群和多master节点集群方案

一、单Master集群 k8s 集群是由一组运行 k8s 的节点组成的&#xff0c;节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色&#xff1a;master 和 node。 master 节点&#xff1a;master 节点负责控制和管理整个集群&#xff0c;它运行着一些关键的组件&…

OpenCL编程指南-10.2使用C++包装器API的矢量相加示例

选择OpenCL平台并创建一个上下文 建立OpenCL的第一步是选择一个平台。第2章介绍过&#xff0c;OpenCL使用了ICD模型&#xff0c;其中可以有多个OpenCL实现在一个系统上并存。类似于HelloWorld示例&#xff0c;这个矢量相加程序展示了选择OpenCL平台的一种最简单的方法&#xf…

7000+客户经验总结,《数字化转型实践指南》重磅发布

数字化转型 2022年1月&#xff0c;国务院印发《“十四五”数字经济发展规划》&#xff0c;明确要求加快企业数字化转型升级&#xff0c;推进数字化转型&#xff0c;自此数字化转型又开启了新篇章。 调研数据显示&#xff0c;成功的数字化转型能让企业效率提升20-25倍&#xff…

微信小程序技术分享,以及项目实战:商城花园

目前移动端开发技术非常多&#xff0c;原生的有如下&#xff1a; 一、原生开发 Android Studio: 是用于开发 Android 应用的集成开发环境 (IDE)。 Xcode: 是用于开发 iOS 应用的 IDE。 鸿蒙HarmonyOS体系&#xff1a;华为官方提供的&#xff0c;HarmonyOS是一款面向万物互联时…

HTTPS加密协议详解:TLS/SSL握手过程

1、握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程。 (1).client_hello 客户端发起请求&#xff0c;以明文传输请求信息&#xff0c;包含版本信息&#xff0c;加密套件候选列表&#xff0c;压缩算法候选列表&#xff0c;随机数&#…

RabbitMQ: Publish/Subscribe结构

生产者 package com.qf.mq2302.publishSub;import com.qf.mq2302.utils.MQUtils;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;public class EmitLog {private static final String EXCHANGE_NAME "logs";public static void main…

word转PDF文件变小,图片模糊

word论文29M&#xff0c;文件——另存为——只有1.5M左右&#xff0c;图片压缩严重&#xff0c;图片看不清。 word中很多大图&#xff0c;5M一张的图&#xff0c;所以word很大。 找了很多方法&#xff0c;转换后都在2M左右&#xff0c;勉强可以。 直到找到了这个&#xff0c…

机器学习基础之《分类算法(6)—决策树》

一、决策树 1、认识决策树 决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 2、一个对话的例子 想一想这个女生为什么把年龄放在最上面判断&#xff01;&#xff01;&…

PC调试手机微信浏览器

准备工具 一部手机 一台电脑 一条数据线 首先用数据线把手机与电脑连接 然后手机进入到开发者模式并且要是开启状态&#xff0c;具体进入方式&#xff0c;根据机型不同&#xff0c;进入方式不同&#xff0c;自行百度。 进入到开发者选项之后&#xff0c;开启USB调试模式。 然…

2023年最全ins商店开通运营攻略

借助 Instagram 商店&#xff0c;品牌可以策划一系列可购物的商品&#xff0c;这些商品可通过其 Instagram 个人资料直接访问。这使得在应用程序上销售更容易&#xff0c;也被潜在客户发现。 一、什么是Instagram Shop&#xff1f; Instagram 商店为商家提供了一种在 Instagra…

【Liunx】进程概念,查看进程,进程调用,创建子进程

进程 1.什么是进程2.查看进程3.常见进程调用4.创建子进程 1.什么是进程 以前我们在书上或者其他途径了解到进程的概念。 一个运行起来&#xff08;加载到内存&#xff09;的的程序叫做进程。 在内存中的程序叫做进程。 进程与程序相比具有动态属性。 这里的概念比较抽象&#…

Task :app:compileDebugKotlin FAILED

gradle.properties 里面加上 android.enableJetifiertrue

PyCharm下载安装

PyCharm下载链接 点击下载PyCharm Community Edition社区版&#xff08;PyCharm Professional专业版需要收费&#xff0c;但可以免费试用 30 天&#xff0c;也可以找到激活方式&#xff1b;而社区版是完全免费的&#xff0c;初学者学习 Python建议使用社区版&#xff0c;不会有…