首页 > 其他分享 >js逆向实战之中国男子篮球职业联赛官方网站返回数据解密

js逆向实战之中国男子篮球职业联赛官方网站返回数据解密

时间:2024-04-27 17:55:05浏览次数:13  
标签:AES 拦截器 url 解密 js 男子篮球 职业联赛 key mode

url:https://www.cbaleague.com/data/#/teamMain?teamId=29124

分析过程

  1. 看流量包,返回数据全是加密的字符串,要做的就是解密回显数据。
    image

  2. 由于这里的网址都比较特殊,里面都带有id号,所以通过url关键字去搜索不是一个很好的办法。
    image
    image

  3. 看initiators,里面有很多异步传输。
    image

  4. 异步传输中,如果想对数据进行加解密,有一个比较常用的方法,拦截器(interceptors),此处我们可以通过搜索interceptors来定位。
    image

  5. 总共有5处,一处一处判断。

  • 第一处只是new了两个对象,肯定不是。
    image
  • 第二处,第三处中,unshiftpush函数是js中对字符串进行插入字符的函数,肯定也不是加密过程。
    image
  • 第四处是响应拦截器,第五处是请求拦截器,请求拦截器大概率是加密逻辑,响应拦截器大概率是解密逻辑,且不是js中的原生代码,要找的地方基本上没跑了。
    image
  1. 由于是对响应数据进行解密,所以在响应拦截器中打断点,进行调试。
    image
    看看e的值。
    image
    e.data就是响应的加密数据,所以bx函数就不需要看了,直接看$6e函数。

  2. 定位函数。
    image

  3. 在这段代码中可以看到关键词AES,不用想肯定是AES算法了。想要AES解密的话,需要知道keymode,如果modeCBC还需要知道iv,如果modeECB就不需要知道iv。打断点,看下keymodeiv是什么。
    modeAES.ECB,就不需要iv了。
    image
    r就是keyr = tp.enc.Utf8.parse(t)就是将t进行utf8编码后赋值给r
    image

  4. AES算法的三要素都知道了,就可以编写python代码进行解密了。(这里还需要当心回显数据是经过base64编码的,所以在解密之前需要先进行base64解码)

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad, pad
import requests
import base64


url = "https://data-server.cbaleague.com/api/teams/29124/seasons/2023/players"
resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, " \
                                               "like Gecko) Chrome/123.0.0.0 Safari/537.36"})
mi_str = base64.b64decode(resp.text)
key = "uVayqL4ONKjFbVzQ".encode("utf-8")
aes_encrypt = AES.new(key=key, mode=AES.MODE_ECB)
plaintext = aes_encrypt.decrypt(mi_str)
plaintext = unpad(plaintext, 16)
print(plaintext.decode("utf-8"))

运行结果如下:
image

总结:这个网站采用的都是同一种算法,如果想要解密其他url的数据,只需要修改代码中的url即可。

标签:AES,拦截器,url,解密,js,男子篮球,职业联赛,key,mode
From: https://www.cnblogs.com/sbhglqy/p/18162305

相关文章

  • threejs 浏览器窗口resize变化 自适应 html 全屏
    全屏:画布全屏和body页面全屏;//导入threejsimport*asTHREEfrom"three";import{OrbitControls}from"three/examples/jsm/controls/OrbitControls.js";//创建场景sceneconstscene=newTHREE.Scene();//console.log(scene,'scene');//......
  • js设计模式(上)
     引用:(23条消息)《Javascript设计模式与开发实践》关于设计模式典型代码的整理(上):单例模式、策略模式、代理模式、迭代器模式、发布-订阅模式、命令模式、组合模式_QQsilhonette的博客-CSDN博客1、单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。使用闭包封装......
  • js调整div顺序
    js调整div顺序并保留div原有事件等<divclass="my_tabs"><divclass="el-tabs__nav-scroll"><divclass="el-tabs__nav"><divclass="el-tabs__itemis-active">AAAA</div><d......
  • vue,js直接导出excel,xlsx的方法,XLSX_STYLE 行高设置失效的问题解决
    1、先安装依赖:xlsx、xlsx-style、file-saver三个包npminstallxlsxxlsx-stylefile-saver2、引入:<script>import*asXLSXfrom'xlsx/xlsx.mjs'importXLSX_STYLEfrom'xlsx-style';import{saveAs}from'file-saver';exportdefau......
  • JS相关技巧
    随意修改网页js代码document.body.contentEditable="true"document.designMode="on"或javascript:document.body.contentEditable='true';document.designMode='on';void0(浏览器输入框执行,chrome需要粘贴后,需要在前面手打javascript:因为粘贴的会自动过滤)复......
  • AssemblyResolve巧解未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0的问题
    问题:未能加载文件或程序集“Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个...问题分析:原因是因为引用的Microsoft.AspNet.SignalR.Client库的依赖项是6.0版本的Newtonsoft.Json,而且是动态加载进去的(用Assembly.LoadFrom),......
  • 使用 Docker 部署 Nuxt.js 应用程序
     来源:https://medium.com/@jkpeyi/deploying-a-nuxt-js-application-with-docker-69bf822c066d  WhendevelopingaNuxt.jsapplication,it’sessentialtobeabletodeployiteasilyandreproducibly.Inthisarticle,wewillexplorehowtouseDockertod......
  • NodeJS命令行注入:示例及预防
    在本文中,我们将学习如何在NodeJS中使用命令行函数进行注入漏洞攻击。现代网站可以是一个复杂的软件,它由许多分布在不同环境中的部分组成。如果你的应用程序没有得到有效的保护,那么分布在这些环境中的每一个组成部分都有可能受到命令行注入漏洞的攻击。本文将介绍如......
  • vue箭头函数、js-for循环、事件修饰符、摁键事件和修饰符、表单控制、完整购物车版本
    【箭头函数】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">&l......
  • Node.js Express 框架(2)
    1.读取文件并返回给客户端res.sendFile(path):读取文件并返回给客户端,适合静态页面app.get("/",function(req,res){res.sendFile(path.join(__dirname,"index.html"))})res.render(path,data):读取文件,配合模版引擎可以将数据渲染到文件中并返回给客户端,适合动态页面......