76.网游逆向分析与插件开发-背包的获取-背包地址的逆向分析

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

上一个内容:75.网游逆向分析与插件开发-背包的获取-背包结构与指针的逆向分析-CSDN博客

通过上一个内容,知道了背包的结构,它是一个指针数组,它里面还记录的背包有多少格。

然后打开x96dbg,来到上一个内容分析过的0x787022位置

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

然后这个函数的一个参数与ecx的情况,ecx是0x217D6034,然后现在的代码位置是0x9518F0,这个位置是使用药品来的

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

是一个虚函数

然后这时使用药品没有 0x217D6034,所以0x217D6034这个值是被计算出来的,然后就只能一行一行的分析在执行到 0x9518F0 这一行之前的代码,然后按f7进入函数

然后进入到下图函数,一路f8,注意观察 0x217D6034 这个值第一次出现的位置

在下图位置第一次发现 0x217D6034 这个值,它是在0x950A88位置调用的函数的返回值

现在游戏因为长时间不动掉线了,所以后续图中的物品指针地址与上方图中的地址会不一样

然后因为记录的地址,所在在0x950A88位置开始分析,然后看下图红框里的四行代码,第一行mov ecx, dword ptr ds:[0x1256E3C],这个0x1256E3C之前在找弹框的时候找到过,然后接着调用了0x1256E3C类里的成员函数,也就是call sro_client.866140这个函数,然后 sro_client.866140 这个函数有返回值,为什么说它有返回值,因为它的下一行是mov ecx,eax,eax跟在一个call指令后面一般就是函数的返回值,这个是一个典型的返回值写法,然后下一行是call sro_client.7722C0函数,这几行代码的意思就是,从 0x1256E3C 成员函数 sro_client.866140 里得到一个对象,然后调用这个对象里的sro_client.7722C0成员函数,然后通过 sro_client.7722C0 函数得到了物品指针,所以sro_client.866140这个函数里有背包找物品的算法

然后sro_client.866140函数很短,如下图红框里的代码,有两个参数1和19,然后ecx+370这样的操作多半与继承有关,然后调用了sro_client.98F3A0函数

然后结合上一个内容中分析的,它物品里的偏移3A0位置是第一个物品指针,然后偏移加3A4位置是最后一个物品的指针,然后就可以认定下图的几行代码就是为了获取背包基址的

然后接下来看看,能根据背包基址得到些什么东西

现在的基址是,0x1941B294

首先说明一点,这里我是使用的游戏中背包里第一个物品,也就是使用的下图红框位置的物品,所以才说0x1941B294它是背包的基址

然后打开 Cheat Engine 分析数据,首先看看 0x1941B294 与金钱有没有关系

然后下图红框里的地址就很可疑,它与 0x1941B294 太相近了,很明显是一块内存地址,也就是一个结构体里的数据,然后算一下金钱的迁移 0x1941B60C - 0x1941B294 = 0x378

然后这里记入一下获取背包基址的关键点 0x950A88 地址

然后理一下分析过程,最早是通过鼠标放上去的字符串的方式去找物品地址,很麻烦然后就放弃了,这里可以看上一个内容里的分析记录,然后现在换一种思路,之前有分析到有物品的id也就是5912、5913等这个数字,然后它肯定会有访问它的,然后接下来通过它的id来找这个东西,看看好不好找,然后通过上方找到的背包基址得到物品id

这里游戏又掉线了,重新登录了,下方图中的地址变了

重新找物品id

然后查看有什么访问了它,有两个地方

大体看一眼代码

下图这个代码,相似是一个get函数

记录现在寄存器的数据,方便在x96dbg里做条件断点:ecx是 0x244870C8,然后地址分别是0x995800与0x995830

然后关闭 Cheat Engine 打开x96dbg,如果不关闭 Cheat Engine,x96dbg没法附加

然后先看 0x995830,它是一个长断的函数,需要做条件断点

然后看到下方有个390

然后在看上一个内容通过访问去找的分析记录,就能想到可能根据物品id的访问去找也没法玩

然后一直按ctrl+f9再按f8就会发现它会一直循环到下图中的代码里,所以通过访问去找还是很麻烦

所以有时候通过写入的方式比通过访问的方式去找要好,要容易许多,这种有涉及到ui访问的数据,然后还通过访问去找它的机制,会麻烦,ui的干扰性很大,而写入的干扰性就会小,但如果跟怪物共用的数据,还是去使用写入的方式,那就又会是一个很麻烦的东西

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

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

相关文章

web练习题题解

1.Maven是用于构建的工具,使用前需要配置(C )文件,在里边添加阿里云的镜像便于自动下载相关的依赖jar包。 A.web.xml B.pom.xml C.Settings.xml 2.(B )是一个用 Java 编写的程序,是一种实现了…

Go语言基础快速上手

1、Go语言关键字 2、Go数据类型 3、特殊的操作 3.1、iota关键字 Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。 const (a iota // 0b // 1c 100 // 100d // 100 (与上一…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

基于 UniAPP 社区论坛项目多端开发实战

社区论坛项目多端开发实战 基于 UniAPP 社区论坛项目多端开发实战一、项目准备1.1 ThinkSNS 简介及相关文档1.2 使用 UniAPP 构建项目1.3 构建项目文件结构1.4 配置页面 TabBar 导航1.5 使用 npm 引入 uView UI 插件库 二、首页功能实现2.1 首页 header 广告位轮播图功能实现2.…

Python并发与多线程:祥细的说一下GIL线程锁

在Python中&#xff0c;有一个全局解释器锁&#xff08;Global Interpreter Lock&#xff0c;GIL&#xff09;&#xff0c;它是为了保证在多线程环境下&#xff0c;每个线程都能正确地执行而引入的。 GIL是一个互斥锁&#xff0c;它要求在同一时刻只能有一个线程执行Python字节…

小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock

121 Best Time to Buy and Sell Stock (买卖股票的最佳时机) 你好&#xff0c;2024年的第一个月&#xff0c;又是秋风萧瑟天气凉&#xff0c;草木摇落露为霜。.。。在这个特殊的时代&#xff0c;作为我们普通的一个打工人&#xff0c;我们用这道题&#xff0c;开启对这个不符合…

2023全球边缘计算大会深圳站:核心内容与学习收获(附大会核心PPT下载)

边缘计算作为当今IT领域的热门话题&#xff0c;已经引起了全球范围内的广泛关注。本次大会汇聚了众多业界精英&#xff0c;共同探讨边缘计算的发展趋势、技术应用与创新实践。本文将围绕大会的核心内容展开讨论&#xff0c;并分析参会者从中能够学到的东西。 一、边缘计算的发…

C++PythonC# 三语言OpenCV从零开发(2):教程选择

文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程&#xff1a; OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …

【Java】JDBC的使用

JDBC package jdbc_demo;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class jdbc {public static void main(String[] args)throws Exception {//1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.获取…

vue报错 ‘超出最大堆栈大小‘

当Vue应用程序报错"超出最大堆栈大小"时&#xff0c;通常是由于递归调用导致的无限循环或过深的函数调用堆栈。 要解决这个问题&#xff0c;你可以尝试以下几种方法&#xff1a; 检查是否存在无限递归&#xff1a;检查你的代码中是否存在无限递归调用。递归调用是指…

本周Github上有趣的11个项目

本周Github上有趣的项目&#xff1a; 1、AI 网关 速度极快的 AI 网关。通过 1 个快速且友好的 API 升读 100 多个大模型。 Portkey 的 AI 网关是您的应用程序和托管 LLM 之间的接口。它通过统一的 API 简化了对 OpenAI、Anthropic、Mistral、LLama2、Anyscale、Google Gemini…

计算机中如何存储数字、怎么运算、以及越界了怎么办

前言 日常开发工作中&#xff0c;很难用到二进制运算&#xff0c;编程语言已经帮我们做好处理了&#xff0c;除非研究的就是底层技术&#xff0c;比如硬件开发&#xff0c;这是避不过去的&#xff0c;但是你如果还想深入研究一番&#xff0c;本篇论文就值的你看。 问题 在开…

【开源】基于JAVA语言的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

【开发掉坑】go 中 interface 的 nil 判断

今天介绍下 go 中的 interface(any) 的 nil 判断&#xff0c;项目中遇到的一个小问题&#xff0c;知识遗忘了&#xff0c;再做个记录。 前言 最近在合作开发项目的过程中&#xff0c;发现小伙伴写了一段代码&#xff0c;示意代码如下&#xff1a; package mainimport("…

逸学Docker【java工程师基础】3.4Docker安装redis

1.拉取redis docker pull redis 2.选择一个合适的redis 版本的配置文件 Redis configuration | Redis 或者这个 链接&#xff1a;https://pan.baidu.com/s/1RRdtgec4xBAgQghlhm0x1Q 提取码&#xff1a;ycyc 在1044行修改密码 3.提前在服务器建立 /data/redis 文件夹&…

【华为 ICT HCIA eNSP 习题汇总】——题目集1

1、&#xff08;多选&#xff09;根据下面所示的命令输出&#xff0c;下列描述中正确的是&#xff1f; A、GigabitEthernet0/0/1 允许VLAN1通过 B、GigabitEthernet0/0/1 不允许VLAN1通过 C、如果要把 GigabitEthernet0/0/1 变为 Access 端口&#xff0c;首先 需要使用命令“un…

2023 年,我患上了 AI 焦虑症!

【作者有话说】2023 年对我来说是神奇的一年&#xff0c;我意外地从一个程序员变成了一个 AI 资讯届的“网红”&#xff0c;到年底时我在 X 平台的阅读量超过 1 亿&#xff0c;微博上的阅读量则超过 10 亿&#xff0c;很多人通过我的微博或者 X 了解最新的 AI 资讯、教程和 Pro…

SpringMVC下半篇之整合ssm

4.ssm整合 4.1.创建表 CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,money double DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;4.2.创建工程 4.3.pom.xml <?xml version"1.0" encoding&…

分布式定时任务系列8:XXL-job源码分析之远程调用

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 分布式定时任务系列5&#xff1a;XXL-job中blockingQueue的应用 …

蓝桥杯备战 每日一题 (4)

题目地址 首先我们要有一个知识储备 1 加法&#xff1a;(ab)%m(a%mb%m)%m 2 减法&#xff1a;(a-b)%m(a%m-b%m)%m 3 乘法&#xff1a;a*b%m(a%m)*(b%m)%m 我们可以每次计算就可以取余一次&#xff0c;这样就保证了最后取余的结果和一起相加再取余的结果一样 然后这个题目要怎…