37.x86游戏实战-XXX遍历怪物数组
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:36.x86游戏实战-C++代码实现锁血
上一个内容里,把游戏修改血量的函数封装到c++里了,本次找周围怪物,本来想通过打怪物,然后触发 0x8174E0也就是修改血量的函数断点去追,发现不好找,有很多vm代码,0x8174E0函数的ecx一直都是玩家角色的地址,CTRL+F9也一直会反倒下图位置
![]()
然后换了一张有怪物的地图,发现修改血量的函数ecx的值有变化了,它不止有玩家角色的地址了,还有怪物的地址,之前找的玩家角色名字在偏移0x258位置一般怪物NPC也都会是这个位置,如下图,怪物地址
![]()
怪物名字
![]()
然后在ecx是怪物的时候按CTRL+F9,返回的位置也不一样了
![]()
然后给数据(ecx的数据,把ecx到数据复制一下在内存区CTRL+G跳转过去)下一个硬件访问断点,如下图
![]()
然后它来到了下图位置(它可能会断在别的位置,根据现在要找到东西只要附近有下图红框的写法就要敏感起来,因为怪物列表就是个数组,数组到访问算法就是下图红框到写法),下图红框是一个数组访问的算法,这就可能是怪物列表
![]()
然后看eax的值
![]()
这时call的地址
![]()
然后游戏崩溃了下方的地址与上方不一样了,崩溃是正常的,重新再来就好了,所以分析的时候要养成记录的好习惯
然后这个eax一般就会是怪物列表的基址了
![]()
接下来找eax的值哪来的,最终发现eax的值来自于esi+10
![]()
怎么确认eax的值来自于esi+10的?在下方红框位置打断点
![]()
然后按F8,来到下图红框位置观察eax的值与上方红框时的值是否一样,如果一样就说明eax的值来自于esi+10
![]()
现在eax的值0x5E227688
![]()
然后经过观察esi的值是在函数头部赋值到,函数头部有一句mov esi,ecx,ecx的值来自于上一次,所以esi的值也来自于上一层,然后按CTRL+F9来到下图位置,看到ecx的值又来自于esi,然后记录现在得到的取值算法[esi+10]是怪兽列表
![]()
然后经过观察esi的值还是来自于上一层
![]()
然后CTRL+F9往上反,来到了下图位置
![]()
然后打断点观察ecx寄存器
![]()
然后[ecx+10]是怪物列表地址,也就是下图红框是ecx到值也就是0x5E7B5AF0+0x10是怪物地址
![]()
ecx的值来自于esi+88,通过观察代码发现esi的值来自于ecx,ecx看着又是来自于上一层,现在怪物列表的计算是[[esi+0x88]+0x10],所以在下图红框位置打断点接着CTRL+F9
![]()
然后到了下图位置,现在的怪物列表计算 [[[esi+0x14]+0x88]+0x10]
![]()
然后经过观察ecx的值来自于esi,通过观察代码(代码很长往上滑了有一会)esi的值来自ecx,ecx来自于上一层,所以在下图位置打断点,继续CTRL+F9
![]()
然后来到了一个更复杂的位置
![]()
这里是[[[[0x0B000000+3*4+0xA8]+0x14]+0x88]+0x10]是怪物列表,然后eax的值通过断点看出一直是3是固定的
![]()
esi的值好像还是来自于上一层,在下图红框位置打断点,按CTRL+F9
![]()
然后到了下图位置,然后这里就又崩溃了
![]()
重新启动游戏并用OD进行附加,直接来到0x7554EB位置,再仔细观察一下,然后发现esi的值来自于ebp-0x47C位置
![]()
然后再找ebp,然后看到ebp-0x47C的值来自于ecx
![]()
然后还是要来到上一层看看ecx在哪来的,然后看到ecx的值来自于eax,eax前面有一个call,大概率eax的值是0x006FC760函数的返回值
![]()
进入0x006FC760函数里,进来之后可以看到有很多retn,但是可以看到下图绿框是一个写死的值,如果写死的值不行那在断点看看eax在那个ren返回的,然后在分析,现在把这个值带入公式,看看能不能找到怪物列表,[[[[[0x1A5E258]+3*4+0xA8]+0x14]+0x88]+0x10]
![]()
然后在下图红框位置写 dd [[[[[0x1A5E258]+3*4+0xA8]+0x14]+0x88]+0x10],写完之后按回车,如下图
![]()
然后会跳到下图的内容,全是内存地址,这是一个数组
![]()
然后之前找的玩家角色名是0x258位置,所以先随便找几个数据窗口跟随
![]()
然后鼠标双击下图红框位置
![]()
然后找0x258,如下图红框,显示的是0
![]()
然后再次使用下图红框的功能,换一个数据窗口跟随
![]()
这次0x258位置就有数据了
![]()
然后鼠标右击选择数据窗口中跟随
![]()
然后鼠标右击选择Unicode
![]()
然后就有怪物名字了
![]()
然后换成Unicode之后怎么改回去?鼠标右击选择地址就可以了
![]()
怪物列表基址就找到了,在其它游戏可能不会跟上方一样这么顺利,它可能追着追着就会跟乱,一个值在一个函数中mov来mov去看的眼花,这时可以尝试放弃,可以找一个游戏中只要执行了就有基址的位置(能追到眼花这期间肯定会遇到一个常断的函数并且某个寄存器的值是想要的地址),给hook掉,通过hook的方式来得到基址

相关文章:
37.x86游戏实战-XXX遍历怪物数组
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...
go语言中map为什么不会自动初始化?
go语言中map为什么不会自动初始化? 在Go语言中,map类型不会自动初始化的原因在于其设计哲学和类型系统。以下是具体原因: 零值设计:Go语言中的每种类型都有一个零值,例如整型的零值是0,布尔型的零值是fals…...
大数据面试SQL(一):合并日期重叠的活动
文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期,每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动,…...
stm32应用、项目、调试
主要记录实际使用中的一些注意点。 1.LCD 1.LCD1602 电路图: 看手册:电源和背光可以使用5v或者3.3v,数据和控制引脚直接和单片机引脚连接即可。 单片机型号:stm32c031c6t6 可以直接使用推完输出连接D0--D7,RS,EN,RW引脚&#…...
WEB渗透-未授权访问篇
WEB渗透未授权访问篇-Redis-CSDN博客 activemq 默认端口8161,默认账户密码admin/admin http://1.1.1.1:8161/admin/connections.jsp PUT /fileserver/%2F%2F2%083.jsp HTTP/1.0 Content-Length: 27 Host: 1.1.1.1:8161 Connection: Close Authorization: Basic YW…...
x86_64、AArch64、ARM32、LoongArch64、RISC-V
以下是对 x86_64、AArch64、ARM32、LoongArch64 和 RISC-V 这几种计算机架构的介绍,包括它们的应用场景、优缺点: 1. x86_64 简介: x86_64 是由 AMD 推出的 64 位扩展版 x86 架构,兼容于英特尔的 IA-32 架构。这一架构被广泛应用于桌面和服…...
git push上不去的问题Iremote reiectedl——文件过大的问题
在新建分支的时候,发现push怎么也上传不上去,一开始觉得是权限的问题,但是尝试了各种方案都没有用,后面再仔细看了一下是文件太大了,远程拒绝推送 接下来,和大家讲讲我的解决方案 1、把修改的代码迁移到新…...
Qt Creator卡顿
删除IDE的配置参数的保存文件夹QtProject,使得Qt Creator恢复出厂值。 C:\Users\替换为你的用户名\AppData\Roaming\QtProject 参考链接: Qt Creator 卡顿 卡死...
数据结构笔记(其五)--串
目录 12.串 12.1 基本操作 12.2 串的存储结构 12.3 字符串的模式匹配算法 (1).朴素模式匹配算法 (2).KMP算法 i.next[]数组的求解 ii.next[]数组的优化——nextval数组 iii.手算nextval数组 iiii.机算nextval数组 + KMP函数 12.串 串,即字符串(string),由零个或多…...
Python爬取高清美女图片
文章概述 本文将详细介绍如何使用Python编写一个简单的爬虫来抓取高清美女图片。我们将利用requests库来发送HTTP请求,使用BeautifulSoup库来解析HTML文档,从而提取出图片的URL并将其下载到本地。 技术栈 Python: 编程语言requests: HTTP客户端库Beau…...
gin路由
1主文件 package main import ("github.com/gin-gonic/gin""godade/user""net/http" ) func main() {router : gin.Default()router.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "Hello World")})v1 : router…...
达梦数据库操作以及报错修改
执行失败(语句1) -6105:: 数据类型不匹配 第12 行附近出现错误 插入sql语句 INSERT INTO "by_ioc_rbac"."user_info" ("user_account", "user_name", "birthday", "password", "gender", "mobi…...
江科大/江协科技 STM32学习笔记P21
文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换,非扫描模式连续转换,非扫描模式单次转换,扫描模式连续转换,扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…...
第三方jar自带logback导致本地日志文件不生成
1.问题及解决 这是依赖的jar包,自己有logback,只打印到控制台,导致我们项目里配置的error级别日志不会生成到日志文件中去。ai给的答案是自己控制加载顺序,但很麻烦,--logging.config也不行,最好下了个7z压…...
国产数据库备份恢复实现
数据库备份恢复是数据库高可用的基本能力,如何通过备份数据快速高效的恢复业务并且满足不同场景下的恢复需求,是各数据库厂商需要关注的要点。本文将介绍几种国产数据库的备份恢复功能,以加深了解。 1、数据库备份恢复方案 数据库备份是生产…...
数据仓库: 2- 数据建模
目录 2- 数据建模2.1 维度建模2.1.1 维度建模的基本概念2.1.1.1 事实表 (Fact Table)2.1.1.2 维度表 (Dimension Table)2.1.1.3 维度 (Dimension)2.1.1.4 度量 (Measure) 2.1.2 维度建模的主要模型2.1.2.1 星型模型 (Star Schema)2.1.2.2 雪花模型 (Snowflake Schema)2.1.2.3 星…...
Tomcat 漏洞
一.CVE-2017-12615 1.使用burp抓包 把get改成put jsp文件后加/ 添加完成后访问 木马 然后木马的网址 在哥斯拉测试并且添加 添加成功 然后我们就成功进去啦、 二.弱口令 点击后输入默认用户名、密码:tomcat/tomcat 登陆之后上传一个jsp文件 后缀改成war 然后访问我…...
分布式消息队列Kafka
分布式消息队列Kafka 简介: Kafka 是一个分布式消息队列系统,用于处理实时数据流。消息按照主题(Topic)进行分类存储,发送消息的实体称为 Producer,接收消息的实体称为 Consumer。Kafka 集群由多个 Kafka 实…...
C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉
本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.迪米特法则(…...
【C++】—— 类与对象(四)
【C】—— 类与对象(四) 6、赋值运算符重载6.1、运算符重载6.1.1、基础知识6.1.2、调用方法6.1.3、前置 与 后置 的重载6.1.4、注意事项6.1.5、<< 和 >> 运算符重载6.1.5.1、<< 和 >> 基础6.1.5.2、日期类 operator<< 的实…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
