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

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

抓包

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

接口

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,一经查实,立即删除!

相关文章

DataFrame的基本使用--学习笔记

1&#xff0c;DataFrame的基本使用 DSL方法–DataFrame方法 其中包括的方法有&#xff1a;select(),selectExpr(),groupby()/groupBy() where ,orderBy(),sort(),limit(),withColumn(), from pyspark.sql import SparkSession#创建ss对象ss SparkSession.builder.getOrCreat…

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

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

【第二十二节】变量与运算符-位运算符

运算符运算<<左移>>右移>>>无符号右移&与运算|或运算^异或运算~取反运算 位运算符详细信息 <<空位补0&#xff0c;被遗弃的高位丢弃&#xff0c;空缺位补0>>被移位的二进制最高位为0&#xff0c;右移后&#xff0c;空缺位补0&#xff0…

Fine-tuning:个性化AI的妙术

在本篇文章中,我们将深入探讨Fine-tuning的概念、原理以及如何在实际项目中运用它,以此为初学者提供一份入门级的指南。 一、什么是大模型 ChatGPT大模型今年可谓是大火,在正式介绍大模型微调技术之前,为了方便大家理解,我们先对大模型做一个直观的抽象。 本质上,现在…

存储任意类型

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…

运用分布式锁 redisson

导入依赖 根据springboot版本不同自行选择版本 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.3</version> </dependency> 创建客户端 Beanpublic R…

面试的忌讳,你中了几枪?

面试是职场旅程中的一个重要环节&#xff0c;它不仅是求职者展示自己的一个舞台&#xff0c;也是企业寻找合适人才的一个过程。在这个过程中&#xff0c;有几个常见的误区需要特别注意。 夜郎自大 很多仗着自己有几年的工作经验&#xff0c;总觉得自己技术牛逼&#xff0c;面…

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…

2. 分享三篇早期的FPGA 布局布线论文

1. PathFinder:一种基于协商和性能驱动的FPGA布线器 Larry MCMURCHIE, Carl EBELING. PathFinder: A Negotiation-Based Performance-Driven Router for FPGAs, February 1996[J/OL]. February 1996 针对FPGA布线中存在的布线性能与可布通性之间的矛盾&#xff0c;该文提出了…

JAVA代码学习(中)

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 【商务合作请私信或进群联系群主】 四、继承、多态 继承机制的使用可以复用一些定义好的类&#xff0c;减少重复代码的编写。多态机制可以动态调整对…

2024年1月18日Arxiv最热NLP大模型论文:Large Language Models Are Neurosymbolic Reasoners

大语言模型化身符号逻辑大师&#xff0c;AAAI 2024见证文本游戏新纪元 引言&#xff1a;文本游戏中的符号推理挑战 在人工智能的众多应用场景中&#xff0c;符号推理能力的重要性不言而喻。符号推理涉及对符号和逻辑规则的理解与应用&#xff0c;这对于处理现实世界中的符号性…

如何实现无公网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…