美文网首页
js逆向1--音乐网站

js逆向1--音乐网站

作者: 奇楠之后 | 来源:发表于2020-05-31 13:29 被阅读0次

    目标网站:aHR0cCUzQS8vdG9vbC5saXVtaW5neWUuY24vbXVzaWMv
    点击搜索,打开开发者工具,搜索一个关键词,发现我们此次的目标--data参数

    search
    接下里就是寻找参数data的生成过程,这里记录下常用的搜索参数的方法
    如何搜索参数
    1. 使用浏览器全局搜索参数名或者url中特殊参数部分
      比如这个案例,由于data参数名过于平凡,搜索会得到很多结果,我们可以尝试搜索url参数部分


      data的寻找

      没有找到,尝试其他方法

    2. 查看 search 请求的 initiator(发起者)


      3.png

      通过该面板,我们可以知道该请求的起源过程,点击源文件,通过搜索url关键词,发现惊喜


      4.png
      于是我们在data这一行下断点
    3. 下xhr断点,由于已经找到,这里不再尝试
    js调试过程

    该参数的加密过程比较明显,是通过一个encode函数,我们直接把函数抠出来,放到本地运行,缺什么再补什么。如果你也是刚开始学习逆向,要多一些耐心,调试可能会有很多问题

    5.png

    在调试的过程中,可能会遇到以下的错误

    1. FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
     // this['zIYQbj'] = function() {
     //     return 'newState'
     // };
     //FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
     this['zIYQbj'] = function() {return 'newState'};
    

    该代码段在浏览器脚本中是一行,经过本地代码格式化,变成多行
    一般情况下,调试遇到内存溢出或者提示堆栈空间不足,都可以先通过全局搜索 function (),修改格式异常的代码段

    1. 提示md5不存在,可以通过下面代码解决,crypto-js是我们常用的一个加密库,里面封装了常见的加密函数。
    var cryptoJs = require('crypto-js');
    var md5 = function (a) {
        return cryptoJs.MD5(a).toString();
    };
    
    1. 提示 location 不存在,因为失去了浏览器环境,在逆向调试中,很容易遇到一些浏览器参数缺失。像 window或者document,一般情况下,我们可以这么定义var window = {} 或者window = global,而location可以直接复制浏览器的location。打开console,输入 copy(location),即可复制location对象。这里为什么这么做,因为有些代码需要读取location对象的属性值,location对象拥有的属性方法比较少,直接复制浏览器的省事。
    爬虫脚本的编写

    这是写该篇文章的主要目的,使用node开发api接口,供爬虫使用

    1. node express开发接口
    var express = require('express');
    var app = express();
    var getData = require('./22.js');
    app.get('/music', function(req, res) {
        // let text = JSON.stringify(req.query);
        let keyword = req.param('keyword');
        let text = 'text='+keyword+'&page=1&type=migu'
        data = getData.encode(text);
        res.send(data);
    });
    
    app.listen(3000);
    
    1. 前面抠出的代码,需要导出encode方法,供express脚本调用。在抠出的代码后面加上
    // 导出方法
    module.exports = {
        encode
    };
    
    1. 爬虫脚本的编写,比较简单
    import requests
    
    headers ={
        'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
    }
    
    def getParam(keyword):
        url = 'http://127.0.0.1:3000/music?keyword='+keyword
        res = requests.get(url)
        print('js参数:',res.text)
        return res.text
    
    def search(keyWord):
        url = 'http://tool.liumingye.cn/music/api/search'
        param = getParam(keyWord)
        data = {
            'data':param.replace('data=','').replace('&v=2',''),
            'v':2,
        }
        res = requests.post(url,headers=headers,data=data)
        print(res.json())
    
    if __name__ == '__main__':
        search('清明雨上')
    

    相关文章

      网友评论

          本文标题:js逆向1--音乐网站

          本文链接:https://www.haomeiwen.com/subject/pxklzhtx.html