当前位置: 首页 > news >正文

解密某游戏的数据加密

前言

在这里插入图片描述

最近有个兄弟通过我的视频号加我,咨询能否将这个dubo游戏游戏开始前就将数据拿到从而进行押注,于是通过抓包工具测试了下,发现数据有时候是明文,有时候确实密文,大致看了下有这几种加密:Md5aes、Md5,参数加密用md5,数据返回加密用Md5aes,本次记录一下分析过程。

登录

通过抓包分析数据,发现数据返回采用Md5aes
在这里插入图片描述
请求参数用了某种加密
在这里插入图片描述

分析

我们通过上面的抓包知道,密码肯定是用了一种加密方式,但具体是啥,还不清楚,我们通过打断点的形式顺藤摸瓜

通过观察启动资源,锁定一个index.js
在这里插入图片描述
点击进去,观察发现有表单提交的数据
在这里插入图片描述
继续往下搜索md5()方法

 t.prototype.get_md5 = function(t) {return this.md5(t)}

在这里插入图片描述
继续搜索md5()方法

在这里插入图片描述

cc._RF.push(e, “121674IswNGu77LvNvHfpBi”, “md5”)

cc._RF.push 和 cc._RF.pop 是 Cocos Creator 引擎用于跟踪脚本加载顺序和依赖关系的工具函数。这些函数在加载脚本时自动生成,用于维护加载堆栈。

我们通过对该方法进行数据修改,再次运行观察结果

修改

再md5方法下新增代码

t.prototype.md5 = function(t) {var e = this;alert('我被执行了');console.log(t);console.log(e);t = this.utf16_to_utf8(t);console.log('新的密码');console.log(t);for (var o = this.porcess_message(t), n = Uint32Array.from([this.A, this.B, this.C, this.D]), a = 0, i = this.split(Array.from(o), 16); a < i.length; a++) {for (var r = i[a], s = n[0], c = n[1], l = n[2], h = n[3], u = 0; u < 64; u++)n[(4 - u % 4) % 4] = this.fghi_wrapped(u)(n[(4 - u % 4) % 4], n[(4 - u % 4 + 1) % 4], n[(4 - u % 4 + 2) % 4], n[(4 - u % 4 + 3) % 4], r[this.x_index(u)], this.S[u], this.T(u));n[0] = s + n[0],n[1] = c + n[1],n[2] = l + n[2],n[3] = h + n[3]}return Array.from(n).map(function(t) {return e.little_endian(t)}).join("").toLowerCase()}

在这里插入图片描述

保存后刷新重新登陆

在这里插入图片描述
可以看到,密码的确是传递过来了
在这里插入图片描述

猜测

可能是md5加密

在这里插入图片描述
在这里插入图片描述
发现数据值一样,请求登录只需要将密码进行md5加密即可

import requests
import hashlib
headers = {'Accept': '*/*','Accept-Language': 'zh,zh-CN;q=0.9','Authorization': 'undefined','Cache-Control': 'no-cache','Connection': 'keep-alive','Pragma': 'no-cache','Referer': 'http://js88.mrlj.cn/js1/','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36',
}text1='123456'
print(text1)
md=hashlib.md5(text1.encode()) # 创建md5对象
md5pwd=md.hexdigest() # md5加密
print(md5pwd)params = {'loginId': '241837','loginPwd': md5pwd,
}response = requests.get('http://js88.mrlj.cn/qw/user/weixin/loginByPwd', params=params, headers=headers, verify=False)
print(response.json())

响应

123456
e10adc3949ba59abbe56e057f20f883e
{‘code’: 200, ‘msg’: ‘正常’, ‘data’: ‘md5AES:w3cqakJcff674yZSTLRgOck0lJ4SiaKjhO9Greq3hOdp+irWmG9nB/tPuvl1BYA2f6tHCIlxVRhippuJn/FVcVOrGk88zoscA9tbnx+mPIC2ynMt8KnPWKGQYKIJekukfktcGOg0JR29GkR6NktoboqIDaVIHMpCcain3bd9Ly/enE03bI5BuM9a+Kn86DXbbdSmUyNCWC0WNNi3Onn/KtJ3W6Tb8r/ujfragdTPPbpuvItSCXIB9kpQDlkSNSINsqTF8VaM8VBOQ2YKnv43ORmypGwPjeZrm+j4BmIhSM2xr+hlf0sJp1k1xtu4XUz4AGypWdESGOHbCGfgSFxpGs34UUxkAN2Dg+U/Y3Nv8hjQnt0UceSb2rfsHhWG3uCPqTnFFI0mV64QSQeyOsPEca80zjUEREXpcnPfR7lSQGdn5yoemu7rXWdsDszdHalIi774B38hY/1Cc+9uHjxvvaRP0+G9OUHgOPV2pwgS7nvlDekFH0E+PFHTZSg5UEm09tluDZeowxShc/MYcoGljdLrfT24Vr755gGHs2PgE8UXRglOQJqAsWazyQZJqz6/hULG40kAT3/PkLzREVMIt3yyGERj2RDzcPk+bJK5d12cWjUf6/c1tFfhJeBx+nKzyP+rFIi6JsaNUKObMwgNC1LiwEY0W3+suXQLcR5FbMa6CURmVzPwIxB4LslDD0OEPqnHHowvVE9ZyhE6ts5Am1KTcvKY7rY8MrAcXO30nHbfupwH5rjrrrf2MdpKcA2PUPnITj7V6TVCmqX24wdTB5pcrZVshvv1cV8zOll54S2tOJrC2GjRKRl1clXvVhokU2Ys22NKMDB5OxUP2ajJea6d98owyPlnpH4MVzxeVnewcK8/ed35YrT8f4nn2TFqe0zsQqqsiC9noScvr/uZV/vxBHYi45LRIjaAzTUhBc8l9IlfknJQnUvnmE2kzNBW’, ‘ok’: True}

在这里插入图片描述

解密

  function() {console.log('iv-=======');function t() {this.aes_key = "2c4add8f849a7bea",this.aes_iv = "dc4b73b33e69eaff"}return t.prototype.encrypt = function(t) {console.log('iv2-=======');var e = CryptoJS.enc.Utf8.parse(this.aes_key), o = CryptoJS.enc.Utf8.parse(this.aes_iv), n = CryptoJS.AES.encrypt(t, e, {iv: o,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.format.OpenSSL.stringify(n)},t.prototype.decrypt = function(t) {var e = (t = CryptoJS.format.OpenSSL.parse(t)).ciphertext.toString(), o = CryptoJS.enc.Hex.parse(e), n = CryptoJS.enc.Base64.stringify(o), a = CryptoJS.enc.Utf8.parse(this.aes_key), i = CryptoJS.enc.Utf8.parse(this.aes_iv);return CryptoJS.AES.decrypt(n, a, {iv: i,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)},n([i], t)}());

这段代码是一个 JavaScript 函数,它定义了一个名为 t 的构造函数,并将其实例化后作为匿名函数的返回值。在构造函数 t 中,有两个属性 aes_key 和 aes_iv,它们存储了AES加密算法所需的密钥和初始化向量。

函数中定义了两个方法 encrypt 和 decrypt,用于加密和解密操作。

在 encrypt 方法中,首先将密钥和初始化向量转换为 UTF-8 格式,然后使用 CryptoJS 库中的 AES 加密函数对传入的参数
t 进行加密。加密过程中指定了加密模式为 CBC(Cipher Block Chaining),并使用 PKCS7 填充方式。最后,使用
OpenSSL 格式将加密结果转换为字符串并返回。

在 decrypt 方法中,首先将传入的密文解析为 OpenSSL 格式,然后将其转换为十六进制格式,并再次转换为 Base64
字符串。接着,将密钥和初始化向量转换为 UTF-8 格式,使用 CryptoJS 库中的 AES
解密函数对密文进行解密,解密模式和填充方式与加密时相同。最终将解密结果转换为 UTF-8 格式的字符串并返回。

将js代码复制下来

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Encryption/Decryption Example</title><script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
</head>
<body><script>(function() {function t() {this.aes_key = "2c4add8f849a7bea";this.aes_iv = "dc4b73b33e69eaff";}t.prototype.encrypt = function(t) {var e = CryptoJS.enc.Utf8.parse(this.aes_key),o = CryptoJS.enc.Utf8.parse(this.aes_iv),n = CryptoJS.AES.encrypt(t, e, {iv: o,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.format.OpenSSL.stringify(n);};t.prototype.decrypt = function(t) {var e = (t = CryptoJS.format.OpenSSL.parse(t)).ciphertext.toString(),o = CryptoJS.enc.Hex.parse(e),n = CryptoJS.enc.Base64.stringify(o),a = CryptoJS.enc.Utf8.parse(this.aes_key),i = CryptoJS.enc.Utf8.parse(this.aes_iv);return CryptoJS.AES.decrypt(n, a, {iv: i,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);};// 示例使用var cipher = new t();var plaintext = "{code:200,data}";var encrypted_text = cipher.encrypt(plaintext);console.log("Encrypted:", encrypted_text);var decrypted_text = cipher.decrypt(encrypted_text);console.log("Decrypted:", decrypted_text);})();</script>
</body>
</html>

在这里插入图片描述

相关文章:

解密某游戏的数据加密

前言 最近有个兄弟通过我的视频号加我&#xff0c;咨询能否将这个dubo游戏游戏开始前就将数据拿到从而进行押注&#xff0c;于是通过抓包工具测试了下&#xff0c;发现数据有时候是明文&#xff0c;有时候确实密文&#xff0c;大致看了下有这几种加密&#xff1a;Md5aes、Md5&a…...

【报错合集】完美解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”

文章目录 解决方案&#xff1a;更改设置的硬件版本 今天我需要将别人的虚拟机克隆到我的VMware Workstation上运行&#xff0c;结果发生了以下的错误&#xff1a; 刚开始以为是VMware Workstation的版本问题太低导致的&#xff0c;所以我删除了原来的那个版本&#xff0c;下载…...

YOLOv8小白中的小白安装环境教程!没一个字废话,看一遍不踩坑!

文章目录 去哪里下代码?怎么下代码?怎么装环境?命令行界面(CLI)指令和Python脚本区别?附录1 conda常用指令附录2 git常用指令附录3 项目代码文件作用去哪里下代码? 下载代码请大家直接去 YOLOv8的官方仓库下载,名字叫 ultralytics,有些镜像网站和个人发的等来历不明的代…...

C#正则表达式,提取信息使用

正则表达式简介 在C#中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;通常简写为regex或regexp&#xff09;是一种功能强大的文本处理工具&#xff0c;它使用特定的字符序列来定义搜索模式&#xff0c;从而实现对文本的高效搜索、匹配和替换操作。正则表达…...

【数据结构】详解队列

现在我们来掌握一下队列&#xff01;如果有对往期知识有不足地方&#xff0c;可翻阅之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~-CSDN博客 所属专栏&#xff1a;数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 栈和队列的实现其实都是对你顺序表和链表的检验…...

大模型微调方法汇总

微调方法 Freeze方法P-tuning方法 prefix-tuningPrompt TuningP-tuning v1P-tuning v2Lora方法 重要相关参数LoRA 的优势Qlora方法 相关参数微调经验 模型选择模型大小选择数据处理微调方案英文模型需要做词表扩充吗&#xff1f;如何避免灾难遗忘大模型的幻觉问题微调后的输出…...

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能&#xff0c;需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数&#xff1a; HMB建议值&#xff08;HMPRE&#xff09;&#xff1a;设定实际分配给HMB使用的主机内存容量&#xff0c;为设备提供最优性能的内存分配量。 HMB最小值…...

YTU 3166 共享单车 DFS 记忆化搜索

问题 D: 共享单车 题目描述 共享单车走进烟台&#xff0c;小明决定尝试。小明启动共享单车 App&#xff0c;轻松地找到附近的单车。那么问题来了&#xff0c;到最近的那辆单车&#xff0c;小明大约要走多少米呢&#xff1f; 现在简化问题。将地图设定成一个由 100100 米的像…...

RAG应用中的路由模式

依据的用户查询意图在 RAG 应用程序使用“路由控制模式”可以帮助我们创建更强大的 RAG 应用程序。我们通常希望用户能够访问的数据可以来自各种来源,如报告、文档、图片、数据库和第三方系统。 对于基于业务的 RAG 应用程序,我们可能还希望用户能够与其它业务系统进行交互,…...

运维:SSH常用命令简介

SH&#xff0c;全称为Secure Shell&#xff0c;是建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。通过 SSH 可以对所有传输的数据进行加密&…...

Springboot+Vue项目-基于Java+MySQL的流浪动物管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

力扣刷题:四数相加Ⅱ

题目详情&#xff1a; 解法一&#xff1a;暴力枚举 对于这道题&#xff0c;我们的第一思路就是暴力枚举&#xff0c;我们可以写一个四层的for循环进行暴力匹配&#xff0c;只要相加的结果等于0就进行统计。但是我们会发现&#xff0c;我们的事件复杂度为O(N^4)事件复杂度非常大…...

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…...

Chatgpt学习技巧

论文润色指令 论文润色常用指令 通用话术&#xff1a; Below is a paragraph from an academic paper. Polish the writing to meet the academic style, improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole se…...

[初学rust] 06_rust 元组

rust 元组 表现形式 和python的元组类似&#xff0c;rust中的元组是一个有序列表&#xff0c;可以包含多种不同类型的数据。 let tup (500, 6.4, a);模式匹配解构元组 和python中的解构一样&#xff0c;rust也支持模式匹配解构元组&#xff0c;但是需要注意的是&#xff0…...

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;四&#xff09; 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第三部分&#xff1a;工具使用 工具的使用是人类的一个显着而显着的特征。我们创造、修改和利用外部物体来完成超…...

C++进阶:哈希(1)

目录 1. 简介unordered_set与unordered_map2. 哈希表&#xff08;散列&#xff09;2.1 哈希表的引入2.2 闭散列的除留余数法2.2.1 前置知识补充与描述2.2.2 闭散列哈希表实现 2.3 开散列的哈希桶2.3.1 结构描述2.3.2 开散列哈希桶实现2.3.3 哈希桶的迭代器与key值处理仿函数 3.…...

第三节课,功能2:开发后端用户的管理接口-- postman--debug测试

一、如何使用postman 网址&#xff1a; https://www.postman.com/downloads/ 【Postman小白教程】五分钟学会如何使用Postman~_哔哩哔哩_bilibili postman安装使用_bowser agent在postman哪里-CSDN博客 二、下载后 登录&#xff0c;开始测试 2.1 关于postman 报错&#…...

Docker-compsoe部署prysm-beacon-chain + geth服务(geth版本v1.14.0)

1、创建目录结构 ~ # mkdir -p /data/docker-compose/eth ~ # cd /data/docker-compose/eth /data/docker-compose/eth# mkdir beacondata eth ethdata prysm2、编写prysm-beacon-chain Dockerfile和启动脚本文件 /data/docker-compose/eth# vim Dockerfile /data/docker-…...

前端人员如何理解进程和线程

进程和线程的概念&#xff1a; 进程和线程本质都是cpu工作过程的时间片。 进程可以理解为cpu在运行指令即加载保存上下文所要用的时间。也可以理解为一个应用程序运行的实例。 线程是进程中更小的单位&#xff0c;描述一段指令所需要的时间。 进程是资源分配的最小单位&#xf…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...