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()

作者介绍
tslilove
V1