某国产沙盒游戏的启动器逆向

游戏近期改变了登录方式,于是把之前的研究成果分享一下
研究仅供学习交流,如有侵权请联系删除

抓包

启动启动器,输入账号密码,点击登录,抓包得到一些信息

接口

1

https://wskacchm.mini1.cn:14100/login/auth_security

请求数据

加密的返回数据 

 

调试分析

由于游戏更新后,原文件丢失了,这里就不详细演示调试过程了qwq,改用ida静态分析演示。
因为游戏启动需要解密数据构造 commandline 来启动,所以解密的代码应该就在启动器里.
启动ida,等待分析结束,搜索关键字符串 authinfo ,找到对应函数
调试分析的话,可以发现在走完 sub_45A180 后,就解密完成了,那么这个肯定就是解密函数了,第一个参数是加密的数据,第二个是iv

 

iv分析

分析一下这个函数,发现前面对iv做了一系列的运算,实际上就是取出iv中的数字拼接在了一起, 简化一下的python代码如下

1

length = int(''.join(c for in iv_ if c.isdigit()))

 

加密算法分析

这里我是半调试半加直觉的,调试后发现他在获取完iv后,将加密数据分成了两部分,然后反过来拼接起来
经过测试后得出,iv是第二部分数据的长度

1

2

3

4

length = int(''.join(c for in iv_ if c.isdigit()))

res = content[len(content) - length:] + content[:len(content) - length]

# base64解码

res = base64.b64decode(res)

继续往下调试,走到 sub_44C2B0 发现传入了两个字符串参数
ida跟进分析了一下,发现很明显的AESs_box
那么基本肯定这里就是AES的解密了,传入的两个字符串参数一个是key,一个是iv

 

 

 

key 和 iv

1

2

key: fcafc12e17b93a30a8998fcbc7d5c786

iv: 624df8d86de5dc35

测试解密

解密的流程清楚了 解析iv还原数据顺序->base64解码->aes解密
用 CyberChef 测试一下,成功解密

 

 

auth分析

在尝试自己发post的时候发现还有个auth参数不知道怎么得到,继续分析
调试得出auth就是 source=mini_micro&target=auth&time=时间戳 加盐后md5加密的值,盐值调试一下或者明文都能看到

1

2

3

4

5

6

SALT = "2ddb7619717147439c83ab022e9d4d38"

def get_auth():

    string = "source=mini_micro&target=auth&time=" + str(TIMESTAMP) + SALT

    md5 = hashlib.md5()

    md5.update(string.encode())

    return md5.hexdigest()

全部代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

import requests

import base64

import uuid

import hashlib

from datetime import datetime

from Crypto.Cipher import AES

requests.packages.urllib3.disable_warnings()

# ---------- config ----------

UIN = "<Uin>"

PASSWORD = "<Password>"

APIID = 110

CLTVERSION = 73472

AES_KEY = "fcafc12e17b93a30a8998fcbc7d5c786"

AES_IV = "624df8d86de5dc35"

SALT = "2ddb7619717147439c83ab022e9d4d38"

LOGIN_API = "https://wskacchm.mini1.cn:14100/login/auth_security"

TIMESTAMP = int(datetime.now().timestamp())

# -----------------------------

def get_auth():

    string = "source=mini_micro&target=auth&time=" + str(TIMESTAMP) + SALT

    md5 = hashlib.md5()

    md5.update(string.encode())

    return md5.hexdigest()

def get_device_id():

    # 随便伪造的设备ID,不是游戏本身的算法

    return "WIN" + uuid.uuid1().hex

def decrypt_data(content, iv_):

    # 根据iv取到第二部分的长度, 还原顺序

    length = int(''.join(c for in iv_ if c.isdigit()))

    res = content[len(content) - length:] + content[:len(content) - length]

    # base64解码

    res = base64.b64decode(res)

    # AES解密

    aes = AES.new(AES_KEY.encode(), AES.MODE_CBC, AES_IV.encode())

    dec = aes.decrypt(res)

    return dec.decode()

data = {

    "auth": get_auth(),

    "passwd_auth": {

        "DeviceID": get_device_id(),

        "apiid": APIID,

        "cltversion": CLTVERSION,

        "passwd": PASSWORD,

        "uin": UIN

    },

    "source""mini_micro",

    "target""auth",

    "time": TIMESTAMP

}

if __name__ == '__main__':

    response = dict(requests.post(LOGIN_API, json=data, verify=False).json())

    iv = response["iv"]

    print(decrypt_data(response["authinfo"], iv))

    print(decrypt_data(response["baseinfo"], iv))

结尾

小白写的有点乱,有问题还请提出qwq
还有,看雪的Markdown编辑器字数多了变得好卡hh

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数&#xff1f; 我…

存储任意类型

code /* * c17 std::any */#include <cstdint> #include <cstring> #include <cstdlib> #include <iostream> #include <thread> #include <chrono>namespace lxz {// T不为指针时 template<typename T> struct Data {Data(): data…

QT第六天

要求&#xff1a;使用QT绘图&#xff0c;完成仪表盘绘制&#xff0c;如下图。 素材 运行效果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen>QT_BEGIN_NAMESPACE name…

网络端口映射和端口转发的区别和联系

目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …

跨平台兼容,无限可能:Apple Remote Desktop for Mac让远程控制更简单

Apple Remote Desktop for Mac是一款远程桌面管理软件&#xff0c;提供了一系列强大的功能&#xff0c;让用户可以轻松地管理和控制远程计算机。以下是该软件的一些主要功能和特点&#xff1a; 实时远程访问和控制&#xff1a;使用Apple Remote Desktop&#xff0c;用户可以在…

跟着pink老师前端入门教程-day05

七、CSS的引入方式 根据CSS样式书写的位置&#xff08;或者引入的方式&#xff09;&#xff0c;CSS样式表可以分为三大类 1. 行内样式表&#xff08;行内式&#xff09; 内部样式表&#xff08;内嵌样式表&#xff09;是写到HTML页面内部&#xff0c;将所有的CSS代码抽取出…

【Proteus仿真】【Arduino单片机】智能助眠机系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器闹铃模块、LCD1602显示模块、心率血氧模块、ADC模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示传感器采…

HackTheBox - Medium - Linux - Mentor

Mentor Mentor 是一台中等难度的 Linux 机器&#xff0c;其路径包括在到达 root 之前在四个不同的用户之间切换。使用可暴力破解的社区字符串扫描“SNMP”服务后&#xff0c;会发现用于“API”端点的明文凭据&#xff0c;该端点被证明容易受到盲目远程代码执行的影响&#xff…

如何实现无公网ip远程访问内网本地BUG管理服务【内网穿透】

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

精通Discord营销:多账号注册与管理,高效打造矩阵

Discord虽然是一个海外小众平台&#xff0c;但在Z世代群体来说却非常受欢迎。通常在游戏行业、年轻化的电商特定品类、软件等业务中&#xff0c;Discord的社群营销可以起到非常卓越的效果。但是&#xff0c;您必须学会管理不同的帐户&#xff0c;以构成矩阵打造社区&#xff0c…

更适合3D项目的UI、事件交互!纯国产数字孪生引擎持续升级中!!!

UI和事件交互是3D可视化项目中最常见的模块&#xff0c;主要用于信息添加、展示&#xff0c;用来确保按照用户需求呈现内容并完成交互。 平时工作在进行UI和交互设计时&#xff0c;经常出现以下问题&#xff1a;UI过于复杂导致3D项目内交互效率低下&#xff0c;或者是结合3D项目…

简单了解【多智能体强化学习(MARL)】

我们的现实生活中有着许多多智能体共同决策的场景&#xff0c;比如多机械臂协同&#xff0c;多个无人机或多个机器人完成某共同目标。下面介绍单智能体强化学习的进化&#xff0c;多智能体强化学习。 含义 多智能体系统中包含 m 个智能体&#xff0c;智能体共享环境&#xff…

【vsan数据恢复】vsan逻辑架构出现故障的数据恢复案例

VSAN数据恢复环境&#xff1a; 一套有三台服务器节点的VSAN超融合基础架构&#xff0c;每台服务器节点上配置2块SSD硬盘和4块机械硬盘。 每个服务器节点上配置有两个磁盘组&#xff0c;每个磁盘组使用1个SSD硬盘作为缓存盘&#xff0c;2个机械硬盘作为容量盘。三台服务器节点上…

c/c++的指针函数与函数指针

函数 定义&#xff1a; 函数是数学中的一个概念&#xff0c;它是定义在某个数集上的一个特殊的映射关系。函数将输入值&#xff08;或自变量&#xff09;映射到输出值&#xff08;或因变量&#xff09;。函数的输入和输出可以是任何类型的数据&#xff0c;如数字、字符串、数组…

ArcGIS Pro 如何新建布局

你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换&#xff0c;到了ArcGIS Pro中却找不到二者之间切换的按钮&#xff0c;即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同&#xff0c;这里为大家介绍一下在ArcGIS Pro…

前端react入门day04-useEffect与Hook函数

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…

【DC-DC】APS54085降压恒流 高辉度调光降压恒流芯片

产品描述 APS54085 是一款 PWM 工作模式,高效率、 外围简单、内置功率 MOS 管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。最大电流 2.0A。 APS54085 可实现线性调光和 PWM 调光&#xff0c; 线性调光有效电压范围 0.52-2.55V. PWM 调光频率范围 100…

React Native实现QQ等级皇冠太阳星星的展示-代码示例

代码 function LevelGetImages(level: number) {let res []const marks [{ mod: 20, image: Images.setting.level_king },{ mod: 15, image: Images.setting.level_queen },{ mod: 10, image: Images.setting.level_moon },{ mod: 5, image: Images.setting.level_star },…

metinfo_6.0.0 任意文件读取漏洞复现

漏洞点为/include/thumb.php 一测&#xff1a;/include/thumb.php?dir..././http/..././config/config_db.php 二测&#xff1a;/include/thumb.php?dir.....///http/.....///config/config_db.php 三测&#xff1a;/include/thumb.php?dirhttp/.....///.....///config/conf…