酷狗音乐网站前端JS的逆向过程

事件背景

前不久我写了一个按歌手爬取酷狗音乐所有歌曲的爬虫,然后在昨天2019年5月10日使用的时候出现了错误,排查问题后发现是获取歌曲相关信息的那个接口做了修改,导致我原有的爬虫失效。在测试后发现,在原有的基础上需要携带Cookie里面的kg_mid参数才能正常获取,然后我去浏览器里面查看页面刷新出来的请求,发现kg_mid参数是浏览器生成的而不是服务器返回的,所以就开始了逆向前端JS的过程。

逆向过程
  • 首先我查看了所有的请求,然后筛选后只保留了获取JS文件的请求,确定具体是哪个文件最死板的方法是一个个打开然后去查有没有kg_mid这个参数的相关生成方法,但是这里我们根据JS文件的名字推测出应该是我标记的这个kguser_min.js文件,因为Cookie就是相当于用户的身份,所以根据user能推测出是这个文件,事实上也确实是在这个JS文件里面,所以有时候合理的推测是可以大大减小我们的工作量的。
    在这里插入图片描述

  • 将这个JS文件下载下来用编辑工具打开,这里我用的是Notepad打开的
    在这里插入图片描述

  • 但是打开后发现格式并没有对其,代码挨在一起阅读比较困难,所以我们把里面的JS代码剪切出来,找一个JS格式化的工具把它格式化后在粘贴回去。

  • 在线工具网站:JS/HTML格式化

  • 格式化后的效果图
    在这里插入图片描述

  • 接下来是重点了,文件内按CTRL+F查找kg_mid,定位到的位置代码作用是设置KgMid的name属性的值为kg_mid,所以下一步我们要查的是KgMid
    在这里插入图片描述

  • 查到的第一个位置,代码作用大概是读取Cookie里面的kg_mid对应的值,但是读取不是写入,跟我们的目的不符,虽然看这些代码能让我们了解酷狗的运作过程
    在这里插入图片描述

  • 因为这个匹配的位置有点多,所以我就不一一叙述了,直接找到我们发现将kg_mid写入Cookie的代码

  • 定位到位置,判断依据是KgUser.Cookie.write方法,这个Cookie.write方法是用来写入Cookie的。这里的相关代码作用大概是读取Cookie里面的kg_mid对应的值,判断是否有值,如果没有,则将kg_mid写入Cookie
    在这里插入图片描述

  • 而我们的注意力就要放到下面这两句代码上面,我们来分析它们

    var n = KgUser.Guid();
    KgUser.Cookie.write(KgUser.KgMid.name, KgUser.Md5(n), KgUser.KgMid.days * 86400, "/",KgUser.GetDomain());
    
  • Guid()方法很明显是按照一定规则返回一个生成的参数,并传给下面的Md5()方法

  • 然后再看Cookie.write这个方法,这里面重要的两个参数是namevalue,对应的就是KgUser.KgMid.nameKgUser.Md5(n)
    在这里插入图片描述

  • 所以我们实际只需要模拟函数Guid()Md5(),首先找到Guid()的位置
    在这里插入图片描述

  • 利用工具调试这段代码后发现,S4()作用是生成一个四个随机字符拼接成的字符串,这个字符要求属于a-z 0-9的范围
    在这里插入图片描述

  • 然后Python模拟这个方法可以用下述代码代替

    import random
    #随机生成4位随机的字符列表 范围为a-z 0-9
    n=random.sample('abcdefghijklmnopqrstuvwxyz0123456789',4)
    #将列表元素拼接为字符串
    n=''.join(n)
    
  • 然后找到Md5()的位置
    在这里插入图片描述

  • 这个部分代码比较多,所以我本来第一想法是交给JS引擎处理,相当于Python调用JS,然后将返回结果传给爬虫,但是最后发现这一部分代码其实就是MD5加密算法的JS实现,而刚开始我以为是酷狗特有的(在MD5通用加密算法的基础上修改具体参数)

  • 这部分如果用JS引擎处理的话需要用到一个Python的第三方库execjs,相关使用可参看:
    Python如何执行JS代码

  • 但是这里我着重讲的是用另一种方法调用Pythonhashlib这个第三方库,用它来实现Md5加密

  • hashlib库的安装,打开CMD控制台,输入:pip install hashlib来安装

  • 然后完整的生成kg_mid参数的PYTHON代码如下:

    # -*- coding: utf-8 -*-
    """
    @author: CoderYYN
    @Email: coderyyn@qq.com
    

逆向n酷狗js加密方法 MD5 加密参数 Cookie里面的kg_mid
“”"
import hashlib
import random

#创建md5对象
md5= hashlib.md5()
#随机生成4位随机的字符列表 范围为a-z 0-9
n=random.sample('abcdefghijklmnopqrstuvwxyz0123456789',4)
#将列表元素拼接为字符串
n=''.join(n)
#将字符串编码后更新到md5对象里面
md5.update(n.encode())
#调用hexdigest获取加密后的返回值
result=md5.hexdigest()
print(result)
```
  • 运行结果
    在这里插入图片描述
总结

JS的破解其实就是去JS里面找到反爬虫设置的手段,只要读懂了JS的意思,并且能灵活运用Python实现,就能达到以假乱真的地步。
其实对于有基础的同学来说,JS很好读懂,对于没见过的函数和方法,不用迷茫,网上查找相关资料就好了,毕竟这些都是API,不需要背下来。

相关文章

我的个人博客网站是:www.coderyyn.cn
上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子
欢迎大家一起交流学习

转载请注明

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值