75.网游逆向分析与插件开发-背包的获取-背包结构与指针的逆向分析

news2024/9/24 5:31:54

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

上一个内容:物品名称与物品编号的映射关系分析-CSDN博客

通过这个内容以及可以通过物品的id得到一个名字,知道了它的算法,它的算法自己封装好了,我们直接用就好,接下来要用到物品的指针了,所以接下来分析物品的指针怎样得到,某一个物品的指针怎样得到,然后上一个内容中分析出,它是通过调用物品类里的成员看出得到的,这个物品对象地址是通过ebx,所以接下来,看看ebx从哪来的。

首先打开x96dbg,来到下图位置(0x739915)

然后往上滑看到:ebx的值是从esi+390位置得到的,也就是说是通过传参进来的

看断点:

调用物品类成员函数位置,可以看出它与 esi+390位置得到的 内容一样,然后esi是通过ecx来到,所以它是通过上一层得到的,所以接下来去上一层,

ctrl+f9再按f8,来到上一层

上一层里的ecx,是0x22A33490

与获取名字的函数里的esi一样,然后在反上一层看看(从0x754348位置反不是下图中的位置)

然后就来到了,下图位置

然后在断点:还是0x22A33490,然后反上一层看看,现在追了这么多层还没找到,不是一件好事,这说明这个体系比较复杂

然后ctrl+f9,再按f8,来到下图位置

然后它的ecx还是没变,然后继续往上追

然后ctrl+f9,再按f8,来到下图位置

它的ecx也还是没变,然后继续往上追

然后ctrl+f9,再按f8,来到下图位置,然后游戏中鼠标一动它就会断点住,它应该是跟界面有关系,也就是说最终得到的是0x72FC98位置的函数,所以只能在 0x72FC98位置的函数里获取,然后不分析它了,但凡涉及到ui的就是很底层的代码了,这么底层的代码去找的话很累,所以不用它,不找这个麻烦,然后继续往下看

接下来找一个跟ui没关系的地方,上方式通过,鼠标放到物品上然后弹框显示内容的代码找的,所以追到ui的逻辑里面没有什么问题,然后物品只有人物独有怪物没有,所以理论上讲背包它一定是有基址的,或者有一个很方便的基址管理方法的东西,接下来通过数量的写入来找,也就是通过物品数量的写入来追,第一物品是独立的,符合追基址的假设,第二物品既然是独立的那么写入也会是相对独立的,访问会涉及到ui,但是写入就不涉及ui的事了,所以通过写入可以把ui给毙掉,然后写入它肯定会根据背包的基址计算出物品的位置,然后再改,这样我们可以获得计算物品位置的代码,也顺便知道了背包是一个链表结构还是一个数组结构了

然后关闭x96dbg,重启游戏,打开 Cheat Engine 找写入地址,地址是0x5BAF36

然后打开x96dbg,来到 0x5BAF36

然后使用物品发现它会执行两次,两次ebx的值分别是通过 Cheat Engine找到的那俩值

然后反到上一层找ebx的值在哪来的

然后下图红框位置是一个典型的数组结构,这里就有背包的意思了

然后现在确定我们要找的ecx来自于,一个数组,如上图红框位置,然后ebx是物品指针,然后ebx来自于ecx+edi*4位置那么ecx就是背包基址,看下图使用背包第一个物品时,edi是0,ecx是一个指针,ebx是物品指针,然后继续往下看

使用第二个物品是,edi是1了,也就是edi是物品在背包里的序号,然后接下来就找ecx的值从哪来的

然后ecx的值是从下图红框位置来的,然后首先esi+3A0位置是背包里第一个物品,然后下方有一个test ecx,ecx,然后紧接着一个je指令,也就是如果ecx是0它就跳转,跳转到的函数是一个报异常的函数,然后je指令的下一行是mov eax, dword ptr ds:[esi+3A4],然后sub eax,ecx,这一句的意思就是,现在假设eax的值是10,然后ecx的值是0,也就是10-0结果是0,然后有sar eax,2,sar是右移运算符,也就是eax/4的意思(c++代码是eax>>2),这样意思是计算数组长,指针是4字节所以除以4得到数组长度,然后cmp edi,eax,edi是使用的物品序号然后物品序号跟eax作比较,然后后面跟着一个jb指令,jb指令是小于就跳转,也就是说判断使用的物品下标是否超出了背包大小,如果超出了就报异常,然后edi的值我们不需要知道,然后现在计算背包大小的方式是背包结构偏移3A4与3A0位置的值相减,然后除以4的结果

背包有32个

eax的值也是32

然后通过下图可以看出背包是一个指针数组,也就是数组里面放的是指针,这个指针是指向的物品结构体

然后现在知道了怎样计算背包的大小,背包的结构是指针数组,接下来就剩分析背包的基址了

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

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

相关文章

如何在CentOS 7 中基于OpenSSL 1.0 搭建Python 3.0 环境

1、下载 通过https://www.python.org/ftp/python/下载Python安装包,这里下载Python-3.10.9.tgz; 2、上传 借助MobaXterm等工具将Python安装包上传至/opt目录; 3、解压 将JDK压缩文件解压至/opt目录:tar -xvf /opt/Python-3.1…

从 Context 看 Go 设计模式:接口、封装和并发控制

文章目录 Context 的基本结构Context 的实现和传递机制为什么 Context 不直接传递指针案例:DataStore结论 在 Go 语言中, context 包是并发编程的核心,用于传递取消信号和请求范围的值。但其传值机制,特别是为什么不通过指针传递…

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0 下载qwt最新版本,用git工具 git clone下载源码 git clone https://git.code.sf.net/p/qwt/git qwt-git 或者使用我下载的 qwt 2.6.0 链接:https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwdpq1o 提取码:pq1o 下载…

2024最新Java高频面试题总结(附答案PDF)春招面试必备!

《Java面试全解析》1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃了阿里钉钉团队的 offer 回到了西安。 从…

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时,发现有一个拼图demo,介绍拖…

小白进阶之字符串处理

#include <cstdio> #include <cstring> int main() {char str[105];int count0,len0;scanf("%s",str);//输入字符lenstrlen(str);//求字符长for(int i0;i<len;i){if(str[i]A)//匹配计数count;}printf("%d",count); }#include <cstdio>…

【算法实验5】

实验5-1 最短下降路径问题 【样例输入】 3 2 1 3 6 5 4 7 8 9 【样例输出】 13 #include<bits/stdc.h> using namespace std; const int N 105; int n; int g[N][N]; int f[N][N]; int res 1e95; int main() {cin>>n;for(int i 1; i < n; i )for(int …

2.C语言——控制语句

控制语句 1.分支语句/判断语句if 语句if...else 语句if...else if...else语句 switch语句 2.循环语句 while 语句 do...while 语句 for 语句 3.转向语句 break continue go to 1.分支语句/判断语句 if 语句 if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } …

禅道-项目从0到1的过程18开源版本使用

目录 一、禅道的下载安装12版本开源版 1.1、禅道 在计算机网络行业&#xff0c;禅道是一种开源的项目管理软件。它提供了敏捷开发、测试管理、bug跟踪、需求管理、团队协作等功能&#xff0c;适用于敏捷开发团队和软件开发项目管理。禅道软件旨在帮助团队更好地管理项目、提高…

读元宇宙改变一切笔记10_支付方式

1. 元宇宙中的经济 1.1. 元宇宙被设想为一个平行世界&#xff0c;人们将在那里花大量的时间工作和生活 1.1.1. 元宇宙的实现程度部分取决于它是否建立在一个繁荣的经济体系之上 1.2. 元宇宙中的经济将大体遵循现实世界的经济模式 1.2.1. 激烈的竞争、大量营利性企业的存在、…

yolov8的目标检测、实例分割、关节点估计的原理解析

1 YOLO时间线 这里简单列下yolo的发展时间线&#xff0c;对每个版本的提出有个时间概念。 2 yolov8 的简介 工程链接&#xff1a;https://github.com/ultralytics/ultralytics 2.1 yolov8的特点 采用了anchor free方式&#xff0c;去除了先验设置可能不佳带来的影响借鉴General…

树莓派也可以部署基于YOLO的目标检测

YOLO目标检测结果 在本文的第一部分中&#xff0c;我测试了YOLO&#xff08;You Only Look Once&#xff09;这一流行的目标检测库的“复古”版本。只使用OpenCV运行深度学习模型&#xff0c;而不使用“沉重”的框架如PyTorch或Keras&#xff0c;对于低功耗设备来说是有前途的&…

Python | 六、哈希表 Hash Table(列表、集合、映射)

哈希表基础 哈希表是一类数据结构&#xff08;哈希表包含数组、集合和映射&#xff0c;和前两篇文章叙述的字符串、链表平级&#xff09;哈希表概念&#xff1a;类似于Python里的字典类型&#xff0c;哈希表把关键码key值通过哈希函数来和哈希表上的索引对应起来&#xff0c;之…

DNA序列修正*

题目 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();char[] sq1 sc.next().toCharArray();sc.nextLine(…

ROS第 10 课 服务数据的自定义与使用

文章目录 第 10 课 服务数据的自定义与使用1.自定义服务数据2.服务数据的使用2.1 创建服务器和客户端代码2.2 运行服务器和客户端节点 第 10 课 服务数据的自定义与使用 1.自定义服务数据 注意&#xff1a;在自定义服务数据之前&#xff0c;需要先创建工作空间和功能包&#x…

【Linux第二课-权限】操作系统、Linux用户、Linux权限、Linux文件类型、粘滞位

目录 操作系统shell外壳为什么有shell外壳shell外壳是什么shell外壳工作原理 Linux用户root用户与非root用户root用户与普通用户的切换普通用户 --> root用户root用户 --> 普通用户普通用户 --> 普通用户对一条指令提升为root权限进行执行 Linux权限Linux中的权限角色…

STM32(--001) Win10、Win11 上的驱动安装说明

一、USB线插到 CMSIS-DAP 接口上&#xff0c;将自动识别到两个设备 ① CMSIS-DAP&#xff1a;用于烧录代码、在线硬件仿真; 在Keil里烧录&#xff0c;无需通过FlyMCU; ② USB转TTL&#xff1a;用于开发板与电脑间串口通信 &#xff0c;即USART1, TX-PA9、RX-PA10; 接口备注&a…

Java 流程控制 - 分支、循环

顺序控制 程序从上到下逐行执行&#xff0c;中间没有任何判断和跳转。 public class Test{//正确形式int a 1;int b a;// 错误形式int c d 1;int d 2; }块作用域 块&#xff08;即复合语句&#xff09;是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的…

JVM性能调优-垃圾收集器G1详解

目录 G1收集器(-XX:UseG1GC) G1垃圾收集分类 YoungGC MixedGC Full GC G1收集器参数设置 G1垃圾收集器优化建议 什么场景适合使用G1 G1收集器(-XX:UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足…

redis未授权访问全漏洞复现

redis未授权访问全漏洞复现 Redis 有关的漏洞具有明显的时间分段性&#xff0c;在15年11月之前&#xff0c;主要是未授权导致的数据泄露&#xff0c;获得一些账号密码。另外还可以 DoS&#xff08;参考&#xff1a;Sangfor VMP redis unauthorized access vulnerability&#…