tslilove

V1

2022/10/08阅读:43主题:山吹

行行查榜单data解密

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!


接口:aHR0cHM6Ly9hcGkuaGFuZ2hhbmdjaGEuY29tL2hoYy9jaXR5L2dldFJhbmtMaXN0P2ZpbHRlcj0lN0IlMjJ0eXBlJTIyJTNBbnVsbCUyQyUyMnVzZXJJZCUyMiUzQTE3NjYxNTQlMkMlMjJsaW1pdCUyMiUzQTE4JTJDJTIyc2tpcCUyMiUzQTElN0Q=

我们可以看见,返回数据是加密的,数据是通过ajax加载的,通过调用栈,查找其加密位置

在如下位置打上断点,然后一直追

一直到如下位置,e就是将数据加密的地方

控制台输出一下

由此可知,decrypt就是解密的地方了,单步进去,可以看见是一个AES解密,参数n是待解密数据,e是用来当做key的,当e为undefined的时候,给e赋值"".concat(c).concat(r).concat(a)

算法源码:

var i = t("3452")
      , o = t.n(i)
      , c = "3sd&d2"
      , r = "4h@$udD2s"
      , a = "*";
    e["a"] = {
        decrypt: function(n, e) {
            e = e || "".concat(c).concat(r).concat(a);
            var t = o.a.enc.Utf8.parse(e)
              , i = o.a.AES.decrypt(n, t, {
                mode: o.a.mode.ECB,
                padding: o.a.pad.Pkcs7
            });
            return o.a.enc.Utf8.stringify(i).toString()
        }
    }
}

可以直接用python标准库或者nodejs标准库来模拟

文末源码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
# @Time    :2022/10/3 8:46
# @Author   : 亮哥
# @微信公众号  : 亮哥数据实验室
# @File      : hybd.py
# Software  : PyCharm

import requests
import execjs

def decrypt(encrypt_text):
    js = """
    var CryptoJS = require('crypto-js');
    var decrypt= function(n, e) {
        var c = "
3sd&d2"
        , r = "
4h@$udD2s"
        , a = "
*";
        e = e || "
".concat(c).concat(r).concat(a);
        var t = CryptoJS.enc.Utf8.parse(e)
          , i = CryptoJS.AES.decrypt(n, t, {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        });
        return CryptoJS.enc.Utf8.stringify(i).toString()
    };
    "
""
    ctx = execjs.compile(js)
    decryptData = ctx.eval(f'decrypt("{encrypt_text}")')
    print(f"解密数据:{decryptData}")

def getData():
    url = aHR0cHM6Ly9hcGkuaGFuZ2hhbmdjaGEuY29tL2hoYy9jaXR5L2dldFJhbmtMaXN0
    params = {
        "filter"'{"type": null, "userId": 1766154, "limit": 18, "skip": 1}'
    }
    headers = {你的headers}

    resq = requests.get(url, headers=headers,params=params)
    data = resq.json()['data']
    print(f"返回的加密数据为:{data}")
    decrypt(data)

if __name__ == '__main__':
    getData()

分类:

后端

标签:

Python

作者介绍

tslilove
V1