21.网络爬虫—js逆向详讲与实战

news2024/10/6 18:33:06

网络爬虫—js逆向

  • js逆向
  • JavaScript逆向的详细讲解
  • 实战演示
    • 有道翻译
        • 设置密钥和初始向量
        • 对密钥和初始向量进行哈希处理
        • 创建AES对象并解密消息
        • 移除padding并返回结果

前言
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主
📝​📝第一篇文章《1.认识网络爬虫》获得全站热榜第一,python领域热榜第一
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
🧾 🧾第十篇文章《10.网络爬虫—MongoDB详讲与实战》全站热榜第八领域热榜第二
🧾 🧾第十三篇文章《13.网络爬虫—多进程详讲(实战演示)》全站热榜第十二
🧾 🧾第十四篇文章《14.网络爬虫—selenium详讲》测试领域热榜第二十
🧾 🧾第十六篇文章《16.网络爬虫—字体反爬(实战演示)》全站热榜第二十五
🧾 🧾第十九篇文章《19.网络爬虫—照片管道》全站综合热榜第十二。
🧾 🧾第二十篇文章《20.网络爬虫—Scrapy-Redis分布式爬虫》全站综合热榜第二十五名,大数据领域第六名
🎁🎁《Python网络爬虫》专栏累计发表二十篇文章,上榜九篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。


js逆向

📑 📑在这个大数据时代,我们眼睛所看到的百分之九十的数据都是通过页面呈现出现的,不论是PC端、网页端还是移动端,数据渲染还是基于html/h5+javascript进行的,而大多数的数据都是通过请求后台接口动态渲染的。而想成功的请求成功互联网上的开放/公开接口,必须知道它的URL、Headers、Params、Body等数据是如何生成的。

JavaScript逆向的详细讲解

📑 📑JavaScript逆向工程是指通过分析JavaScript代码和运行行为来理解程序的内部机制。这种技术可以用于破解JavaScript程序的加密和混淆,以及获取程序的逻辑和数据等信息。
以下是JavaScript逆向的详细讲解

1. JavaScript逆向工程的基本原理

📑 📑JavaScript逆向工程的基本原理是通过分析JavaScript代码和运行行为来理解程序的内部机制。这种技术可以用于破解JavaScript程序的加密和混淆,以及获取程序的逻辑和数据等信息。
JavaScript逆向工程通常包括以下步骤:

1)获取JavaScript代码
可以使用浏览器的开发人员工具或其他工具来获取JavaScript代码。

2)分析JavaScript代码
可以使用代码编辑器或其他工具来分析JavaScript代码,包括查找函数、变量、常量和操作符等。

3)调试JavaScript代码
可以使用浏览器的开发人员工具或其他工具来调试JavaScript代码,包括断点调试、单步调试和变量监视等。

4)破解JavaScript代码
可以使用反混淆和反编译工具来破解JavaScript代码,以获取程序的逻辑和数据等信息。

2. JavaScript逆向工程的应用场景

JavaScript逆向工程可以应用于以下场景

1)破解加密和混淆的JavaScript程序:JavaScript逆向工程可以破解加密和混淆的JavaScript程序,以获取程序的逻辑和数据等信息。

2)调试和测试JavaScript程序:JavaScript逆向工程可以帮助开发人员调试和测试JavaScript程序,以发现程序中的错误和问题。

3)优化JavaScript程序的性能和安全性:JavaScript逆向工程可以帮助开发人员优化JavaScript程序的性能和安全性,以提高程序的质量和可靠性。

4)研究JavaScript程序的内部机制:JavaScript逆向工程可以帮助研究人员研究JavaScript程序的内部机制,以发现其中的漏洞和安全问题。

3. JavaScript逆向工程的注意事项

在进行JavaScript逆向工程时,需要注意以下事项:

1)遵守法律法规
JavaScript逆向工程可能涉及版权、知识产权和隐私等问题,需要遵守相关的法律法规。

2)保护个人隐私
在分析JavaScript程序时,需要遵守个人隐私的原则,不得获取个人信息和敏感信息。

3)避免滥用JavaScript逆向技术
JavaScript逆向技术可以用于破解和攻击,需要避免滥用。

4)保护JavaScript程序的安全性
在进行JavaScript逆向工程时,需要保护JavaScript程序的安全性,不得泄露JavaScript程序的机密信息和漏洞。

5)学习和研究JavaScript逆向技术
JavaScript逆向技术是一种有用的技术,需要学习和研究,以提高自己的技能和知识水平。

实战是学习知识最快的途径,下面进行实战演示帮助理解学习。

实战演示

有道翻译

有道翻译

浏览器:谷歌浏览器

在这里插入图片描述

右键检查,输入需要翻译的内容,然后开始抓包

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

🎯点击翻译,我们得到两个数据,一个是key,请求方式是post,状态是200
载荷是西瓜,预览里面出现success,表示翻译成功

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

🎯还有一个文件是webtranslate,请求方法同样是post,状态是200,载荷里面有西瓜两个字和一些参数,预览和响应里面是一串加密的数据。

🎯接下来敲代码来获取文件,然后来破解数据

# coding = utf-8
import crawles

url = 'https://dict.youdao.com/webtranslate'

cookies = {
    'OUTFOX_SEARCH_USER_ID': '-312652410@10.108.162.134',
    'OUTFOX_SEARCH_USER_ID_NCOO': '42958927.495580636',
}

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://fanyi.youdao.com',
    'Pragma': 'no-cache',
    'Referer': 'https://fanyi.youdao.com/',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-site',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
    'sec-ch-ua': '\"Google Chrome\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '\"Windows\"',
}

data = {
    'i': '西瓜',
    'from': 'auto',
    'to': '',
    'domain': '0',
    'dictResult': 'true',
    'keyid': 'webfanyi',
    'sign': 'f522e5818a8497d9a329a93a522eaa2e',
    'client': 'fanyideskweb',
    'product': 'webfanyi',
    'appVersion': '1.0.0',
    'vendor': 'web',
    'pointParam': 'client,mysticTime,product',
    'mysticTime': '1683270687293',
    'keyfrom': 'fanyi.web',
}

response = crawles.post(url, headers=headers, data=data, cookies=cookies)
print(response.text)

运行结果:
在这里插入图片描述
🎯接下来我们可以通过多次发多次请求来观察哪些是变的,哪些是不变的数据

在这里插入图片描述
在这里插入图片描述
🎯经过对比,我们发现,signmysticTime这两个字段的参数是动态变化的

🎯参数大概分析之后,我们就找出对应的js文件,来分析一下js是如何处理的参数
选择文件,点击启动器,然后可以随便点击一个文件,然后点击它。

在这里插入图片描述

🎯输入sign后,如果出现多个,我们需要逐个观察,看哪一个符合要求
在这里插入图片描述

🎯我们在sign这里打上断点,然后点击翻译,进行抓包处理,得到e和t的值

e: "fsdsogkndfokasodnaso"
t: 1683272866426

在这里插入图片描述
🎯然后我们点击其他参数,获取数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
🎯接下来我们写代码,来得到sign的值

import time
t = 'fsdsogkndfokasodnaso'
e = time.time()
e = 1682603344052
d = 'fanyideskweb'
u = 'webfanyi'

data = f'client={d}&mysticTime={e}&product={u}&key={t}'

from hashlib import md5
m = md5()
m.update(data.encode('utf-8'))
nonce = m.hexdigest()
print(nonce)

在这里插入图片描述
🎯接下来对字符串进行解密,将解密后的字节码转换为utf-8编码的文本字符串

import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
# 导入必要的模块和库

# pip install pycryptodome
# 将存放模块的文件(Crypto)改成大写开头(Crypto)

def decrypt( decrypt_str):
    key = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl"
    iv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4"

    key_md5 = hashlib.md5((key).encode('utf-8')).digest()
    iv_md5 = hashlib.md5((iv).encode('utf-8')).digest()
    print('key_md5:', key_md5)
    print('iv_md5:', iv_md5)
    print()
    aes = AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5)

    code = aes.decrypt(base64.urlsafe_b64decode(decrypt_str))
    return unpad(code, AES.block_size).decode('utf8')


print(decrypt(response.text))

设置密钥和初始向量

key = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl"
iv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4"

这里定义了两个变量key和iv,分别表示密钥和初始向量。注意到这两个字符串已经被加密处理,因此在使用之前需要将它们进行解密。

对密钥和初始向量进行哈希处理

key_md5 = hashlib.md5((key).encode('utf-8')).digest()
iv_md5 = hashlib.md5((iv).encode('utf-8')).digest()

使用了哈希函数md5对密钥和初始向量进行处理。在处理之前,需要将密钥和初始向量从字符串类型转换为字节类型,并在处理后获取到它们的哈希值。

创建AES对象并解密消息

aes = AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5)

code = aes.decrypt(base64.urlsafe_b64decode(decrypt_str))

创建了一个AES对象,使用了上一步中得到的哈希值作为密钥和初始向量的值,并使用CBC模式进行加密解密操作。然后,我们对传入的待解密字符串进行base64解码,再使用解密过程对其进行解密操作。

移除padding并返回结果

return unpad(code, AES.block_size).decode('utf8')

通过Crypto.Util.Padding.unpad函数移除了解密后的字节码中的padding,并通过.decode('utf8')将其转换为文本字符串类型。最终,我们从decrypt函数中返回了解密后的明文字符串。

🎯这段代码主要实现了一个AES-CBC加密算法的解密过程,使用了哈希函数增强了密钥和初始向量的安全性,并通过base64编解码和padding移除等操作对加密消息进行了处理。

运行结果如下
在这里插入图片描述
🎯后续可以对数据进行解析,提取出我们想要的数据。

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

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

相关文章

python基于卷积神经网络实现自定义数据集训练与测试

样本取自岩心照片,识别岩心是最基础的地质工作,如果用机器来划分岩心类型则会大大削减工作量。 下面叙述中0指代Anhydrite_rock(膏岩),1指代Limestone(灰岩),2指代Gray Anhydrite_r…

深度学习-第T6周——好莱坞明星识别

深度学习-第T6周——好莱坞明星识别 深度学习-第T6周——好莱坞明星识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …

Flutter学习之旅 - 页面布局Stack层叠组件

文章目录 StackPositioned定位布局浮动导航(StackPositioned)FlutterMediaQuery获取屏幕宽度和高度StackAlign Stack Stack意思是堆的意思,我们可以用Stack结合Align或者Stack结合Positioned来实现页面的定位布局 属性说明alignment配置所有元素显示位置children子组…

23.Lambda表达式

Lambda表达式 一、Lambda表达式背景 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式…

2023-05-05 背包问题

背包问题 1 01背包和完全背包问题 01背包问题 有N件物品和一个容量为V的背包,第i件物品的体积是v[i]、价值是w[i],每种物品只可以使用一次,求将哪些物品放入背包可以使得价值总和最大。这里的w是weight即权重的意思 这是最基础的背包问题&a…

【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手

文章目录 前言环境列表视频教程1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 转载自远控源码文章:飞书接入ChatGPT - 将ChatGPT集…

Ubuntu 如何查看 CPU 架构、系统信息、内核版本、版本代号?

Ubuntu 查看 CPU 架构、系统信息、内核版本、版本代号等相关信息有很多方式,本文介绍几种常用的命令。 x86 架构与 ARM 架构的 CPU 架构不同,如果回显为 aarch64 表示为 ARM 架构,如果回显为 x86_64 表示为 x86 架构,参考《CPU 架…

Prometheus快速入门

Prometheus快速入门 环境准备 三台主机,配置好主机名 各自配置好主机名 # hostnamectl set-hostname --static server.cluster.com ... 三台都互相绑定IP与主机名 # vim /etc/hosts 192.168.126.143 server.cluster.com 192.168.126.142 agent.clu…

归并排序(看了就会)

目录 概念1. 基本思想2. 实现逻辑3. 复杂度分析4、代码 概念 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单&…

智头条|欧盟达成《人工智能法》协议,全球前沿科技齐聚AWE 2023

行业动态 华为云联手多方推进数字化,软通动力深度参与 华为云宣布启动“‘百城万企’应用现代化中国行”,旨在推动应用现代化进程、助力数字中国高质量落地。软通动力是该行动的参与者之一,共同探索符合区域特点、产业趋势、政企现状的数字化…

Python进阶(Linux操作系统)

一,操作系统 1.1,Linux系统基础操作 1.2,linux进程与线程 1.2.1并发,并行 (1)并发:在一段时间内交替的执行多个任务:对于单核CPU处理多任务,操作系统轮流让让各个任务…

BasicVSR++代码解读(总体介绍)

本文代码主要来自于OpenMMLab提供的MMEditing开源工具箱中的BasicVSR代码。第一部分的解读主要是针对每一个部分是在做什么提供一个解释,便于后续细读每一个块的细节代码。 (1)导入库     basicvsr_plusplus_net中主要继承了torch,mmcv,m…

信号的产生——线性调频函数

信号的产生——线性调频函数 产生线性调频扫频信号函数chirp的调用格式如下: (1)y chirp(t,f0, t1,f1) 功能:产生一个线性(频率随时间线性变化)信号,其时间轴设置由数组t定义。时刻0的瞬间频…

SpringBoot的配置文件、日志文件

一、配置文件( .properties、.yml) 1、.properties 配置文件 1.1、格式 1.2、基本语法 1.2.1、如:一般配置(以键值的形式配置的,key 和 value 之间是以“”连接的。) 1.2.2、如:自定义配置&a…

tcc-transaction 源码分析

tcc介绍 tcc介绍查看我之前的文章: https://caicongyang.blog.csdn.net/article/details/119721282?spm1001.2014.3001.5502 tcc-transaction 介绍: http://mengyun.org/zh-cn/index.html 本文基于2.x 最新版本:https://github.com/changmingxie/tcc…

以京东为例,分析优惠价格叠加规则

一、平行优惠计算原则 1、什么是“平行式门槛计算规则”? 平行式门槛计算规则,即每一层级优惠都直接根据商品的单品基准价来计算是否符合门槛,店铺/平台促销、优惠券类优惠之间是并列关系,只要单品基准价或单品基准价总和&#x…

c++(类和对象中)

【本节目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 赋值运算符重载 6. const成员函数 7. 取地址及const取地址操作符重载 目录 1、类的6个默认成员函数 2、构造函数 2.1概念 2.2特性 3.析构函数 3.1概念 3.2特性 4.拷贝构造函数…

Kafka生产者

一、生产者发送流程 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka …

网络应用基础 ——(2023新星计划文章二)

一,TCP/UDP报头 1.1TCP报文头部详解 Source port:源端口号与Destination port目标端口号: 在TCP(传输控制协议)协议中,源端口和目标端口字段用于标识通信会话的端点。 (1)源端口是一个16位字段…

LeetCode 1206. 实现跳表

不使用任何库函数,设计一个跳表。 跳表是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。 例如,一个跳表包…