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

一、数据接口分析

主页地址:某蜂窝

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.MD5break;}case 'sha256': {hash = CryptoJS.SHA256break}case 'sha1': {hash = CryptoJS.SHA1break}}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 reimport execjs
import requestsclass 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.rhkb.cn/news/128752.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows wsl2安装Ubuntu

wsl&#xff08;Windows Subsystem for Linux&#xff09;即适用于Windows的Linux子系统&#xff0c;是一个实现在Windows 10 / 11上运行原生Linux的技术。 wsl2 为其迭代版本&#xff0c;可以更好的在Windows上运行Linux子系统。 这里以 Windows 11 安装Ubuntu作为示例。 开启…

kafka学习-消费者

目录 1、消费者、消费组 2、心跳机制 3、消费者常见参数配置 4、订阅 5、反序列化 基本概念 自定义反序列化器 6、位移提交 6.1、自动提交 6.2、手动提交 同步提交 异步提交 7、再均衡 7.1、定义与基本概念 7.2、缺陷 7.3、如何避免再均衡 7.4、如何进行组内分…

电脑同时连接有线和无线网络怎么设置网络的优先级

电脑同时连接有线和无线网络怎么设置网络的优先级&#xff1a; 我们知道在 笔记本电脑系统 中&#xff0c;可以通过有线或无线网络进行联网。如果电脑在有线网络和无线网络同时存在的情况&#xff0c;应该怎么设置有线网络优先连接呢?对此我们提供下面的方法可以让电脑在有Wi…

链路追踪Skywalking快速入门

目录 1 Skywalking概述1.1 微服务系统监控三要素1.2 什么是链路追踪1.2.1 链路追踪1.2.2 OpenTracing1、数据模型&#xff1a;2、核心接口语义 1.3 常见APM系统1.4 Skywalking介绍1、SkyWalking 核心功能&#xff1a;2、SkyWalking 特点&#xff1a;3、Skywalking架构图&#x…

【C++】string类模拟实现上篇(附完整源码)

目录 前言1. string的基本结构2. 构造函数、析构函数2.1 构造函数的实现2.1.1带参构造函数 2.2析构函数2.3无参构造函数2.4无参和带参构造函数合并 3. string的遍历3.1 operator[ ]3.2迭代器模拟实现 (简单实现&#xff09;3.3 const迭代器模拟实现 4. 数据的增删查改4.1 reser…

基于TensorFlow 2.3.0 的手势识别系统设计

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7TensorFlow 2.3.0 二、制作数据集&#xff0c;作者使用了10个类别的手势数集据 三、开始训练模型&#xff0c;作者使用自己开发的软件进行训练模型&#xff0c;方便快捷。软件介绍及下载地址&#xff1a; 手把手教你使用T…

原生js之dom表单改变和鼠标常用事件

那么好,本次我们聊聊表单改变时如何利用onchange方法来触发input改变事件以及鼠标常用的滑入滑出,点击down和点击up事件. 关于onchange方法 onchange方法在鼠标输入完后点击任何非输入框位置时触发.触发时即可改变原有输入框的值. out 、leave、over、down、up鼠标方法 当用…

KMP超高效匹配算法

简介&#xff1a; KMP算法是一种改进的字符串匹配算法&#xff0c;其中&#xff0c;KMP算法的运用核心是利用匹配失败后的信息&#xff0c;最大进度的减少模式串与目标串的匹配次数以达到快速匹配的效果。算法与暴力求解的改进在于每当一趟匹配过程中出现的字符比较不相等时&am…

Django创建应用、ORM的进阶使用及模型类数据库迁移

1 Django项目创建第一个应用 Django 项目就是基于 Django 框架开发的 Web 应用&#xff0c;它包含了一组配置和多个应用&#xff0c;我们把应用称之为 App&#xff0c;在前文中对它也做了相应的介绍&#xff0c;比如 auth、admin&#xff0c;它们都属于 APP。 一个 App 就是一…

postman token 请求头添加

思路&#xff1a; 1、登录成功后将 得到的token设置为集合变量 2、在需要携带Authorization的请求头上使用该集合变量 关键代码 const responseData pm.response.json(); if(responseData.code 1) {// 获取tokenconst {data:{token}} responseData// 设置为集合变量pm.colle…

C# 实现电子签名

本项目基于Emgu.CV&#xff08;C#下OpenCv的封装&#xff09;开发的&#xff0c;编译器最新版Vs2022&#xff0c;编译环境x86 直接看效果图 1.主页面 2.我们先看手写的方式&#xff1a; 点击确认就到主界面&#xff0c;如下 &#xff1a; 点击自动适配-&#xff0c;再点击生成…

《C++设计模式》——创建型

前言 创建型为了创建东西才是有用的&#xff0c;创建型设计模式使用的场景&#xff1a; 1、创建一个东西&#xff1b; 2、可重复利用&#xff1b; 3、灵活性高&#xff0c;代码可因地制宜。 Factory Method(工厂模式) 工厂模式将目的将创建对象的具体过程屏蔽隔离起来&#…

go channel实践与源码探索(初始化、发送消息、接收消息、关闭)

文章目录 概要一、并发编程1.1、Actor模型1.2、CSP模型 二、Go Channel实践三、源码分析3.1、初始化3.2、发送消息3.3、接收消息3.4、关闭通道 总结 概要 通道&#xff08;Channel&#xff09;是Go语言提供的协程之间通信与同步的方式。我们知道在并发编程&#xff08;多进程、…

时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化

时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化 目录 时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 北方苍鹰优化算法NGO优化VMD&#xff0c;对其分解层数&#xff0c;惩罚因子数做优化…

基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的玛丽冒险小游戏程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…

Alibaba(商品详情)API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载alibaba API的SDK并掌握基本的API基础知识和调用 4&#xff09;利…

管理类联考——数学——汇总篇——知识点突破——应用题——交叉比例法/杠杆原理

读书笔记 甲有&#xff1a;x个a&#xff0c;乙有&#xff1a;y个b&#xff0c;甲乙的平均值为c&#xff0c;根据总数相等&#xff0c;得&#xff1a;axbyc(xy)&#xff0c;即ax-cxcy-by&#xff0c;则 x y c − b a − c \frac{x}{y}\frac{c-b}{a-c} yx​a−cc−b​ &#…

OpenCV(二十五):边缘检测(一)

目录 1.边缘检测原理 2.Sobel算子边缘检测 3.Scharr算子边缘检测 4.两种算子的生成getDerivKernels() 1.边缘检测原理 其原理是基于图像中灰度值的变化来捕捉图像中的边界和轮廓。梯度则表示了图像中像素强度变化的强弱和方向。 所以沿梯度方向找到有最大梯度值的像素&…

17-数据结构-查找-(顺序、折半、分块)

简介&#xff1a;查找&#xff0c;顾名思义&#xff0c;是我们处理数据时常用的操作之一。大概就是我们从表格中去搜索我们想要的东西&#xff0c;这个表格&#xff0c;就是所谓的查找表&#xff08;存储数据的表&#xff09;。而我们怎么设计查找&#xff0c;才可以让计算机更…

sqli-labs关卡之一(两种做法)

目录 一、布尔盲注(bool注入) 二、时间盲注(sleep注入) 一、布尔盲注(bool注入) 页面没有报错和回显信息&#xff0c;只会返回正常或者不正常的信息&#xff0c;这时候就可以用布尔盲注 布尔盲注原理是先将你查询结果的第一个字符转换为ascii码&#xff0c;再与后面的数字比较…