Python网络爬虫实战——实验6:Python实现js逆向与加解密

【实验内容】

本实验主要介绍在数据采集过程中对js代码进行分析从而对加密字段进行解密。

【实验目的】

1、理解js逆向工程的概念
2、学会逆向工程中的加解密分析

【实验步骤】

步骤1 理解js逆向工程的概念
步骤2 学会逆向工程中的加解密分析
步骤3 采集广东政府采购网

步骤1:理解js逆向工程的概念
JavaScript逆向工程是指通过分析、理解和操作JavaScript代码,以揭示和破解其实现的逻辑和功能。这种技术通常用于深入了解网页前端的运作方式、修改网页行为、逆向工程加密算法或处理动态生成的内容等情况。

  • JavaScript代码分析: 逆向工程的第一步是深入分析JavaScript代码。开发者工具、浏览器控制台以及其他工具可以用于查看网页源代码、JavaScript脚本以及网络请求。

  • 功能理解:逆向工程涉及理解JavaScript代码的功能和逻辑。这包括了解脚本中的变量、函数、事件处理程序等,以及它们如何与页面交互和影响数据的生成和呈现。

  • 加密算法解析:当网页使用JavaScript进行数据加密时,逆向工程要求分析加密算法。这可能包括密钥生成、加密过程、解密过程等方面。逆向工程者试图理解加密逻辑,并可能撰写相应的解密算法。

  • 模拟用户行为:在一些情况下,逆向工程可能涉及模拟用户与页面的交互,以触发特定的JavaScript行为。这对于处理需要用户交互的网页或触发动态加载数据的情况特别有用。

  • 绕过反爬机制:
    一些网站采用反爬机制,通过JavaScript加密或混淆数据,以防止被爬虫轻松获取。通过逆向工程,可以绕过这些机制,获取原始数据。

步骤2 学会逆向工程中的加解密分析
在对广东政府采购网进行页面分析时发现在发送的ajax请求头中存在着一个Nsssjss的加密字段,在发送一个请求时必须携带正确的密文才能返回数据,但我们并不知道这段密文的具体含义,此时就需要分析一下js文件。
-**************************************************************
/===============================================================================================================/在这里插入图片描述首先理解一下非对称加密算法,非对称加密是一种使用公钥和私钥进行加密和解密的加密算法。
-***************************************************************************

  • 密钥对生成: 首先,参与通信的每个实体都会生成一对非对称密钥,包括一个公钥和一个私钥。这对密钥是数学相关的,但是无法通过公钥推导出私钥。

  • 公钥分发: 每个实体将其公钥分发给通信的其他实体,但私钥保持秘密。公钥是用于加密的,而私钥用于解密。

  • 加密过程: 当实体A想要向实体B发送加密消息时,实体A使用实体B的公钥对消息进行加密。只有拥有相应私钥的实体B才能解密这条消息。

  • 解密过程: 实体B使用其私钥对接收到的加密消息进行解密,得到原始的消息。

    非对称加密的关键在于公钥用于加密,私钥用于解密。由于私钥不会被公开分享,只有拥有相应私钥的实体才能够解密加密的消息,从而保障了通信的安全性。这种加密方法广泛用于安全通信、数字签名等领域。

    复制encryptByRSA函数到index.html中搜索,可以找到nsssjss字段的组成
    -**********************************************************************
    继续搜索getComon函数,可以看到其返回值。
    -*******************************************************************************
    由此,我们得到了nsssjss字段的值是由/=================================================================/

步骤3 采集广东政府采购网
(1) 构造nsssjss加密字段
在这里插入图片描述使用 PyCryptoDome 库中的 RSA 模块,importKey 方法用于导入公钥,public_key 是传递给函数的公钥字符串。
-*******************************************************************
构造nsssjss加密字段,调用encrypt_by_rsa函数,将公钥和value传递过去,返回加密后的字段。
-*******************************************************************
将加密字段添加到请求头中做参数传递给服务器。
-*******************************************************************
(2) 获取子页面链接
import httpx
client = httpx.Client()
/=============================================================================================/


随后,将数据传递给parse_html函数进行解析。

(3) 解析子页面数据
从子页面返回的数据中进行清洗,去除掉style、script 标签,拿到全部的文本数据
-*************************************************************************
/=============================================================================================================================================/
-************************************************************************
/===============================================================================================/

(4) 保存数据
-***********************************************************************
使用with语句打开文件 “guangdong -zhong.json”,打开模式为追加模式 a,以UTF-8编码。将JSON格式的字符串 message 写入文件,并添加一个逗号和换行符,以便在后续追加新的JSON数据。
生成单个字段完整示例如下:
-**************************************************************

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

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

相关文章

Jmeter接口测试-websocket测试

壹 Jmeter接口测试-websocket测试 测试之前的准备工作,需要websocket插件 方式一: 去github下载: https://github.com/maciejzaleski/JMeter-WebSocketSampler/wiki/Dependencies jetty-http-9.1.2.v20140210.jarjetty-io-9.1.2.v20140210.jarjetty-util-9.1.2.v20140210…

真香一个团队协作工具部署

部署 version: "3.4"services:mongo:image: mongocontainer_name: twake-dbvolumes:- /opt/Twake/data:/data/dbnode:image: twaketech/twake-node:latestcontainer_name: twake-webports:- 3345:3000# - 8000:3000environment:- DEVproduction- SEARCH_DRIVERmong…

IndexedDB

Web SQL Database | Can I use... Support tables for HTML5, CSS3, etc IndexedDB | Can I use... Support tables for HTML5, CSS3, etc 为什么websql被废弃?_笔记大全_设计学院 WebSQL有兼容、性能、安全问题,要考虑使用IndexedDB替代。 一文看懂 In…

幻兽帕鲁搭建私服,一键更新方法

看着帕鲁这么火,估计更新会变为常态了,如果有自己搭建私服的话,跟着我下面的方法去进行更新吧! 如果你还没有自己的私服,快去三五十搞一个吧,只需三五分钟,叫上你的小伙伴一起去搞起来吧 只需3分…

【自然语言处理的发展】

自然语言处理的发展 自然语言处理(NLP)作为人工智能领域的一个分支,旨在让计算机理解和生成人类语言。随着深度学习和大数据技术的不断进步,NLP在近年来取得了显著的突破。本文将探讨NLP技术的发展历程、最新技术进展以及未来展望…

如何在Shopee平台上进行宠物类目的选品丨shopee宠物选品

在Shopee平台上进行宠物类目的选品是一个重要的任务,它直接关系到卖家的销售业绩和市场竞争力。为了成功选择适合的宠物用品,在选品过程中,卖家可以遵循以下策略: 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#…

vue3项目中使用Arco Design-Table组件结合h()函数生成表格嵌套表格效果

vue3项目中使用Arco Design-Table组件【点击跳转】结合vue3-h()函数【点击跳转】生成表格嵌套表格效果。 示例效果如下&#xff1a; 【方式一】 给Table组件设置表格的“展开行配置”参数&#xff1a;expandable <a-table :expandable"expandable"></a-t…

ZYNQ程序固化

文章目录 一、简介二、固化操作2.1 生成固化文件2.2 固化到SD卡2.3 固化到Flash 参考 将程序存储在非易失性存储器中&#xff0c;在上电或者复位时让程序自动加载运行。 这个过程需要启动引导程序( Boot Loader)参与&#xff0c;Boot Loader会加载FPGA配置文件&#xff0c;以及…

【异常收集】IDEA启动项目遇到的异常汇总,包括插件异常,版本依赖异常,启动异常等以及对应的解决办法

该文章旨在记录开发中遇到的一些异常&#xff0c;以供遇到似错误进行参考修改 一、项目在多个环境下切换&#xff0c;有一次启动后编译失败&#xff0c;报异常 背景&#xff1a;项目在不同环境下有对应的分支&#xff0c;切换分支后运行项目&#xff0c;报错如下 错误:Kotlin:…

【mac】 配合鼠标放大缩小页面\通过ctrl或cmd键缩放页面

win转mac后&#xff0c;一直苦于页面的操作习惯&#xff0c;终于BBT这个工具可以通过添加滚轮手势来实现快捷键缩放页面 顶部配置触发选择“普通鼠标” 然后设置触发操作

滴滴基于 Ray 的 XGBoost 大规模分布式训练实践

背景介绍 作为机器学习模型的核心代表&#xff0c;XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此&#xff0c;保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时&#xff0c;面对多样化的业务场景定制需求和数据规…

ubuntu设置右键打开terminator、code

前言&#xff1a; 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一&#xff1a;右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…

docker-compose Install influxdb1+influxdb2+telegraf

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下&#xff0c;以前&#xff08;Windows 11&#xff09; Typora 可以顺利较快地由 .md 导出 .pdf 文件&#xff0c;此功能当然非常实用与重要。 然而&#xff0c;有一次电脑因故重装了系统&#xff08;刷机&#xff09;…

如何获得ICP备案服务码?

服务码获取规则 域名备案需要ICP备案服务码&#xff0c;服务码需要购买服务器获得&#xff0c;阿里云的服务器获取服务码的规则如下。 * 不同类型的服务器可申请的ICP备案服务码数量不同&#xff0c;新增备案一个网站需使用一个ICP备案服务码&#xff0c;注销或取消接入后无法…

QT+VS实现Kmeans聚类算法

1、Kmeans的定义 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程&#xff0c;聚类就是一种发现这种内在结构的技术&#xff0c;聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法&#xff0c;由于简洁和效率使得他成为所有聚类算法中最广泛使…

linux中配置文件目录为什么用etc来命名

在早期的 Unix 系统中&#xff0c;/etc 目录的名称确实来源于单词 “etcetera” 的缩写&#xff0c;最初意味着 “其他”&#xff0c;用来存放杂项或者不属于其他特定目录的文件。然而&#xff0c;随着时间的推移&#xff0c;/etc 目录的用途逐渐演变并专门化。 在现代的 Linux…

Android App开发-简单控件(1)——文本显示

本章介绍了App开发常见的几类简单控件的用法&#xff0c;主要包括&#xff1a;显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识&#xff0c;完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍…

架构篇27:如何设计计算高可用架构?

文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…

【Docker】nacos集群搭建Nginx负载均衡

目录 一、mysql安装与基操 1.1 数据准备 1.2 创建mysql与数据表 二、Nacos集群部署 2.1 创建nacos及配置 2.2 创建Nginx容器 一、mysql安装与基操 1.1 数据准备 拉取mysql docker pull mysql:5.7(版本) 定义挂载目录 mkdir -p /mysql/{conf,data,script} 配置my.c…