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

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

内容参考于:易道云信息技术研究院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.lryc.cn/news/308719.html

相关文章:

  • Redis冲冲冲——事务支持,AOF和RDB持久化
  • 路由菜单路径匹配方法
  • 设计模式浅析(九) ·模板方法模式
  • 无用工作、UBI与AI
  • 【监控】grafana图表使用快速上手
  • Django常用命令
  • 【center-loss 中心损失函数】 原理及程序解释(更新中)
  • 什么是 HTTPS 证书?作用是什么?
  • 为什么软考报名人数越来越多?
  • 【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024)
  • html2canvas 将DOM节点转成图片
  • 【多线程】常见锁策略详解(面试常考题型)
  • Python列表操作函数
  • Qt注册类对象单例与单类型区别
  • Rocky Linux 运维工具yum
  • linux下的ollama
  • YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)
  • html基础操练和进阶修炼宝典
  • 从Mysql 数据库删除重复记录只保留其中一条(删除id最小的一条)
  • 从http到websocket
  • UE5 C++ Widget练习 Button 和 ProgressBar创建血条
  • 抖店无货源违规频发,不能入驻?这个是真的吗?
  • HarmonyOS—开发云数据库
  • mysql查询某个数据库的数量有多少GB
  • table展示子级踩坑
  • xss过waf的小姿势
  • 【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;
  • 可移植性(兼容性)测试指南
  • 软件更新快讯-Obsidian更新-1.5.8 linux Appimage直装
  • Android Gradle开发与应用 (二) : Groovy基础语法