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

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

内容简介:网络爬虫的大障碍,就是各种加密。这其中包过登录的验证码以及加密。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解密剖析—爬虫之网易云音乐加密破解

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

    查看所有标签

    猜你喜欢:

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

    JavaScript语言精粹

    JavaScript语言精粹

    道格拉斯•克罗克福德 (Douglas Crockford) / 赵泽欣、鄢学鹍 / 电子工业出版社 / 2012-9-1 / 49.00元

    JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看......一起来看看 《JavaScript语言精粹》 这本书的介绍吧!

    SHA 加密
    SHA 加密

    SHA 加密工具

    RGB HSV 转换
    RGB HSV 转换

    RGB HSV 互转工具

    HEX CMYK 转换工具
    HEX CMYK 转换工具

    HEX CMYK 互转工具