【Python】js逆向(一)

2,136 阅读7分钟

一、什么是JS、JS反爬是什么?JS逆向是什么?

JS(JavaScript)

是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。JavaScript 是可插入 HTML 页面的编程代码。JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

js 反爬:

是指爬虫在获取网页数据时,遇到了通过JavaScript代码实现的反爬措施。JS反爬技术的实现方式包括动态渲染、异步加载、验证码、IP限制等多种方式。这些技术可以有效地防止爬虫的抓取,保护网站的数据安全。

js 逆向:

是指通过分析和破解JavaScript代码,获取反爬措施的规则和实现方式,从而绕过反爬措施,实现爬虫的抓取。JS逆向需要具备一定的JavaScript编程能力和代码分析能力。

注意:进行JS逆向可能会涉及到法律风险和道德问题,因此在进行爬虫开发时,应该遵守相关法规和道德规范,避免侵犯他人的合法权益。

二、JS逆向的大致流程:

1、分析目标网站的反爬措施

使用浏览器开发者工具或网络抓包工具分析目标网站的JavaScript代码和网络请求数据,了解反爬措施的实现方式和规则。常见的反爬措施包括动态渲染、异步加载、验证码、IP限制等。

2、理解和分析 js 代码

使用代码编辑器或开发者工具等工具,分析网站的 JavaScript 代码,了解其运行原理、代码结构和实现方式。帮助找到反爬措施的规则和实现方式,从而更好地绕过它们。

3、绕过反爬措施

根据分析结果,采用相应的技术和方法绕过反爬措施。比如:

对于动态渲染的网页,可以使用无头浏览器(如Selenium)模拟浏览器的操作,从而获取渲染后的网页数据;

对于异步加载的网页,可以使用JavaScript库(如Puppeteer)模拟浏览器的异步请求,从而获取异步加载后的数据;

对于验证码的网站,可以使用打码平台(超级鹰)或自动识别技术(如OCR)来识别验证码。

4、调试和优化

进行调试和优化,确保爬虫程序能够稳定地运行,并且能够在反爬措施更新后及时进行适配。

注意: JS逆向需要具备一定的JavaScript编程能力和代码分析能力,不同的网站可能有不同的反爬措施和实现方式,因此需要根据具体情况采用不同的技术和方法进行绕过。同时,在进行JS逆向时,需要遵守相关法规和道德规范,避免侵犯他人的合法权益。

三、逆向的环境搭建:

3.1 安装 node.js

下载网站nodejs.org/en/download…

参考网站:Windows 安装nodejs教程:blog.csdn.net/qq_41465646…

Mac M2 安装nodejs教程:juejin.cn/post/696863…

3.2 安装js代码调试工具(vscode)

下载网站: code.visualstudio.com/download

参数网站:www.cnblogs.com/csji/p/1355…

运行js代码插件: www.jianshu.com/p/3c47770c1…

3.3 安装 PyExecJs 模块

PyExecJS 是Python的一个库,它可以用来执行JavaScript代码。它的使用非常简单,只需要传入一个JavaScript脚本和需要执行的函数名就可以了。 PyExecJS 适用于使用JS编写的一些算法,或者使用JS实现的网站的信息抓取。

PyExecJS 用于实现在 Python 中运行 JavaScript 代码的功能,移植自Ruby的 ExecJS 库。 安装命令:

pip install PyExecJs

4、JS常见加密算法

博客园:www.cnblogs.com/abldh12/p/1…

4.1、Base64算法

base64是一种用64个字符来表示任意二进制数据的方法。

base64使用 A--Z a--z 0--9 + / 这64个字符实现对数据的加密。

4.2、MD5算法

MD5是一种被广泛使用的线性散列算法,可以产出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)数据。

MD5参考网址: cdn.bootcdn.net/ajax/libs/b…

md5破解网址:cmd5.com/ 或者 md5.cn/

补充: 为了提高密码的安全性 一般会在密码后面加上一个随机数或者是时间戳 这个随机数或者是时间戳 我们一般称之为盐。

4.3、DES / AES算法

DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。

和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函数,解密用的是decrypt()函数。

AES/DES加密解密网址: www.sojson.com/encrypt.htm…

4.2.2 AES与DES的区别

  • 加密后密文长度不同

    • DES加密后密文长度是8的整数倍
    • AES加密后密文的长度是16的整数倍
  • 安全度不同

    • 一般情况下DES足够安全
    • 如果要求高可以使用AES
  • DES和AES切换只需要修改CryptoJS.DES =>CryptoJS.AES

4.4、RSA算法

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。有两把对应密钥,公钥和私钥。用公钥加密只能用私钥解开,用私钥加密只能用公钥解密。

RSA加密解密网址:oktools.net/rsa

  • 公开密钥(publickey:公钥)
  • 私有密钥(privatekey:私钥)
  • 公钥和私钥是一对

4.5 JS算法注意点

在JS逆向中,并不是所有的都存在加密算法 有时候 不需要去分析出是什么加密算法直接扣出代码即可。

5、chrome常见调试技巧

  1. 断点调试:在需要调试的JavaScript代码行上设置断点,当代码执行到该执行时,会暂停执行,可以查看当前变量和调用栈等信息。可以通过点击行号来设置断点。

  2. 控制台调试:在控制台面板中可以执行JavaScript代码,可以查看和修改数量的值,以及调用函数和方法等。可以使用console.log()、console.error()等方法来输出调试信息。

6、Base64编码详讲

Base64编码原理分析参考

www.cnblogs.com/luguo3000/p… cloud.tencent.com/developer/a…

Base64 在python中的应用

【遇到的报错问题】

在python中,新建一个.py文件,尝试Base64 在python中的应用时,遇到以下问题:

AttributeError: partially initialized module 'base64' has no attribute 'b64encode' (most likely due to a circular import) image.png

【原因及解决方案】

原因:创建的.py文件名为 base64.py,与 base64 库名重复,导致了该问题。

解决:将文件名改掉即可。

7、MD5

MD5加密是什么?

MD5(Message-Digest Algorithm 5)是一种常用的哈希算法,它将任意长度的消息压缩成一个128位的消息摘要(即哈希值),并且具有不可逆性、唯一性、抗碰撞性等特点。

MD5算法广泛应用于数字签名、数据完整性校验、密码学等领域。

加解密的原理:

MD5算法的原理是将输入的消息分成512位的数据块,每个数据块再分成16个32位的小块,然后通过一系列的位运算和非线性函数,对每个小块进行处理,最终得到一个128位的哈希值。由于MD5算法的设计,即使输入的消息只有微小的变化,也会导致输出的哈希值发生巨大的变化,因此可以用来验证数据的完整性和真实性。

MD5算法的用途:

数据完整性验证:通过比较两个文件的MD5值,可以判断它们是否相同,从而验证文件的完整性。

密码加密:将用户的密码进行MD5加密后,可以保证用户密码的安全性,即使数据库被攻击,攻击者也无法直接获取用户的密码。

数字签名:数字签名是一种保证数据完整性和真实性的技术,MD5算法可以用来生成数字签名。

安全访问控制:MD5算法可以用来生成安全访问控制的密钥,从而保证访问控制的安全性。