我去!爬虫遇到JS逆向AES加密反爬,哭了
今天准备爬取网页时,遇到『JS逆向AES加密』反爬。比如这样的:

在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来。
既然遇到了这个情况,那么辰哥就教大家如何去解决这类反爬(JS逆向AES加密)
01 网页分析
在开始分析JS逆向AES加密之前,先简单介绍一下要爬取的内容:下载某抑云音乐。其中获取歌曲的真实播放地址m4a的过程涉及到JS逆向AES加密。
点击播放,在浏览器中查看抓取到的数据包,如下图所示:

查看响应数据:

可以看到在url字段中存储着真实播放地址,放到浏览器中打开:

可以看到正常播放,说明歌曲的真实播放地址获取正确。
唯一变的就是data,data里面包含两个参数(params和encSecKey),根据辰哥的经验,这八九不离十是经过JS加密而来,并且肯定跟歌曲的地址有关(浏览器页面地址,非真实播放地址)
02 JS逆向过程
既然知道这两个参数是js逆向加密而来,那直接搜索这两个参数存在于哪个js文件中。

搜索到了5个js,那么就查看这两个参数都同时存在于哪个js中,刚好在第一个js中就看到了。

可以看到params对应的是encText,encSecKey对应的是encSecKey。encText和encSecKey来自于bUE3x,而bUE3x来自于window.asrsea。
var bUE3x = window.asrsea(JSON.stringify(i3x), bsf6Z(["流泪", "强"]), bsf6Z(WS0x.md), bsf6Z(["爱心", "女孩", "惊恐",并以某抑云"大笑"]));
继续搜索window.asrsea

可以看到window.asrsea来源于d,d是一个函数,该函数中返回的h赋值给window.asrsea。这里我们给函数d打断点。

点击刷新网页,重新播放

可以看到函数d需要传入四个参数,通过分析多首歌曲,分析参数e、f、g没变化,唯一变是参数d中的id。
这个id刚好是歌曲的id
函数d接收到四个参数后,创建一个字典h(用于存放变量),接着调用函数a,我们继续给函数a打断点。

刷新网页

函数a的作用就是生成一个16为的随机数,下面是函数a运行后最终的参数值,其中c是返回值,因此我们可以认为c是一个固定的值(反正也是随机生成的)
a: 16
b: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
c: "z2Ggtvz5ZIsiKO5F"
函数a解析完了,继续分析函数d。
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
接着经过两次AES加密(执行了两次函数b)
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
需要传入参数a和b,实际上就是函数d中的参数d和g,参数g是固定的,参数d我们刚刚已经分析过了。
一开始分析的两个js逆向参数(params和encSecKey)的parmas我们已经清楚了加密过程(encText就是params)。
接着函数d继续看
h.encSecKey = c(i, e, f),
encSecKey是通过函数c得到,函数c的代码如下:
function c(a, b, c) {
var d, e;
return setMaxDigits(131), //131 => n的十六进制位数/2+3
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
函数c:通过RSA加密生成encSecKey值。
OK,JS逆向加密分析的过程就完成了。
03 小结
辰哥在本文中主要讲解了『JS逆向AES加密』反爬,并以某抑云获取歌曲真实播放地址为例去实战演示分析。
我去!爬虫遇到JS逆向AES加密反爬,哭了的更多相关文章
- python爬虫之JS逆向
Python爬虫之JS逆向案例 由于在爬取数据时,遇到请求头限制属性为动态生成,现将解决方式整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs调用js文件(可见 ...
- python爬虫之JS逆向某易云音乐
Python爬虫之JS逆向采集某易云音乐网站 在获取音乐的详情信息时,遇到请求参数全为加密的情况,现解解决方案整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs ...
- python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题
python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述 通过编写程序'模拟浏览器'上网,然后通 ...
- Python反爬:利用js逆向和woff文件爬取猫眼电影评分信息
首先:看看运行结果效果如何! 1. 实现思路 小编基本实现思路如下: 利用js逆向模拟请求得到电影评分的页面(就是猫眼电影的评分信息并不是我们上述看到的那个页面上,应该它的实现是在一个页面上插入另外一 ...
- 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究
之前的章节也略有提及反爬策略,本节,我们就来系统的对反爬.反反爬的种种,做一个了结. 从防盗链说起: 自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样, ...
- Python爬虫入门教程 63-100 Python字体反爬之一,没办法,这个必须写,反爬第3篇
背景交代 在反爬圈子的一个大类,涉及的网站其实蛮多的,目前比较常被爬虫coder欺负的网站,猫眼影视,汽车之家,大众点评,58同城,天眼查......还是蛮多的,技术高手千千万,总有五花八门的反爬技术 ...
- python 爬虫 汽车之家车辆参数反爬
水平有限,仅供参考. 如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换. 观察 Sources 发现数据就在当前页面. 发现若干条进行CSS替换的js 继续深入此JS 知道了数据 ...
- JS实现AES加密并与PHP互通的方法分析
<script type="text/javascript" src="/CryptoJS/aes.js"></script><s ...
- 煎蛋网爬虫之JS逆向解析img路径
图片使用js onload事件加载 <p><img src="//img.jandan.net/img/blank.gif" onload="janda ...
随机推荐
- P5960 【模板】差分约束算法
题目描述 给出一组包含 $m$ 个不等式,有 $n$ 个未知数的形如: 的不等式组,求任意一组满足这个不等式组的解. 输入格式 第一行为两个正整数 $n,m$,代表未知数的数量和不等式的数量. 接下来 ...
- 最新版robotframework4.0.3版本安装
python最新版本已经到了3.9了.对应的最新版本也更新到robotframework4.0.3. robotframework支持的自动化测试的类型以及需要的库: 1.ui自动化测试:Seleni ...
- 再看 Java 中的单例
此前面试遇到了单例问题,本以为已经背的滚瓜烂熟,没想到被问单例如何避免被反射和序列化破坏,虽然后来还是等到了通知,但还是复习一下单例的实现方式,并学习防止反射和序列化破坏的手段. 基本实现方式 其他相 ...
- 【NX二次开发】判断部件是否已修改(判断部件是否需要保存)UF_PART_is_modified();
判断部件是否已修改(判断部件是否需要保存)UF_PART_is_modified(); 注意:函数需要输入原型,不要输入事例.事例转原型:UF_ASSEM_ask_prototype_of_occ() ...
- 学习响应式编程 Reactor (3) - reactor 基础
Reactor Reactor 项目的主要 artifact 是 reactor-core,这是一个基于 Java 8 的实现了响应式流规范的响应式库. Reactor 提供了实现 Publisher ...
- MySQL:数据库优化,看这篇就够了
数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览 ...
- ThreadPoolExecutor参数详解
ThreadPoolExecutor全部参数的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ke ...
- NTLM协议与Pass the Hash的爱情
0x01.前言 NTLM使用在Windows NT和Windows 2000 Server或者之后的工作组环境中(Kerberos用在域模式下).在AD域环境中,如果需要认证Windows NT系统, ...
- 浅读tomcat架构设计之tomcat容器Container(3)
浅读tomcat架构设计和tomcat启动过程(1) https://www.cnblogs.com/piaomiaohongchen/p/14977272.html 浅读tomcat架构设计之tom ...
- Mysql:报错message from server: "Too many connections"(连接太多)
报错信息 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source re ...