十七:爬虫-JS逆向(上)
1、什么是JS
、JS
反爬是什么?JS
逆向是什么?
JS
:JS
全称JavaScript
是互联网上最流行的脚本语言,这门语言可用于HTML
和 web
,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript
是一种轻量级的编程语言。JavaScript
是可插入 HTML
页面的编程代码。JavaScript
插入 HTML
页面后,可由所有的现代浏览器执行。
JS
反爬:JS
反爬是指爬虫在获取网页数据时,遇到了通过JavaScript
代码实现的反爬措施。JS
反爬技术的实现方式包括动态渲染、异步加载、验证码、IP
限制等多种方式。这些技术可以有效地防止爬虫的抓取,保护网站的数据安全。
JS
逆向: JS
逆向是指通过分析和破解JavaScript
代码,获取反爬措施的规则和实现方式,从而绕过反爬措施,实现爬虫的抓取。JS
逆向需要具备一定的JavaScript
编程能力和代码分析能力,对于爬虫开发者来说是一项高级的技能。
注意: 进行JS
逆向可能会涉及到法律风险和道德问题,因此在进行爬虫开发时,应该遵守相关法规和道德规范,避免侵犯他人的合法权益
2、JS
逆向的大致流程
-
分析目标网站的反爬措施:使用浏览器开发者工具或网络抓包工具分析目标网站的
JavaScript
代码和网络请求数据,了解反爬措施的实现方式和规则。常见的反爬措施包括动态渲染、异步加载、验证码、IP
限制等。 -
理解和分析
JavaScript
代码:使用代码编辑器或开发者工具等工具,分析网站的JavaScript
代码,了解其运行原理、代码结构和实现方式。这可以帮助你找到反爬措施的规则和实现方式,从而更好地绕过它们。 -
绕过反爬措施:根据分析结果,采用相应的技术和方法绕过反爬措施。比如,对于动态渲染的网页,可以使用无头浏览器(如
Selenium
)模拟浏览器的操作,从而获取渲染后的网页数据;对于异步加载的网页,可以使用JavaScript
库(如Puppeteer
)模拟浏览器的异步请求,从而获取异步加载后的数据;对于验证码的网站,可以使用打码平台或自动识别技术(如OCR
)来识别验证码。 -
调试和优化:进行调试和优化,确保爬虫程序能够稳定地运行,并且能够在反爬措施更新后及时进行适配。
? 注意:
JS
逆向需要具备一定的JavaScript
编程能力和代码分析能力,不同的网站可能有不同的反爬措施和实现方式,因此需要根据具体情况采用不同的技术和方法进行绕过。同时,在进行JS
逆向时,需要遵守相关法规和道德规范,避免侵犯他人的合法权益。
3、逆向的环境搭建
3.1、安装node.js
下载网站:https://nodejs.org/en/download/
参考网站:https://blog.csdn.net/qq_41465646/article/details/107656044
3.2、安装js
代码调试工具(vscode
)
下载网站: https://code.visualstudio.com/download
参数网站:https://www.cnblogs.com/csji/p/13558221.html
运行js
代码插件: https://www.jianshu.com/p/3c47770c118b
3.3、安装PyExecJs
模块
PyExecJS
用于实现在Python中运行JavaScript
代码的功能,移植自Ruby
的ExecJS
库。
安装命令:pip install PyExecJs -i
https://pypi.douban.com/simple
4、JS
常见加密算法
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
参考网址: https://cdn.bootcdn.net/ajax/libs/blueimp-md5/1.0.1/js/md5.js
md5
破解网址: https://cmd5.com/ 或者 https://md5.cn/
补充: 为了提高密码的安全性 一般会在密码后面加上一个随机数或者是时间戳 这个随机数或者是时间戳 我们一般称之为盐
4.3、DES
/AES
算法
DES
对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。
和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()
函数,解密用的是decrypt()
函数。
AES
/DES
加密解密网址: https://www.sojson.com/encrypt.html
4.3.1 AES
与DES
的区别
- 加密后密文长度不同
DES
加密后密文长度是8的整数倍AES
加密后密文的长度是16的整数倍
- 安全度不同
- 一般情况下
DES
足够安全 - 如果要求高可以使用
AES
- 一般情况下
DES
和AES
切换只需要修改CryptoJS.DES =>CryptoJS.AES
4.4、RSA
算法
RSA
加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA
被广泛使用。有两把对应密钥,公钥和私钥。用公钥加密只能用私钥解开,用私钥加密只能用公钥解密。
RSA
加密解密网址: https://oktools.net/rsa
-
公开密钥(
publickey
:公钥) -
私有密钥(
privatekey
:私钥) -
公钥和私钥是一对
? 注意: 在
JS
逆向中,并不是所有的都存在加密算法,有时候不需要去分析出是什么加密算法直接扣出代码即可
5、chrome
常见调试技巧
- 断点调试:在需要调试的
JavaScript
代码行上设置断点,当代码执行到该执行时,会暂停执行,可以查看当前变量和调用栈等信息。可以通过点击行号来设置断点。 - 控制台调试:在控制台面板中可以执行
JavaScript
代码,可以查看和修改数量的值,以及调用函数和方法等。可以使用console.log()
、console.error()
等方法来输出调试信息。
6、Base64
编码详讲
1.Base64
编码由来
为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。
2.Base64
编码原理分析参考
https://www.cnblogs.com/luguo3000/p/3940197.html
3.Base64
在python中的应用
import base64
"""将字符串转换成base64编码"""
string = "https://www.baidu.com"
temp_b = string.encode("utf-8") # 将字符串转换为二进制
print(temp_b)
content_b = base64.b64encode(temp_b)
print(content_b)
str_result = content_b.decode('utf-8')
print(str_result)
"""将Base64编码还原为字符串"""
str_result = "aHR0cHM6Ly93d3cuYmFpZHUuY29t"
my_str = base64.b64decode(str_result).decode("utf-8")
print(my_str)
"""处理base64编码的图片"""
import base64
src = "data:image/jpg;base64,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"
# 切割字符串,获取后面图片数据部分
image_data = src.split(',')[1]
# 解码-->二进制数据
image = base64.b64decode(image_data)
print(image)
with open('验证码.jpg','wb') as f:
f.write(image)
7、MD5
详讲
1.MD5
加密是什么?
MD5
是一种常用的消息摘要算法,它可以将任意长度的消息压缩成一个128位的哈希值。MD5
算法广泛应用于数字签名、数据完整性校验、密码学等领域。
MD5
(Message-Digest Algorithm 5)是一种常用的哈希算法,它将任意长度的消息压缩成一个128位的消息摘要(即哈希值),并且具有不可逆性、唯一性、抗碰撞性等特点。
2.MD5
加密解密的原理?
MD5
算法的原理是将输入的消息分成512位的数据块,每个数据块再分成16个32位的小块,然后通过一系列的位运算和非线性函数,对每个小块进行处理,最终得到一个128位的哈希值。由于MD5
算法的设计,即使输入的消息只有微小的变化,也会导致输出的哈希值发生巨大的变化,因此可以用来验证数据的完整性和真实性。
3.MD5
算法的用途
(1)数据完整性验证:通过比较两个文件的MD5
值,可以判断它们是否相同,从而验证文件的完整性
(2)密码加密:将用户的密码进行MD5
加密后,可以保证用户密码的安全性,即使数据库被攻击,攻击者也无法直接获取用户的密码
(3)数字签名:数字签名是一种保证数据完整性和真实性的技术,MD5
算法可以用来生成数字签名
(4)安全访问控制:MD5
算法可以用来生成安全访问控制的密钥,从而保证访问控制的安全性
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!