当前位置: 首页 > news >正文

爬虫 — Js 逆向

目录

  • 一、概念
    • 1、爬虫
    • 2、反爬虫
    • 3、加密解密
    • 4、加密
    • 5、步骤
  • 二、常用加密方式
    • 1、加密方式
    • 2、常见加密算法
    • 3、JS 中常见的算法
    • 4、MD5 算法
      • 4.1、MD5 加密网站
      • 4.2、特点
    • 5、DES/AES 算法
    • 6、RSA 算法
    • 7、base64 算法
  • 三、环境配置
    • 1、node.js 环境配置
    • 2、PyCharm 环境配置

一、概念

1、爬虫

使用任何技术手段,批量获取网站信息的一种方式。

2、反爬虫

使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。

在这里插入图片描述

3、加密解密

一个信息干扰的过程,保证固定的人可以看到信息,把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。

4、加密

对原来为明文的数据按照某种算法进行处理,变成不认识的加密数据。

5、步骤

在浏览器加密,找到加密方式,模拟加密方式,进行加密,将加密的数据放到字典,携带参数,正常发送 post 请求。

二、常用加密方式

1、加密方式

数据加密方式描述主要解决的问题常用算法
对称加密指数据加密和解密使用相同的秘钥数据的机密性DES,AES
非对称加密也叫公钥加密,指数据加密和解密使用不同的秘钥——密钥对身份验证DSA,RSA
单向加密指只能加密数据,而不能解密数据数据的完整性MD5,SHA 系列算法

2、常见加密算法

  • MD5(Message Digest Algorithm 5)
  • DES(Data Encryption Standard)
  • AES(Advanced Encryption Standard)
  • RSA(Rivest-Shamir-Adleman)

3、JS 中常见的算法

  • 线性散列 MD5 算法
  • 对称加密 DES/AES 算法
  • 非对称加密算法 RSA
  • base64 加密算法

4、MD5 算法

MD5 是一种被广泛使用的线性散列算法,可以产出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。

MD5 加密之后产生的是一个固定长度(32位或16位)的数据,密文不能推算出明文,不可逆。

4.1、MD5 加密网站

https://www.cmd5.com/

https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.js

4.2、特点

数据多长,长度都是都是固定的(32位或16位)。

加密的数据不是随机,因为使用的相同的算法对相同的数据进行处理,所以结果都是相同的。

无法从加密的数据还原到以前的密文。

5、DES/AES 算法

对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的秘钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该秘钥(称为对称密码),是一种对称加密算法。

数据发送方将明文以及密钥一起经过特殊加密算法成为密文之后,将它发送出去。接收方收到密文之后,需要使用加密用到的相同密钥以及相同的算法进行密文解密。

加密方与解密方拥有相同的密码本。

DES 和 AES 的区别

  • 加密后密文长度不同

    DES 加密后密文长度是8的整数倍

    AES 加密后密文长度是16的整数倍

  • 安全度不同

    一般情况下 DES 足够安全

    如果要求高可以使用 AES

  • DES 和 AES 切换只需要修改 CryptoJS.DES =>CryptoJS.AES

js 语法

加密:encrypt()

解密:decrypt()

特点

加密和解密都是使用相同密钥加密算法,也称为单密钥加密,公开的。

缺点

使用的都是同一把密钥,一方密钥泄露,传输的数据就存在安全风险。

其它对称加密算法

3DES(Triple Data Encryption Standard),TDEA(Triple Data Encryption Algorithm),RC2(Rivest Cipher 2),RC4(Rivest Cipher 4)

6、RSA 算法

一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。

非对称加密需要2个密钥

公开密钥(publickey):公钥,加密的,公开的

私有密钥(privatekey):私钥,解密处理,私有的

公钥和私钥是一对

js语法

setPublickey:设置公钥

其它非对称加密算法

RAS(Rivest-Shamir-Adleman),DSA(Digital Signature Algorithm),ECC(Elliptic Curve Cryptography)

7、base64 算法

伪加密算法,经过它处理的数据非常像密文数据,不是严格意义上的密文,实际上就是一种编码。

base64 是一种使用 A—Z,a—z,0—9,+,/ 这64个字符来表示任意二进制数据的方法。

实现算法的第三方工具

PyCryptodome

安装方式

pip install pycryptodome

三、环境配置

1、node.js 环境配置

node.js 下载官网

安装步骤

1、点击 Next;

在这里插入图片描述

2、选中勾选框后,点击 Next;

在这里插入图片描述

3、选中安装路径后,点击 Next;

在这里插入图片描述

4、点击 Next;

在这里插入图片描述

5、点击 Next;

在这里插入图片描述

6、点击 Install;

在这里插入图片描述

7、点击 Finish;

在这里插入图片描述

8、安装完成。

9、验证安装。

按 win + R,输入 cmd 后,按回车。

在这里插入图片描述

在终端窗口输入以下命令:

node -v 显示安装的 node.js 版本

npm -v 显示安装的 npm 版本

在这里插入图片描述

2、PyCharm 环境配置

需要使用 PyCharm 专业版的,才能执行 js 代码。

点击进入 PyCharm 官网下载

1、按电脑系统选择对应的专业版安装包;

在这里插入图片描述

2、下载好安装包后,点击安装,点击 Next;

在这里插入图片描述

3、更换安装路径后,点击 Next;

在这里插入图片描述

4、选中选择框后,点击 Next;

在这里插入图片描述

5、点击 Install;

在这里插入图片描述

6、点击 Finish;

在这里插入图片描述

7、重启电脑;

8、下载激活码文件后,将文件放在 PyCharm 安装目录下,并解压好;

点击下载激活码文件

在这里插入图片描述

9、在解压后的文件夹里找到 scripts 文件夹,打开后,找到 install-current-user.vbs 文件,双击打开,

点击 “OK” 或者 “确定”,然后等 "Done"弹出,3分钟内未弹出请重新执行 vbs;

在这里插入图片描述

10、双击打开 PyCharm 软件,选中"Activate PyCharm"和"Activation Code";

在这里插入图片描述

11、在解压后的激活码文件里找到 code 文件夹后,找到 PyCharm.txt 文件,并打开,复制里面的代码;

在这里插入图片描述

12、将复制后的代码粘贴到"Activation Code"里后,点击 Activation;

在这里插入图片描述

13、点击 Continue;

在这里插入图片描述

14、点击 Plugins 安装插件,搜索 nodejs,点击 Install 安装后,重启 PyCharm;

在这里插入图片描述

15、创建 js 文件;

在这里插入图片描述

16、编写 js 代码后,运行测试一下,在控制台打印出数据即为成功;

// 定义函数
function d1(){// 打印数据console.log('hello world')
}
// 调用函数
d1()

17、模拟 js 构造出的密文数据;

// 定义函数
function d1(e, el){// 返回的数据return {'a':e, 'b': el}
}
// js 已经构造出密文数据,给到 python 文件当中的代码
console.log(d1('hello'))

18、Python 代码调用调试好的 js 代码。

# 安装方法:pip install PyExecJs -i https://pypi.tuna.tsinghua.edu.cn/simple
import execjs  # 用于执行 JavaScript 代码的库# 定义函数
def get_js(js_path, fuc_name, *func_args):''':param js_path:  js代码的文件路径:param fuc_name: 调用的js函数名称:param func_args: 传入的参数:return:'''# 1. 读取 js 代码with open(js_path, 'r', encoding='utf-8') as f:js_code = f.read()# 2. 编译 js 代码cjs = execjs.compile(js_code)# 3. 执行 js 代码,函数后面跟上一个参数print(cjs.call(fuc_name, func_args))# 调用函数
get_js('demo.js', 'd1', 'hello', 'world')

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

相关文章:

爬虫 — Js 逆向

目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…...

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了,但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此,在一些特定的网站上,我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构,甚至是处理…...

CentOS7安装源设置

此处的安装源地址需要填写:(适用于centos7) http://mirrors.aliyun.com/centos/7/os/x86_64/...

pool = multiprocessing.Pool()报错:module object has no attribute Pool

pool multiprocessing.Pool()报错:module object has no attribute Pool,为什么? 我很抱歉,前面提供的回答是错误的。在Python的multiprocessing模块中,确实有一个名为Pool的类。如果你在使用multiprocessing.Pool()…...

Linux Shell 实现一键部署podman

podman 介绍 使用 Podman 管理容器、Pod 和映像。从本地环境中无缝使用容器和 Kubernetes,Podman 提供与 Docker 非常相似的功能,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行…...

Biome-BGC生态系统模型与Python融合技术

Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数,模拟日尺度碳、水和氮通量的有效模型,其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天…...

Matlab图像处理-区域描述

一旦一幅图像的目标区域被确定,我们往往用一套描述子来表示其特性。选择区域描述子的动机不单纯为了减少在区域中原始数据的数量,而且也应有利于区别带有不同特性的区域。因此,当目标区域有大小、旋转、平移等方面的变化时,针对这…...

openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据

文章目录 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新…...

Flink RowData 与 Row 相互转化工具类

RowData与Row区别 (0)都代表了一条记录。都可以设置RowKind,和列数量Aritry。 (1)RowData 属于Table API,而Row属于Stream API (2)RowData 属于Table内部接口,对用户不友…...

企业架构LNMP学习笔记48

数据结构类型操作: 数据结构:存储数据的方式 数据类型 算法:取数据的方式,代码就把数据进行组合,计算、存储、取出。 排序算法:冒泡排序、堆排序 二分。 key: key的命名规则不同于一般语言…...

docker部署neo4j

拉取镜像 docker pull neo4j:3.5.35-community查看镜像 [rootlocalhost data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE neo4j 3.5.35-community 3548ff943256 13 months ago 446MB创建容器并运行 docker run -d …...

融云观察:AI Agent 是不是游戏赛道的下一个「赛点」?

本周四 融云直播间,点击报名~ ChatGPT 的出现,不仅让会话成为了未来商业的基本形态,也把大家谈论 AI 的语境从科技产业转向了 AI 与全产业的整合。 关注【融云全球互联网通信云】了解更多 而目前最热衷于拥抱生成式 AI 的行业中&#xff0c…...

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步:按压键盘上的F12键打开开发这工具,并点击右上角三个小黑点 第二步:选择More tools 第三步:选择Network conditions 第四步:找到User agent一列,取消复选框的勾选 第五步:选择谷歌爬虫…...

uni-app 点击蒙版层时关闭自定义弹窗

click.stop&#xff1a;用于阻止冒泡 click.stop 标签范围内&#xff0c;点击任何区域(包括 click 点击事件)都不会关闭弹窗。标签范围外会关闭弹窗 click.stop 标签内的 click 等事件&#xff1a;如果事件内有关闭弹窗的代码可关闭弹窗 在 template 中 <view class&quo…...

【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)

文章目录 创建环境创建专用网络VPC安全组创建云服务器打包部署2. Java环境启动项目开机启动任意服务1. 制作服务文件2. 制作启动脚本3. 制作停止脚本4. 增加执行权限5. 设置开机启动 创建镜像继续创建多台云服务器负载均衡弹性伸缩redis的报警规则白名单1. LAMP 环境1. 安装Apa…...

基于Java的设计模式-策略模式

策略模式就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 基本概念 策略模式主要是解决多种算法相似的情况下&#xff0c;使用if...else所带来的复杂和难以维护。当存在系统中有多个类&#xff0c;但是区分它们的是只是它们的直接行为&#xff0c;那我们…...

小程序多种姿势更换文章

概述 简单的文章切换demo&#xff0c;通过倒计时、摇一摇、双击进行文章切换 详细 直接看效果图吧&#xff01;比较简单&#xff0c;主要是练习一下... 小程序不带双击事件&#xff0c;可以记录第一次单击事件和第二次单机事件进行双击操作。 1、摇一摇是通过调用官方的 …...

读书笔记-《ON JAVA 中文版》-摘要25[第二十二章 枚举]

文章目录 第二十二章 枚举1. 基本功能1.1 基本 enum 特性 2. 方法添加2.1 方法添加2.2 覆盖 enum 的方法 3 switch 语句中的 enum4. values 方法的神秘之处5. 实现而非继承6. 随机选择7. 使用接口组织枚举8. 使用 EnumSet 替代 Flags9. 使用 EnumMap10. 常量特定方法11. 本章小…...

DNDC模型建模方法及应用

DNDC&#xff08;Denitrification-Decomposition&#xff0c;反硝化-分解模型&#xff09;是目前国际上最为成功的模拟生物地球化学循环的模型之一&#xff0c;自开发以来&#xff0c;经过不断完善和改进&#xff0c;从模拟简单的农田生态系统发展成为可以模拟几乎所有陆地生态…...

Kafka为什么是高性能高并发高可用架构

目录 1 前言2 顺序写入3 页缓存4 零拷贝5 Broker 性能6 流数据并行7 总结 1 前言 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。小伙伴们是不是有点困惑了&#xff0c;一般认为…...

QT-day3

完成文本编辑器的保存工作 void Widget::on_savebton_clicked() {QString fileName QFileDialog::getSaveFileName(this,"保存","./","All(*.*);;Images(*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");QFile file(fileName);i…...

开发自测的测试用例设计方法

测试用例设计方法有&#xff1a;等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。 测试用例就是一个文档&#xff0c;描述输入、动作、或者时间和一个期望的结果&#xff0c;其目的是确定应用程序的某个特性是否正常的工作。 一.等价类划分法 顾名思义&#x…...

【AI视野·今日Sound 声学论文速览 第七期】Tue, 19 Sep 2023

AI视野今日CS.Sound 声学论文速览 Tue, 19 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Frame-to-Utterance Convergence: A Spectra-Temporal Approach for Unified Spoofing Detection Authors Awais Khan, Khalid Mahmood Ma…...

MySQL 清空表 截断表

清空表&#xff1a;delete from users&#xff1b; 清空表只是清空表中的逻辑数据&#xff0c;但是物理数据不清除&#xff0c;如主键值、索引等不被清除&#xff0c;还是原来的值。 截断表&#xff1a;truncate table users&#xff1b; 截断表可以用于删除表中 的所有数据…...

2020-2023中国高等级自动驾驶产业发展趋势研究-中国高等级自动驾驶发展近况

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…...

Spring学习之ImportBeanDefinitionRegistrar接口

一、本文内容分类 1、接口功能 2、接口运用场景 3、使用案例 4、注意事项 二、接口功能介绍 描述&#xff1a;ImportBeanDefinitionRegistrar接口是也是spring的扩展点之一,它可以支持我们自己写的代码封装成BeanDefinition对象,注册到Spring容器中&#xff0c;功能类似于注…...

React 全栈体系(八)

第四章 React ajax 三、案例 – github 用户搜索 2. 代码实现 2.3 axios 发送请求 Search /* src/components/Search/index.jsx */ import React, { Component } from "react"; import axios from axiosexport default class Search extends Component {search …...

4.开放-封闭原则

这个原则其实是有两个特征&#xff0c;一个是说‘对于扩展是开放的(Open for extension)&#xff0c;另一个是说‘对于更改是封闭的(Closed for modification)[ASD]。...

oracle递归with子句

比如现在想获取开始日期到结束日期每个月的月底日期&#xff0c;这个时候可以通过递归实现&#xff1a; --通过递归with子句获取开始日期到结束日期每个月的月末日期 WITH date_range (month_start, month_end) AS (SELECT TRUNC(to_date(bdate,yyyy-mm-dd), MM),LAST_DAY(to_…...

如何在Proteus进行STM32F103C8T6模拟以及keil5开发

一、下载Proteus 8和keil5 最新版 Proteus 8.15 Professional 图文安装教程&#xff08;附安装包&#xff09;_proteus密钥_main工作室的博客-CSDN博客Keil uVision5 5.38官方下载、安装及注册教程_keil uvision5下载_这是乐某的博客-CSDN博客 二、新建STM32F103C8项目 接下来…...

电商详情做的最好看的网站/seo是什么意思广东话

导读作者&#xff1a;Sveta Smirnova翻译&#xff1a;郑志江校对&#xff1a;徐晨亮原文 &#xff1a;MySQL Memory Management, Memory Allocators and Operating System本文涉及链接在文末展示When users experience memory usage issues with any software, including MySQL…...

想给公司注册一个网站/学前端去哪个培训机构

1、python中的方法是值传递还是引用传递&#xff1f; 答案&#xff1a;如果python中的值为常量则为值传递&#xff0c;如果为变量则是引用传递。 比如说&#xff1a;如果函数收到的是一个可变对象&#xff08;比如字典 或者列表&#xff09;的引用&#xff0c;就能修改对象的原…...

有用织梦做的大网站吗/专门用来查找网址的网站

作者&#xff1a;Natasha The Robot&#xff0c;原文链接&#xff0c;原文日期&#xff1a;2016-07-25译者&#xff1a;Lanford3_3&#xff1b;校对&#xff1a;千叶知风&#xff1b;定稿&#xff1a;CMB上周我出席了 iOSDevCampDC&#xff0c;并有幸参加了 ayanonagon 关于测试…...

河北手机网站制作企业/网站seo方案案例

你真的了解多线程吗&#xff1f;如果问你“为什么多线程可以提高程序运行效率&#xff1f;”&#xff0c;想必你会说“计算机并行执行任务啊&#xff0c;当然效率高&#xff01;” 这显然不是一个内行该给出的答案。要知道&#xff0c;一个 CPU 在任何时间点上只能干一件事情啊…...

北京做网站那家好/新闻最近的新闻

作者&#xff1a;Jamie Hannaford翻译&#xff1a;bbbmj&#xff08;才云&#xff09;校对&#xff1a;bot&#xff08;才云&#xff09;源代码解释版&#xff08;强烈建议阅读&#xff09;&#xff1a;https://github.com/bbbmj/what-happens-when-k8s想象一下&#xff0c;当你…...

电脑网站兼职在哪里做/营业推广的方式有哪些

我的博客地址: sunquan.club 代码Github地址 : https://github.com/developerSunquan/SwiftStudyNotes 可选变量 可选变量是用来处理值可能缺失的.可选变量可以表示为: 有值, 等于值; 无值, 这两种. 可选变量的表示形式是在类型后加" ? "的形式. 如图所示, 如果poss…...