今天准备爬取网页时,遇到『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

https://music.163.com/#/song?id=447926067

函数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加密反爬,哭了的更多相关文章

  1. python爬虫之JS逆向

    Python爬虫之JS逆向案例 由于在爬取数据时,遇到请求头限制属性为动态生成,现将解决方式整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs调用js文件(可见 ...

  2. python爬虫之JS逆向某易云音乐

    Python爬虫之JS逆向采集某易云音乐网站 在获取音乐的详情信息时,遇到请求参数全为加密的情况,现解解决方案整理如下: JS逆向有两种思路: 一种是整理出js文件在Python中直接使用execjs ...

  3. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  4. Python反爬:利用js逆向和woff文件爬取猫眼电影评分信息

    首先:看看运行结果效果如何! 1. 实现思路 小编基本实现思路如下: 利用js逆向模拟请求得到电影评分的页面(就是猫眼电影的评分信息并不是我们上述看到的那个页面上,应该它的实现是在一个页面上插入另外一 ...

  5. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究

    之前的章节也略有提及反爬策略,本节,我们就来系统的对反爬.反反爬的种种,做一个了结. 从防盗链说起: 自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样, ...

  6. Python爬虫入门教程 63-100 Python字体反爬之一,没办法,这个必须写,反爬第3篇

    背景交代 在反爬圈子的一个大类,涉及的网站其实蛮多的,目前比较常被爬虫coder欺负的网站,猫眼影视,汽车之家,大众点评,58同城,天眼查......还是蛮多的,技术高手千千万,总有五花八门的反爬技术 ...

  7. python 爬虫 汽车之家车辆参数反爬

    水平有限,仅供参考. 如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换. 观察 Sources 发现数据就在当前页面. 发现若干条进行CSS替换的js 继续深入此JS 知道了数据 ...

  8. JS实现AES加密并与PHP互通的方法分析

    <script type="text/javascript" src="/CryptoJS/aes.js"></script><s ...

  9. 煎蛋网爬虫之JS逆向解析img路径

    图片使用js onload事件加载 <p><img src="//img.jandan.net/img/blank.gif" onload="janda ...

随机推荐

  1. spring整合mybatis,ioc容器及声明式事务配置

    步骤: 1.创建jdbc.properties文件,用来管理存放连接数据库的相关信息 jdbc.properties:jdbc.user=root jdbc.password=123456 jdbc. ...

  2. 【C++】Vector判断元素是否存在,去重,求交集,求并集

    1 #include <iostream> 2 #include <vector> 3 #include <algorithm> //sort函数.交并补函数 4 ...

  3. 合宙Luat | Cat.1 Socket数据收不到?学会两招不掉线

    1 服务器收不到Socket数据的原因 Socket是大家使用Cat.1模块常用的功能之一,但Cat.1模块不是直接跟服务器连接,而是通过NAT(即网络地址转换)与服务器连接. 一个会话建立后会在NA ...

  4. SCP,SSH应用

  5. npm ERR! Unexpected end of JSON input while parsing near '...'解决方法

    npm install时出现npm err! Unexpected end of JSON input while parsing near'...'错误 输入  npm cache clean -- ...

  6. vue项目中一些标签直接放在<template>下会报错Failed to compile with 1 errors

    原因是a标签button以及element-ui的组件不能直接放在<template>下,需要先有一个div,其他标签要放在div下

  7. (1)Canal入门

    1.前言 在我们系统开发过程中,根据业务场景很多数据库数据并不会直接给用户访问的,需要同步保存到ElasticSearch.Redis等存储应用当中(例如最常见的是搜索页面的ElasticSearch ...

  8. Visual Studio Code 和Visual Studio插件收集(持续更新)

    Visual Studio Code 插件收集 Chinese (Simplified) Language Pack 默认刚安装的VSC是原味英文的,如果你用不习惯,非常简单,官方出品的简体中文语言包 ...

  9. WebGPU性能测试分析

    大家好,本文对WebGPU进行性能测试和分析,目的是为了对比WebGL和WebGPU在"渲染"和"计算"两个维度的性能差异,具体表现为CPU性能和FPS性能两个 ...

  10. POJ 2002 二分 计算几何

    根据正方形对角的两顶点求另外两个顶点公式: x2 = (x1+x3-y3+y1)/2; y2 = (x3-x1+y1+y3)/2; x4= (x1+x3+y3-y1)/2; y4 = (-x3+x1+ ...