看流量包,返回数据全是加密的字符串,要做的就是解密回显数据。
由于这里的网址都比较特殊,里面都带有id号,所以通过url关键字去搜索不是一个很好的办法。
看initiators,里面有很多异步传输。
异步传输中,如果想对数据进行加解密,有一个比较常用的方法,拦截器(interceptors),此处我们可以通过搜索interceptors
来定位。
总共有5处,一处一处判断。
第一处只是new了两个对象,肯定不是。
第二处,第三处中,unshift
和push
函数是js中对字符串进行插入字符的函数,肯定也不是加密过程。
第四处是响应拦截器,第五处是请求拦截器,请求拦截器大概率是加密逻辑,响应拦截器大概率是解密逻辑,且不是js中的原生代码,要找的地方基本上没跑了。
由于是对响应数据进行解密,所以在响应拦截器中打断点,进行调试。
看看e
的值。
e.data
就是响应的加密数据,所以bx
函数就不需要看了,直接看$6e
函数。
定位函数。
在这段代码中可以看到关键词AES
,不用想肯定是AES算法了。想要AES解密的话,需要知道key
,mode
,如果mode
是CBC
还需要知道iv
,如果mode
是ECB
就不需要知道iv
。打断点,看下key
,mode
,iv
是什么。
mode
为AES.ECB
,就不需要iv
了。
r
就是key
,r = tp.enc.Utf8.parse(t)
就是将t
进行utf8编码后赋值给r
。
AES算法的三要素都知道了,就可以编写Node代码进行解密了。(这里还需要当心回显数据是经过base64编码的,所以在解密之前需要先进行base64解码)
// 导入 http 模块
const http = require(http);
const crypto = require('crypto')
const { cbaleague } = require('./module/www.cbaleague.com.js')
// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
// 设置响应头
res.writeHead(200, { 'Content-Type': 'text/plain' });
// 发送响应
res.end('Hello, CloudStudio!');
});
// 监听 3000 端口
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
cbaleague.getTeamById()
cbaleague.getTeamsList()
});
const crypto = require('crypto')
const axios = require('axios')
class Cbaleague {
constructor(){
this._aesKey = "uVayqL4ONKjFbVzQ" // aes解密的key值
this._baseUrl = "https://data-server.cbaleague.com/api"
this._requestList = ['/teams/29124','/teams/teamList','/com-code-tables/getPlayerSeason?teamId=29124']
}
// 获取单条信息
async getTeamById(){
let data = await axios.get(this._baseUrl+this._requestList[0])
// console.log(data);
if(data.data){
// 进行解密
const de = crypto.createDecipheriv('aes-128-ecb',this._aesKey,null)
let result = de.update(data.data,'base64','utf8')
result += de.final('utf8')
console.log(result);
return result
}
}
async getTeamsList(){
let data = await axios.get(this._baseUrl+this._requestList[1])
// console.log(data);
if(data.data){
// 进行解密
const de = crypto.createDecipheriv('aes-128-ecb',this._aesKey,null)
let result = de.update(data.data,'base64','utf8')
result += de.final('utf8')
console.log(result);
return result
}
}
}
module.exports = {
Cbaleague,
cbaleague: new Cbaleague()
}
[ {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29115_300.png",
"teamId" : 29115,
"club" : "北京首钢霹雳鸭俱乐部",
"teamCnAlias" : "北京北汽"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29136_300.png",
"teamId" : 29136,
"club" : "北京紫禁勇士篮球俱乐部",
"teamCnAlias" : "北京控股"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29134_300.png",
"teamId" : 29134,
"club" : "福建鲟浔兴俱乐部",
"teamCnAlias" : "福建晋江文旅"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29124_300.png",
"teamId" : 29124,
"club" : "广东宏远华南虎俱乐部",
"teamCnAlias" : "广东东阳光"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29139_300.png",
"teamId" : 29139,
"club" : "广州龙狮俱乐部",
"teamCnAlias" : "广州朗肽海本"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29118_300.png",
"teamId" : 29118,
"club" : "江苏龙肯帝亚俱乐部",
"teamCnAlias" : "江苏肯帝亚"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29137_300.png",
"teamId" : 29137,
"club" : "吉林九台农商行东北虎俱乐部",
"teamCnAlias" : "九台农商银行"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29129_300.png",
"teamId" : 29129,
"club" : "辽宁沈阳三生飞豹俱乐部",
"teamCnAlias" : "辽宁本钢"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29133_300.png",
"teamId" : 29133,
"club" : "南京同曦大圣俱乐部",
"teamCnAlias" : "南京头排苏酒"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/100074683_300.png",
"teamId" : 100074683,
"club" : "宁波富邦火箭俱乐部",
"teamCnAlias" : "宁波町渥"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29135_300.png",
"teamId" : 29135,
"club" : "青岛国信海天雄鹰俱乐部",
"teamCnAlias" : "青岛国信制药"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29130_300.png",
"teamId" : 29130,
"club" : "山东高速麒麟俱乐部",
"teamCnAlias" : "山东高速"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29132_300.png",
"teamId" : 29132,
"club" : "山西汾酒猛龙俱乐部",
"teamCnAlias" : "山西汾酒"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29125_300.png",
"teamId" : 29125,
"club" : "上海久事大鲨鱼俱乐部",
"teamCnAlias" : "上海久事"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29131_300.png",
"teamId" : 29131,
"club" : "深圳新世纪烈豹俱乐部",
"teamCnAlias" : "深圳马可波罗"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29127_300.png",
"teamId" : 29127,
"club" : "四川锦城蓝鲸俱乐部",
"teamCnAlias" : "四川丰谷酒业"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29138_300.png",
"teamId" : 29138,
"club" : "天津荣钢先行者俱乐部",
"teamCnAlias" : "天津先行者"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29117_300.png",
"teamId" : 29117,
"club" : "新疆广汇飞虎俱乐部",
"teamCnAlias" : "新疆伊力特"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29140_300.png",
"teamId" : 29140,
"club" : "浙江稠州金牛俱乐部",
"teamCnAlias" : "浙江稠州金租"
}, {
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29128_300.png",
"teamId" : 29128,
"club" : "浙江广厦雄狮俱乐部",
"teamCnAlias" : "浙江方兴渡"
} ]
{
"teamEnName" : "GUANG DONG",
"city" : "",
"teamCnAliasShort" : null,
"arena" : "",
"coachCnName" : "杜锋",
"coachEnName" : "DU F.",
"losses" : 15,
"capacity" : 0,
"province" : null,
"seasonId" : 2024,
"club" : "广东宏远华南虎俱乐部",
"rank" : 7,
"season" : 2024,
"id" : 1831148534288617474,
"matchTypeId" : 1,
"introduction" : "",
"objectId" : null,
"teamLogo" : "//image.cbaleague.com/cbaleague/teamlogo/300x300/29124_300.png",
"wins" : 31,
"teamCity" : "",
"coachId" : 100042440,
"teamCnAlias" : "广东东阳光",
"assCoachNames" : "伊戈尔 莫拉蒂迪斯 魏国梁 任骏飞",
"isNow" : 1,
"teamNameKey" : null,
"coachCnAlias" : "杜锋",
"playerList" : null,
"teamId" : 29124,
"teamEnAlias" : "GST",
"teamCnName" : "广东宏远华南虎俱乐部广东东阳光篮球队",
"coach" : "杜锋"
}
文章标题:js逆向实战之中国男子篮球职业联赛官方网站返回数据解密
文章作者:罗罗
文章链接:[复制]
最后修改时间:2025年 06月 12日 17时18分
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。 本文采用CC BY-NC-SA 4.0进行许可。
Copyright © 2023-2025
豫ICP备2022014268号-1
「每想拥抱你一次,天空飘落一片雪,至此雪花拥抱撒哈拉!」
本站已经艰难运行了620天