环境搭建

安装node.js

下载网站:Download | Node.jshttps://nodejs.org/en/download/

参考网站:Node.js安装与环境配置_各自安好、的博客-CSDN博客_nodejs安装及环境配置https://blog.csdn.net/qq_41465646/article/details/107656044

安装js代码调试工具

使用VScode可以调试JS代码:
VScode安装:VSCode详细安装教程 - 是大壳子啊 - 博客园 (cnblogs.com)https://www.cnblogs.com/csji/p/13558221.html
VScode执行JS代码的环境配置:
在VSCode中直接运行js代码 - 简书 (jianshu.com)https://www.jianshu.com/p/3c47770c118b
tips:VScode不会自动默认保存执行修改之后的代码,如果需要自动保存的话:
settings‐‐> 把off修改为onFocusChange。

安装 PyExecJs模块

安装pyexecjs模块可以在python中运行调试好的js的代码。

JS中常见的算法

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

MD5算法

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

JSMD5算法:

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

MD5加密网站:

md5在线解密破解,md5解密加密 (cmd5.com)https://www.cmd5.com/

DES/AES算法

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

AES和DES的区别

1.加密后密文长度不同

(1)DES加密后密文长度是8的整数倍;

(2)AES加密后密文的长度是16的整数倍;

2.安全度不同

(1)一般情况下DES足够安全;

(2)如果要求更高可以使用AES;

3.DES和AES修改只需要修改:CryptoJS.DES =>CryptoJS.AES

encrypt() 加密
decrypt() 解密

一般情况下,在开发者工具中扣取JS代码时,如果没有password之类的关键字,可以直接search出encrypt和decrypt。

RSA算法

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

非对称加密需要两个密钥:

  • 公开密钥(publickey:公钥)
  • 私有密钥(privatekey:私钥)
  • 公钥和私钥是一对
setPublicKey() 设置公钥(可以搜索该关键字)

base64加密算法

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

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

进行JS调试的流程

1.调试工具(黄条) 灰色箭头是执行当前的下一条语句 ,蓝色三角形是跳到下一个断点处。
2.
(1)利用某个加密字段搜索:开发者工具右上角三个点‐‐>选择search‐‐>搜索;
(2)点击进搜索结果里面‐‐>点击左下角的花括号 进行格式化处理 ;
(3)在当前文件里面用鼠标及进行聚焦‐‐>ctrl+f 再次搜索加密字段 ;
(4)找到可疑的加密字段打上断点进行调试;借助花括号下面的下划线找到函数开始和结束的位置。
3.
(1)在加密字段中有Initiator,可以进入里面查看源码,注意最下面的是最早执行的,所以要从最上面开始逐一进入找到加密字段在其中是否被加密;
(2)其余步骤与2中一致;

4.

(1)如果碰到加密算法不是很长,可以复制下所有的代码行;

(2)如果加密代码比较长 ,如果没有JS的基础;最好使用python去重构一下加密过程(需要得到

重构时所必须的一些参数)。
(3)注意关键字:setPublicKey ‐‐‐> RSA;encrypt decrypt ‐‐> DES/AES

                                                        
Python重构AES加密算法
from Crypto.Cipher import AES
from cryptography.hazmat.primitives.padding import PKCS7
from cryptography.hazmat.primitives.ciphers import algorithmsdef pkcs7_unpad(content):"""解密:Pkcs7的填充方式"""if not isinstance(content, bytes):content = content.encode()pad = PKCS7(algorithms.AES.block_size).unpadder()pad_content = pad.update(content) + pad.finalize()return pad_contentdef aes_encrypt(res, key, iv=''):# 转码  utf-8  字节 16进制new_key = bytes(key, encoding='utf-8')new_iv = bytes(iv, encoding='utf-8')# 创建一个AES算法 秘钥  模式 偏移值cipher = AES.new(new_key, AES.MODE_CBC, new_iv)# 解密data = cipher.decrypt(bytes.fromhex(res))# Pkcs7的填充方式return pkcs7_unpad(data)

Python重构DES加密算法

# pip install pyDes -i https://pypi.tuna.tsinghua.edu.cn/simple
from pyDes import des, CBC, PAD_PKCS5, ECB
import base64def des_encrypt(password, key, iv='', model='CBC'):'''DES加密:param password: 密码明文:param key: 密钥:param iv: 秘钥偏移量:param model: 加密模式 CBC ECB:return: 加密之后的数据'''# 创建des对象if model == 'CBC':# PAD_PKCS5 为填充方式des_obj = des(key[:8].encode('utf-8'), CBC, iv.encode('utf-8'), padmode=PAD_PKCS5)else:# ECB加密模式 不需要iv秘钥偏移量des_obj = des(key[:8].encode('utf-8'), ECB, padmode=PAD_PKCS5)# 通过des对象处理数据encrypt_content = des_obj.encrypt(password.encode('utf-8'))result = base64.b64encode(encrypt_content).decode()return result

Python重构RAS加密算法

# pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as cry_pksc1_v1_5
import base64def encrypto(pk, password):"""使用公钥对密码进行加密处理:param pk: 公钥:param password: 明文密码:return: RAS加密之后的密码"""public_key = "-----BEGIN PUBLIC KEY-----\n{}\n-----END PUBLIC KEY-----".format(pk)# 导入公钥 返回一个RSA秘钥对象rsakey = RSA.importKey(public_key)# 对需要加密的内容进行PKCS#1 v1.5加密cipher = cry_pksc1_v1_5.new(rsakey)# 使用公钥加密密码 密码必须是二进制miwen_encode = cipher.encrypt(password.encode())# 再使用Base64对类似字节的对象进行编码cipher_text = base64.b64encode(miwen_encode).decode()return cipher_text

5.安装JS外部资源库:

(1)cd进项目目录

(2)做国内资源映射:npm install ‐g cnpm ‐‐ registry=https://registry.npm.taobao.org

(3)安装:cnpm install node‐jsencrypt

6.过掉无限debug:

        第一种:设置条件断点:false
        第二种:选择Never pause here
        第三种:让页面所有断点都失效(不推荐)

7.在用python执行js代码的时候 碰着IndexError: list index out of range的解决方法:

在python.exe同级目录下面找到Lib:里面有subprocess.py
找到init里面的 encoding=
将那一行替换为pass_fds=(), *, encoding='utf‐8', errors=None, text=None):
8.在使用DES做加密处理的时候 要注意模式和iv之间的关系(了解即可)

        如果是用的CBC加密模式 需要iv
        如果是用的EBC加密模式 不需要iv
        至于是用的哪种模式 要去js代码中看

Python爬虫编程11——JS反爬相关推荐

  1. Python爬虫编程12——字体反爬

    什么是字体反爬 就是网页的制作者,他在发布他网页数据的时候.将其中一部分的字体变成乱码.即使你把网页的数据爬取下来,你也获取不到真实数据的样貌.这样就达到了一个反爬虫的目的. 如何解决字体反爬 1.下 ...

  2. Python爬虫六:字体反爬处理(猫眼+汽车之家)-2018.10

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 ---全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Djang ...

  3. 一次Python爬虫实战,解决反爬问题!

    人生苦短,快学Python! 随着互联网的发展,Python的崛起,很多网站经常被外面的爬虫程序骚扰,有什么方法可以阻止爬虫吗? 阻止爬虫也就称之为反爬虫,反爬虫涉及到的技术比较综合,说简单也简单,说 ...

  4. Python爬虫:常见的反爬

    常见的反爬 爬虫流程 确定爬虫对象(爬哪个网页的数据) 找接口 有接口:直接对接口发送请求 成功(直接json解析) 失败就进入下一步 没有接口,直接进入下一步 用requests直接对网页地址发送请 ...

  5. Python爬虫——教你js逆向爬取网易云评论

    大家好!我是霖hero 正所谓条条道路通罗马,上次我们使用了Selenium自动化工具来爬取网易云的音乐评论,Selenium自动化工具可以驱动浏览器执行特定的动作,获得浏览器当前呈现的页面的源代码, ...

  6. Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二

    文章目录 说说这个网站 今天要爬去的网页 反爬措施展示 爬取关键信息 找关键因素 处理汽车参数 关键字破解 入库操作 小扩展:格式化JS 思路汇总 关注公众账号 说说这个网站 汽车之家,反爬神一般的存 ...

  7. Python爬虫学习第九天---反爬与反反爬

    反爬与反反爬 一.常见反爬手段和解决思路 1.服务器反爬原因 1.爬虫占总PV比例较高,这样浪费钱. 2.三月份爬虫:每年的三月份我们会迎接一次爬虫高峰期,有大量的硕士在写论文的时候会选择爬取一些往网 ...

  8. Python爬虫:猫眼电影反爬—动态字体处理(2020)

    2020年5月25日更新,在爬了几百条后发现,有少部分数据会出错,出错概率很小.目前推测其原因是因为欧氏距离在对于(-1,0)和(0,1)这种数据计算结果差异不大的原因.有精度需求的建议改用别的距离计 ...

  9. Python爬虫编程14——移动端爬取

    目录 移动端数据简介 adb的简介与使用 adb的安装与使用 adb有什么作用? adb如何使用? fiddler抓包工具的使用 常见App抓包软件对比 fiddler抓包工具 什么是fiddler? ...

最新文章

  1. 斯坦福大学UFLDL教程列表
  2. C#——事件(Event)DEMO[闻鸡起舞]
  3. JDBC入门案例及相关API概述
  4. django+xadmin在线教育平台(十二)
  5. vi 编辑器命令 (share)
  6. 9.List的子类特点
  7. sqlite 中出现的database table is locked 解决办法
  8. 如何摆脱初学者的不自信,成为一名专业编程人士?
  9. matlab仿真不确定时滞系统容错控制,基于自适应方法的非线性系统容错控制
  10. ShuffleNet_v1论文阅读
  11. ADS1256驱动程序
  12. angr入门之CLE
  13. 【美食小吃】成都建设路小吃一条街美食推荐
  14. u盘中毒(U盘所有的文件都变成快捷方式)的解决方法
  15. react-native实现微信分享和微信支付(安卓端)
  16. 七个顶级心理寓言(看了受用一生)(转)
  17. 【深一点学习】BP网络,结合数学推导的代码实现
  18. 【边缘检测】Python实现SUSAN算法及使用非极大值抑制进行改进(含免费可用源代码)
  19. 关于Knuth 的搞笑8卦
  20. 华为鸿蒙和海思,华为鸿蒙+海思,值得你期待!

热门文章

  1. rtl8139网卡驱动源码解析
  2. 2012年4月23日
  3. LFS 好辛苦的工作,据说要坚持至少12个小时,而如果不用“风无痕9588”大侠的脚本代码而手工输入的话,据说要200个小时!
  4. Linux下ftp下载方法--使用lftp命令
  5. iOS开发系列--打造自己的“美图秀秀”
  6. 计算机报名为什么说我没有在系统用户中注册,硕士研究生网上报名常见问题汇总...
  7. Python全栈(十)Django框架之10.ORM模型对象和QuerySet方法
  8. 基于JavaScript实现网红太空人表盘
  9. 干掉 强硬的 css !important
  10. c# ppt转pdf