8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

news/发布时间2024/6/17 15:37:17

内容参考于:易道云信息技术研究院VIP课

上一个内容:通过逆向分析确定游戏明文接收数据过程

  码云地址(master 分支):https://gitee.com/dye_your_fingers/titan

码云版本号:bcf7559184863febdcad819e48aaacad9f25d633

代码下载地址,在 titan 目录下,文件名为:titan-模游戏底层功能对接类GameProc的实现.zip

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg

提取码:q9n5

--来自百度网盘超级会员V4的分享

HOOK引擎,文件名为:黑兔sdk.zip

链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw

提取码:78h8

--来自百度网盘超级会员V4的分享

以 模拟游戏登陆器启动游戏并且完成注入 它的代码为基础进行修改

首先回忆一下connect的位置(0x10617010),来到下图位置打断点

然后登陆游戏它就卡住了

首先它是一个虚函数,也就是继承来的函数,带有继承的类的特点,下图红框位置应该是一个类中的数据

但是虚函数的头部,也就是下图红框位置,它是一个内存地址,这个内存地址指向了一个表(这个表指是数组),这个表里是继承来的数据(函数)

来到0x1062F2FC(由于是小端序存储所以跟内存是反着的)位置,查看内存,可以看出全是内存地址,这些内存地址就全是函数

看下图红框位置,偏移34位置正好是游戏要调用的函数地址

然后也就是说,我只要把这个虚函数表(简称虚表)的值改成我们的函数,它就可以跳转到我们的函数里,改成什么就跳什么,然后还有一个东西,先把这里的断点取消掉(确保所有断点全部取消),按ctrl+f9,然后按f8,来到上一层,下图红框位置经过使用条件断点,发现调用connect函数的类地址是它的返回值,但是它也是一个虚函数

然后通过条件断点,断下来查看edx

然后发现edx的值在edx执行过程中被销毁了(也就是被更改了)

这种的如果想要分析它里面是什么(分析edx里的代码是什么),就要hook掉它,并且不断记录它的栈和调用的情况,然后通过返回值判断是否等于调用connect类的地址(我们想要的结果),当等于时,就能根据栈和调用情况得出有用的内存地址了,然后再去追

然后下图红框位置是调用connect函数的上一层,它是一个函数指针,下方的写法是函数指针的写法,所以它是会变的

然后再来分析调用connect位置,也就是下图断点位置

按f7进入函数

它的返回值是ret 8,所以它是俩四字节的参数,然后xor al, al,这个al寄存器是8比特也就是1字节,所以它的返回值是bool类型

然后x96dbg也给我们分析出了函数名

所以还原的函数:bool GameWinSock::connect(char* ip, int port)

项目文件:删除无用文件

删除方式:右击选项移除

然后点删除:

现在的文件:

新加GameProc.h文件:

#pragma once
#include <htdHook2.h>// GameProc类 负责游戏功能与模块的对接,也就是HOOK、获取游戏数据这种操作
class GameProc
{htd::hook::htdHook2* hooker;
public:GameProc();// 初始化 hooker/**/void LoadBase(); void Init();// 初始化void InitInterface(); // 接口初始化
};

新加GameProc.cpp文件:

#include "pch.h"
#include "GameProc.h"GameProc::GameProc()
{hooker = new htd::hook::htdHook2();Init();InitInterface();
}void GameProc::LoadBase()
{}void GameProc::Init()
{
}void GameProc::InitInterface()
{LoadBase();
}

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

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

相关文章

PostgreSQL如何使用UUID

离线安装时&#xff0c;一般有四个包&#xff0c;都安装的话&#xff0c;只需要开启uuid的使用即可&#xff0c;如果工具包(即 postgresql11-contrib&#xff09;没有安装的话&#xff0c;需要单独安装一次&#xff0c;再进行开启。 开启UUID方法 下面介绍一下如何开启&#…

Flink Sql 自定义实现 kudu connector

Flink Sql 自定义实现 kudu connector 原理实现 众所周知啊&#xff0c;flinksql 中与其他的存储做数据的传输连接的时候&#xff0c;是需要有独特的连接器的&#xff0c;mysql redis es hbase kudu &#xff0c;不同的存储他们自己使用的协议与操作都不一样&#xff0c;所以需…

每日五道java面试题之spring篇(四)

目录&#xff1a; 第一题 Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么&#xff1f;第二题. Spring由哪些模块组成&#xff1f;第三题. 详细讲解一下核心容器&#xff08;spring context应用上下文) 模块第四题.Spring框架中有哪些不同类型的事件第五题.…

什么是以太坊

以太坊&#xff08;Ethereum&#xff09;&#xff1a;开启智能合约时代的区块链平台 介绍 以太坊&#xff08;Ethereum&#xff09;是一种开源区块链平台&#xff0c;由Vitalik Buterin于2015年创建。它不仅支持数字货币&#xff0c;还提供了一种强大的工具&#xff0c;使开发…

黑色金属冶炼5G智能工厂数字孪生可视化管控系统,推进金属冶炼行业数字化转型

黑色金属冶炼5G智能工厂数字孪生可视化管控系统&#xff0c;推进金属冶炼行业数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的必然趋势。金属冶炼行业作为传统工业的重要组成部分&#xff0c;也面临着数字化转型的挑战和机遇。为了推进金属冶炼行…

vue-router 三级路由,路由跳转页面异常白屏或404,或刷新三级路由页面后一级和二级路由菜单丢失

问题描述 情况1. vue-router 定义三级路由&#xff0c;路由跳转了&#xff0c;页面404或者白屏情况2. 点击菜单三级路由后&#xff0c;刷新页面后一级和二级路由菜单丢失 解决方案&#xff1a; 某些时候是因为二级和三级的路由共用router-view&#xff0c;可以使用router-vi…

每日五道java面试题之spring篇(六)

目录&#xff1a; 第一题 ApplicationContext通常的实现是什么&#xff1f;第二题 什么是Spring的依赖注入&#xff1f;第三题 依赖注入的基本原则第四题 依赖注入有什么优势&#xff1f;第五题 有哪些不同类型的依赖注入实现方式&#xff1f; 第一题 ApplicationContext通常的…

算法-搜索二维矩阵 II

1、题目来源 240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#x…

【Java程序员面试专栏 算法思维】三 高频面试算法题:搜索算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊搜索算法,以岛屿问题为切入点练习,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间岛屿数量网格搜索分别向上下左右四个方向探索,遇到海…

MySQL学习笔记3: MySQL数据库基础

目录 前言目标数据库操作&#xff08;针对database 的操作&#xff09;1. 创建数据库 create database 数据库名;2. 查看数据库 show databases;3. 选中数据库 use 数据库名;4. 删除数据库 drop database 数据库名; mysql中支持的数据类型1. 数值类型: NUMERIC(M,D)2. 字符串类…

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机…

初识51单片机

##江科大51单片机学习 什么是单片机&#xff1f;&#xff1f;&#xff1f; 单片机&#xff0c;英文名&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff08;tips&#xff1a;有人会简称它为CPU&#xff0c;但不是如此&#xff0c;CPU其实被集成在MCU中&#xff…

设计模式学习笔记 - 面向对象 - 8.实践:贫血模型和充血模型的原理及实践

1.Web开发常用的贫血MVC架构违背OOP吗&#xff1f; 前面我们依据讲过了面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格&#xff0c;基于接口而非实现编程和多用组合少用继承设计思想。接下来&#xff0c;通过实战来学习如何将这些理论应用到实际的开发中。 大部…

Jenkins 中部署Nodejs插件并使用,并构建前端项目(3)

遇到多个版本nodeJS需要构建的时候 1、第一种就是一个配置安装&#xff0c;然后进行选中配置 2、第二种就是插件&#xff1a;nvm-wrapper&#xff0c;我们还是选用NodeJS插件&#xff1a; &#xff08;1&#xff09;可以加载任意npmrc文件&#xff1b; &#xff08;2&#x…

docker安装es与kibana

docker安装es与kibana docker pull elasticsearch:7.11.2 docker network create esnet docker run --name es2 -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.typesingle-node" -d elasticsearch:7.11.2 docker run -d -p 5601:5601 --network e…

Facebook群控:利用代理IP克服多账号关联

拥有多个 Facebook 帐户对于区分您的个人和企业在线形象或维护客户页面非常有用。然而&#xff0c;Facebook 的服务条款正式限制用户只能使用一个个人帐户&#xff0c;想要多账号运营&#xff0c;下面的干货必须看&#xff01; 一、Facebook群控是什么&#xff1f; Facebook群…

LangChain支持哔哩哔哩视频总结

是基于LangChain框架下的开发&#xff0c;所以最开始请先 pip install Langchain pip install bilibili-api-python 技术要点&#xff1a; 使用Langchain框架自带的Document loaders 修改BiliBiliLoader的源码&#xff0c;自带的并不支持当前b站的视频加载 源码文件修改&a…

[TCP] TCP/IP 基础知识词典(2)

我想统计一下&#xff0c;TCP/IP 尤其是TCP协议&#xff0c;能搜到的常见的问题&#xff0c;整理起来&#xff0c;关键词添加在目录中&#xff0c;便于以后查阅。 目前预计整理共3篇&#xff1a; [TCP] TCP/IP 基础知识问答 &#xff1a;基础知识 [TCP] TCP/IP 基础知识问答&…

《高质量的C/C++编程规范》学习

目录 一、编程规范基础知识 1、头文件 2、程序的板式风格 3、命名规则 二、表达式和基本语句 1、运算符的优先级 2、复合表达式 3、if语句 4、循环语句的效率 5、for循环语句 6、switch语句 三、常量 1、#define和const比较 2、常量定义规则 四、函数设计 1、参…

签三方协议?大家一定要注意的问题!

签三方协议&#xff1f;大家一定要注意的问题&#xff01; 一、三方协议是什么&#xff1f;二、签三方协议要注意什么&#xff1f;1、待遇问题2、发展机会3、违约金 三、三方协议的一些疑问&#xff1f;1、三方协议和劳动合同的区别&#xff1f;2、签了三方会失去应届生身份嘛&…
推荐文章