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

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的方式来得到基址


img

相关文章:

37.x86游戏实战-XXX遍历怪物数组

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

go语言中map为什么不会自动初始化?

go语言中map为什么不会自动初始化? 在Go语言中,map类型不会自动初始化的原因在于其设计哲学和类型系统。以下是具体原因: 零值设计:Go语言中的每种类型都有一个零值,例如整型的零值是0,布尔型的零值是fals…...

大数据面试SQL(一):合并日期重叠的活动

文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期,每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…...

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】—— 类与对象&#xff08;四&#xff09; 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<< 的实…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...