前言

网络爬虫的大障碍,就是各种加密。这其中包过登录的验证码以及加密。js混淆、js参数加密等等。其实以前也就了解过js加密。但是没有深入研究,借着这次实践研究了一下网易云音乐的加密方式。

博主通过网易云音乐评论加密的实例来做个学习过程的分析和分享。

如果有问题或者不懂的地方可以关注我的微信公众号(bigsai),联系我。

技能点

  • 前端:js知识(比较重要)、谷歌浏览器debug、抓包、打断点调试能力(必须)。以及js各种加密函数(了解).
  • python:基础的请求requestsCrypto.Cipher加密解密模块。
  • 其他:postman(模拟请求使用),良好的思维能力和分析能力。(加密算法有些乱),还有一点就是js加密转python的代码实现。

界面概况

静态网页

对于一般的url随着页面的变化而变化的页面,网易云还是有的,你只需要抓取网页进行分析即可。

动态网页

但随着前后端分离的流行,以及数据分离好处明显。越来越多的数据采用ajax渲染。而网易云的评论即使如此。 在前后端分离刚火,那时很多网站对借口并没有太大的防护措施。就使得很多网站轻松获取结果。至今也有很多这样的借口存在,这种网站爬去就是傻瓜式爬取。

然而随着前段技术的发展,接口也变的越来越棘手。就拿网易云的评论来说:它的参数就让人很懵逼。 这一串串数字到底是啥。很多人见到这样的数据就会选择放弃。那么让我为你解开它什么的面纱

页面解析

step1: 找参数

你可以看的到,它的参数有两个,一个是params,一个是encSecKey并且都是经过加密的,我们就要分析它的源头。F12打开source搜索encSckey.

'在查找这个js内部的encSecKey,发现原来在这里,经过断点调试发现这里就是最终参数的结果。

step2:分析js函数

这个js有4w多行,如何能在4w多行js中找到有用的信息,然后理清楚这里的思路呢?

这就需要你的抽象和逆向思维了。来,咱么开始分析。

   var bYc7V = window.asrsea(JSON.stringify(i3x), bkY2x(["流泪", "强"]), bkY2x(VM8E.md), bkY2x(["爱心", "女孩", "惊恐", "大笑"]));e3x.data = k4o.cz4D({params: bYc7V.encText,encSecKey: bYc7V.encSecKey})
复制代码

上面这段代码中就是来源,我们先不管这个JSON.stringify(i3x)这些参数是啥,先搞清楚window.asrsea是什么。在上面不远处你会发现:

这个就是d函数才是所有数据,方法的根源,d、e、f、g四个参数就是我们刚刚说的不要管的参数。 从这个函数就是分析:encText是经过两次b()函数,encSecKey是经过c()函数,执行的一个参数。注意其中i参数来源是a(16).网上看看这些函数。

 function a(a) {var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";for (d = 0; a > d; d += 1)e = Math.random() * b.length,e = Math.floor(e),c += b.charAt(e);return c}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()}function c(a, b, c) {var d, e;return setMaxDigits(131),d = new RSAKeyPair(b,"",c),e = encryptedString(d, a)}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}
复制代码

可以发现a(16)就是一个随机生成的数,所以我们不需要管他。而b目前来看是AES的cbc模式加密。那么这个encText生成的规则我们就很清楚了。两次AES的cbc加密。其中偏移量为0102030405060708固定不变。两次的key不同。而函数c就是三个参数进行RSA加密。整个算法大体流程差不多稍微了解。

到这里先停一下,不要在分析函数了,我们在分析分析数据。

step3:分析参数

再回到var bYc7V = window.asrsea(JSON.stringify(i3x), bkY2x(["流泪", "强"]), bkY2x(VM8E.md), bkY2x(["爱心", "女孩", "惊恐", "大笑"]))这个函数。凭直觉能够感觉得到有些数据一定跟我们的核心参数无关,最多跟时间戳有关。

查找bky2x源头,

再找的话其实没必要,这类函数你找找。可以复制到vscode溯源找到根源。分析,在这里就不繁琐介绍。直接打断点分析吧!看看他是怎么执行的。 其实多次抓你会发现后三个参数是固定不变的(非交互型数据)。 然而最想要的是第一个参数 你心心年年的参数原来长这个样,那么和预想差不多,仅仅第一个参数和我们的参数有关。offset就是页面*20,R_SO_4_+songid就是当前这首歌的id.其实到这个时候,你的i和encSecKey可以一起保存了。因为上面分析说过,这个i是随机生成,而encSecKey也和我们核心参数无关,但是和i相关,所以要记录一组。用作ESA加密的参数和post请求的参数。

现在的你是不是很激动,因为真想即将浮出水面。

step4: 校验

这步骤也是很重要的一环,因为你在它的js中会发现。

网易是否会动手脚呢?下载原始的js进行测试。发现哈哈,结果一致。那么就不需要更改再仔细查看那段加密算法的代码了。

架构图为

step5:转为python代码

需要将AES的cbc模式的代码用Python克隆。达到加密的效果,测试一下。发现结果一致nice

编写爬虫

下面就开始编写爬虫。先用postman测试需要那些参数。

没问题,编写爬虫。根据你喜欢的哥。把id输进去,生成你爱的词云!一首光辉岁月送给大家! 源码github地址求Star。

如果有疑问或者过期可以关注我公众号联系我。

欢迎关注我的个人公众号:bigsai

转载于:https://juejin.im/post/5d0cb4a4518825328779c527

JS 解密剖析—爬虫之网易云音乐加密破解相关推荐

  1. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  2. Python爬虫之网易云音乐下载

    Python爬虫之网易云音乐下载 目标 用Python根据网易云音乐的ID,下载音乐,保存到本地MP3格式 可以下载歌曲的范围:所有能够听的歌曲 配置基础 Python 3.5 模块 pycrypto ...

  3. JS不跨域操控网易云音乐外链播放器

    JS不跨域操控网易云音乐外链播放器 今天写个人网站,用到了背景音乐. 一开始想使用H5的audio标签,蛮成功的,但是传到服务器上后加载缓慢(腾讯云服务器学生优惠版,最低的配置),体验很差. 使用外链 ...

  4. python爬虫爬取网易云音乐下载_Python爬虫实践-网易云音乐!没有版权又如何!照样爬取!...

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  5. python作业记录--爬虫,网易云音乐热评+词云生成

    import requests import json import re import random from Crypto.Cipher import AES from base64 import ...

  6. js逆向之爬取网易云音乐和歌曲评论

    前面我写的文章当中也有网易云音乐的爬取,只不过是借助了外链接口,本篇文章将介绍网易本身的接口进行爬取 ** 1 . 我们要获取的内容 ** 某一个歌单里面的所有歌曲 ** 2. 我们先分析一下歌曲的真 ...

  7. Python爬虫获取网易云音乐 我的喜欢歌单 歌曲数据

    需求:突然奇想,获取网易云音乐 我的喜欢 歌单音乐数据 获取歌曲详情 如标题,歌手,时长,专辑等等 思路: 爬虫请求url 获取数据,找到对的链接请求就成功了一半,查看返回数据,然后保存数据(歌曲+歌 ...

  8. Vue.js全家桶高还原网易云音乐(Windows PC版)

    项目地址 由于网易云的api限制,部分功能可能会失效,如有需要可以clone项目下来在本地运行,如果api炸了,麻烦在评论中告知一下我 因为做的是PC端 所以请在电脑端访问 源码地址 项目预览(评论和 ...

  9. 如何利用python爬虫获取网易云音乐某个歌手简介_Python 爬虫获取网易云音乐歌手信息...

    今天就先带大家爬取网易云音乐下的歌手信息并把数据保存下来. 爬取结果 环境 语言:Python 工具:Pycharm 导包 BeautifulSoup:用来解析源码,提取需要的元素. selenium ...

最新文章

  1. linux mysql初始化
  2. pycharm如何设置快捷键
  3. oracle循环语句loop,oracle循环语句loop
  4. oracle rac em cluster name,ORACLE 11G RAC重建EM问题
  5. 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
  6. 日本第四次产业革命瞄准物联网
  7. 前嗅ForeSpider教程:配置关键词
  8. MySQL心得1--数据库的基本概念
  9. 生产者消费者模式-Java实现
  10. mysql 年龄计算(根据生日字段)
  11. html rgb 颜色转换,将RGBA颜色转换为HTML颜色代码
  12. TensorFlow cifar 卷积网络
  13. : error: control reaches end of non-void function [-Werror=return-type]
  14. adobe framemaker 资料
  15. 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
  16. 华为5G的秘密原来掌握在一个土耳其人的手中?!
  17. matlab中的聚类算法,kmeans聚类算法matlab matlab 聚类算法silhouette
  18. iOS开发之资料收集
  19. 初等行变换、初等列变换
  20. 华为又一黑科技:AR高精地图服务即将上线

热门文章

  1. css3太极图效果+自动旋转
  2. 八年级上册计算机第三课教案,人教版八年级信息技术上册教案
  3. 互联网日报 | 3月4日 星期四 | 五家社区团购企业被行政处罚;中兴通讯进军智能汽车领域;网易有道成立“成人教育事业部”...
  4. 极简自适应网址导航搜索页源码
  5. 3d点云与cad模型
  6. 微信小程序开发(一)基础概念汇总
  7. [转]VS2008中开发智能设备程序的一些总结收藏1
  8. JAVA EE综合项目(二手书籍出售消息)
  9. 黑客命令大全 (不断更新中)
  10. QT实现两界面类似QQ聊天