【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法

文章目录

  • 1. 写在前面
  • 2. 请求分析
  • 3. 加密分析
  • 4. 算法实现

1. 写在前面

  之前出过一个关于榜单analysis的分析,有兴趣的可以查看这篇文章:七麦榜单analysis加密分析

最近运营团队那边有同事找到我们,说工作中偶尔需要统计分析一下某APP在一些主流应用市场的下载量趋势数据

这个目前也只在一些成熟的移动应用数据聚合平台有,有的需要付费有的则数据有限。所以就有了这篇文章的出现!


分析目标

aHR0cHM6Ly93d3cucWltYWkuY24vYW5kYXBwL2Rvd25Ub3RhbC9hcHBpZC8xOTM1NDU1

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法_第1张图片


作者声明:

本文章中所有内容仅供学习交流使用!严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,若有侵权,请联系作者立即删除!

2. 请求分析

  首先我们选择最近一周提交请求,可以看到请求的参数所下图所示。加密参数analysis猜测是base64加密!appid(APP应用的ID),type(固定值天),sdate、edate(起始日期与截日期)

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法_第2张图片

3. 加密分析

   这里我们搜索加密参数analysis或者一些加密特征关键词是很难搜索到有用的信息。还是需要使用XHR断点的方式!

下完断点我们直接往上找堆栈信息,因为断点截停处加密已经完成。之前文章说过加密的方式都一样,换汤不换药!下载量趋势这块着重在参数加密这块跟评论一样有点小细节

榜单是没有请求参数加密的,搜索有参数加密(不过参数不需要处理)

如下所示,我们直接定位到加密函数这里,断点调试分析可以非常清晰的看到a就是参数拼接之后的值(参数拼接是有讲究的,a是经过排序的):

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法_第3张图片

然后接下断点继续往下走,会发现参数排序拼接后会经过base64编码,如下所示:

在这里插入图片描述

截止到这里我们尝试使用Python编码来实现一下对参数拼接后再Base64编码,如下所示:

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法_第4张图片

这里要说一下的是这个d,一串字符。这个可能是后续会不定期更新的,如果你发现加密失效了,不一定是加密算法人家换了,可能就是这个字符串更新了而已!

在这里插入图片描述

4. 算法实现

最后,使用Python实现一下完整的代码,如下所示:

import base64
import random
import time

params = {
    'type': 'day',
    'edate': '2023-08-31',
    'sdate': '2023-08-25',
    'appid': '1935455'
}
data = ''.join(sorted([str(v) for v in params.values()]))
print(base64.b64encode(data.encode()).decode()

def get_analysis(params, url):
    # 定义字符集
    charset = 'xyz517cda96efgh'
    
    # 随机数
    random_value = -(random.randint(100, 10000))
    
    # 时间戳
    current_time = int(time.time() * 1000)
    
    # 计算o的值
    o = current_time - (random_value or 0) - 1515125653845
    
    # 对params进行Base64编码
    encoded_params = base64.b64encode(params.encode()).decode()
    
    # 构建字符串
    combined_string = f'{encoded_params}@#{url}@#{o}@#1'
    
    # 初始化结果字符串
    result = ''
    
    # 计算长度
    e = len(combined_string)
    n = len(charset)
    
    # 逐字符进行异或运算
    for i in range(e):
        result += chr(ord(combined_string[i]) ^ ord(charset[(i + 10) % n]))
    
    # 对结果进行Base64编码
    encoded_result = base64.b64encode(result.encode()).decode()
    
    return encoded_result

def get_download():
    cookies = '必填项,填自己的即可!'
    baseurl = 'https://api.qimai.cn'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.159 Safari/537.36',
        'referer': 'https://www.qimai.cn/',
        'cookie': cookies,
    }
    url = '/andapp/download'
    params = {
        'type': 'day',
        'edate': '2023-08-31',
        'sdate': '2023-08-25',
        'appid': '1935455'
    }
    data = ''.join(sorted([str(v) for v in params.values()]))
    analysis = get_analysis(data, url)
    params['analysis'] = analysis

    res = requests.get(f'{baseurl}{url}', params=params, headers=headers).json()
    print(res)

使用上述Python代码测试结果如下:

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法_第5张图片

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

你可能感兴趣的:(爬虫JS逆向实战,python,analysis分析,算法)