js解密剖析—爬虫之网易云音乐加密破解

栏目: JavaScript · 发布时间: 4年前

内容简介:网络爬虫的大障碍,就是各种加密。这其中包过登录的验证码以及加密。js混淆、js参数加密等等。其实以前也就了解过js加密。但是没有深入研究,借着这次实践研究了一下网易云音乐的加密方式。博主通过网易云音乐评论加密的实例来做个学习过程的分析和分享。如果有问题或者不懂的地方可以关注我的
js解密剖析—爬虫之网易云音乐加密破解

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

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

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

技能点

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

界面概况

静态网页

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

js解密剖析—爬虫之网易云音乐加密破解

动态网页

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

js解密剖析—爬虫之网易云音乐加密破解

然而随着前段技术的发展,接口也变的越来越棘手。就拿网易云的评论来说:它的参数就让人很懵逼。

js解密剖析—爬虫之网易云音乐加密破解
这一串串数字到底是啥。很多人见到这样的数据就会选择放弃。那么 让我为你解开它什么的面纱

页面解析

step1: 找参数

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

js解密剖析—爬虫之网易云音乐加密破解
'在查找这个js内部的 encSecKey

,发现原来在这里,经过断点调试发现这里就是最终参数的结果。

js解密剖析—爬虫之网易云音乐加密破解

step2:分析js函数

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

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 是什么。在上面不远处你会发现:

js解密剖析—爬虫之网易云音乐加密破解
这个就是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源头,

js解密剖析—爬虫之网易云音乐加密破解

再找的话其实没必要,这类函数你找找。可以复制到vscode溯源找到根源。分析,在这里就不繁琐介绍。直接打断点分析吧!看看他是怎么执行的。

js解密剖析—爬虫之网易云音乐加密破解
其实多次抓你会发现后三个参数是 固定不变

的(非交互型数据)。 然而最想要的是第一个参数

js解密剖析—爬虫之网易云音乐加密破解
你心心年年的参数原来长这个样,那么和预想差不多,仅仅第一个参数和我们的参数有关。offset就是 页面*20 ,R_SO_4_+songid就是当前这首歌的id.其实到这个时候,你的 i和encSecKey 可以一起保存了。因为上面分析说过,这个 i 是随机生成,而 encSecKey 也和我们核心参数无关,但是和 i

相关,所以要记录一组。用作ESA加密的参数和post请求的参数。

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

step4: 校验

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

js解密剖析—爬虫之网易云音乐加密破解

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

架构图为

js解密剖析—爬虫之网易云音乐加密破解

step5:转为 python 代码

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

js解密剖析—爬虫之网易云音乐加密破解

编写爬虫

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

js解密剖析—爬虫之网易云音乐加密破解

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

js解密剖析—爬虫之网易云音乐加密破解
源码github地址

求Star。

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

  • 欢迎关注我的个人公众号:bigsai
  • js解密剖析—爬虫之网易云音乐加密破解

    以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    Handbook of Data Structures and Applications

    Handbook of Data Structures and Applications

    Dinesh P. Mehta / Chapman and Hall/CRC / 2004-10-28 / USD 135.95

    In the late sixties, Donald Knuth, winner of the 1974Turing Award, published his landmark book The Art of Computer Programming: Fundamental Algorithms. This book brought to- gether a body of kno......一起来看看 《Handbook of Data Structures and Applications》 这本书的介绍吧!

    CSS 压缩/解压工具
    CSS 压缩/解压工具

    在线压缩/解压 CSS 代码

    SHA 加密
    SHA 加密

    SHA 加密工具

    RGB CMYK 转换工具
    RGB CMYK 转换工具

    RGB CMYK 互转工具