js逆向1--音乐网站

2020-05-31  本文已影响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('清明雨上')
上一篇 下一篇

猜你喜欢

热点阅读