当前位置:   article > 正文

JS逆向-请求参数验证(案例:七麦数据)_七麦数据 js逆向

七麦数据 js逆向

步骤

一、抓包 找关键字 参数里是否包含加密字段
二、找参数在JS的位置
1、搜索关键字
2、XHR断点
3、hook关键字)
三、扣JS
四、还原入口参数

前言:
此内容仅供学习交流使用,不用于商业用途,如果涉及侵权,请联系作者删除;

一、抓包

在这里插入图片描述

打开开发者工具,点一下免费加载一下数据,我们可以看到有我们想要的数据

请添加图片描述
查看请求参数,发现其中analysis参数是加密的,且每次点击都不同,可以判断是由js生成的

二、找参数

首先我们通过搜索关键词,并没有找到相关的参数
在这里插入图片描述
然后通过使用XHR断点,我们能来到了这里

在这里插入图片描述

接下里点击跳过下一个函数调用,大概走三步左右就能来到以下这个位置

在这里插入图片描述
可以看到这是一个回调方法,我们往里面走,点击进入下一个函数调用

在这里插入图片描述
此时t是一个返回的数据,但我们需要拿的是一个请求数据,所以继续往后面走,点击跳过下一个函数调用

在这里插入图片描述
可以看到这是一个响应的拦截器。因此我们往上拉,可以找到请求的拦截器,并且下断点

在这里插入图片描述
其中e就是我们想要的加密后的参数在这里插入图片描述
可以得出这是生成加密参数的函数,函数需要的参数分别是a和d

在这里插入图片描述

analysis =  i[jt](i[qt](a, d))
  • 1

三、扣JS

在这里插入图片描述
大概30行左右就搞定了

四、还原参数入口

a = 'MTEyMDIzLTAxLTE1MzZjbmZyZWVpcGFk@#/rank/indexSnapshot@#12565779418@#3'
d = 'xyz517cda96abcd'
  • 1
  • 2

可见需要还原的参数为a和d

d经过测试是写死的
a经过以下地方声明
在这里插入图片描述

完整代码

import datetime
import requests
import execjs


def get_data(page, brand, device):
    '''
    :param page: The number of pages to be retrieved
    :param brand: ‘free’\'paid'\'grossing'
    :param device:'iphone'\'ipad'
    :return:
    '''
    url = 'https://api.qimai.cn/rank/index'
    headers = {
        "referer": "https://www.qimai.cn/",
        "sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-site",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
    }
    current_date = datetime.datetime.now().strftime('%Y-%m-%d')

    params = {
        "analysis": "ezUnVisSKEh6W3YbKQtwQSwILhA1PT9BfGM6Hi9UeBQ4DS4UIy1ZRm40NVx5FU4QAgoTVhNbVVIbJEIIBFdWVlxOT0wCAXdAVw==",
        "brand": brand,
        "device": device,
        "country": "cn",
        "genre": "36",
        "date": current_date,
        "page": page,
        "is_rank_index": "1",
        "snapshot": "19:46:01"
    }

    with open('06七麦数据接口.js', encoding='utf-8') as f:
        js_code = execjs.compile(f.read())
        analysis = js_code.call('get_data', page, brand, device, current_date)
        params['analysis'] = analysis

    resp = requests.get(url=url, headers=headers, params=params)
    print(resp.json())


for i in range(1, 4):
    get_data(i, brand='grossing', device='iphone')
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

最后

JS接口文件或更多探讨欢迎联系作者交流~~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/115232
推荐阅读
相关标签
  

闽ICP备14008679号