27.第二阶段x86游戏实战2-遍历周围NPC跳出递归循环

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!0

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:26.第二阶段x86游戏实战2-C++遍历背包物品

上一个内容里通过C++把背包的数据成功读取了出来,然后接下来找周围的NPC,这是想做自动打怪、自动做任务必须的数据,遍历周围NPC算是核心的东西了,然后怎样找周围NPC?可以通过对象里面的变量,比如说名字、血量

本次就通过附近NPC的名字去追

npc特点说明:附近NPC一般游戏会不断的遍历附近NPC这个数据,也就是不断遍历npc列表,所以只要通过CE找到了地址那它一定是在循环里

首先打开游戏,打开CE,并使用CE附加到游戏里

搜索完有314个结果

然后把结果全选然后点下图红框

然后在下图红框位置选中大概一半的数据

通过修改进一般的内存地址,发现游戏中npc的名字并没有被影响,所以现在选中的都不是npc的名字,可以把它们都给删了,注意游戏在后台运行的时候不后悔刷新页面,所以最好修改完了数据用鼠标点击点击游戏中的npc

删除地址

然后再对剩下的数据选中一半然后修改,看看会不会在游戏中影响到npc的名字,修改完还是没影响,所以把这次选中的地址也全部删除

然后继续重复上面的步骤,最终找到了名字的地址,然后打开OD进行断点调试

使用dd指令在内存窗口中跳转过去

然后下硬件访问断点

通过硬件访问断点就来到了下图位置,ecx的值是名字,记得把硬件访问断点删除

开始找ecx的值哪来的,下图ecx的值看着来自于下图红框位置

但是它上一行是一个跳转指令,如下图可能会不执行上图红框里的代码

然后通过下断点,可以确定ecx的值不来自于,mov ecx,dword ptr[ecx]这一行,它来自于上面,所以接下来往上翻看看还有什么位置给ecx赋值了

然后下图断点位置是一个je跳转指令,可以看出它并没有跳转

所以位置ecx还进行了加0x2C,现在的公式[[[ebx+0x148]+0x10]+0x2C]

然后最终看到ecx来自于edx,edx又来自于[eax+0x10],eax来自于[ebx+148],ebx来自于ecx,ecx来自于上一层,所以接下来通过硬件访问到断点CTRL+F9

首先在内存窗口中回到使用CE找到的那个地址,如下图红框

然后硬件访问断点,断点住,记得删除硬件断点,然后按CTRL+F9就来到下图位置

CTRL+F9发现跳出了Game模块,来到了一个递归循环(下图位置会不断的运行)

然后再回到npcm111这个位置,测试一下公式 [[[ebx+0x148]+0x10]+0x2C],首先在下图红框位置打断点

然后使用 dd [[ecx+0x148]+0x10]+0x2C,如下图虽然现实不全但它确实是一个名字

然后它也有的位置是0,没有名字

还有乱名字不知道是什么,等后面用C++在看,乱码是OD的问题

现在确定了[[ecx+0x148]+0x10]+0x2C 是名字,然后接下来再找ecx的基址,如下图ecx的值来自于esi,ecx的基址找不到,下图红框位置是函数的头部,在下图红框位置使用[[esi+0x148]+0x10]+0x2C公式得到的结果永远都是当前角色的名字


在下图红框位置打断点可以得到当前角色名字和附近npc的名字,基址找不到,这次就算完了

然后是跳出递归循环的方法

首先来到递归循环,递归循环的特点就是会多次执行一样的代码,如下图来到会被多次执行的递归代码里

栈里会有返回到,如下图红框,通过返回到来跳出递归循环

右击选择反汇编窗口跟随,返回之前记得取消断点

然后就会来到下图位置,然后在下图红框位置打断点,继续看它的返回到,

继续返回到

然后回来到下图位置,然后继续返回到

然后回来到下图位置,下图位置就不会被重复执行了,这就算是跳出了循环,下图里的基址没法用,它们的数据很乱不好用,然后下一次通过其它方式去找附近npc


相关推荐
6极地诈唬3 小时前
【C#-sqlSugar-sqlite】在Windows从源码编译构建System.Data.SQLite.dll的方法
windows·sqlite·c#
数据的世界014 小时前
JAVA和C#的语法对比
java·windows·c#
REDcker6 小时前
Cursor Chrome DevTools MCP 配置指南 for Windows
前端·windows·chrome devtools
Wins_calculator8 小时前
Ubuntu重新挂载Windows C盘以及如何安全退出外挂硬盘
windows·ubuntu
A100861212119 小时前
ShellCrash 安装与配置踩坑与解决日志
windows
石像鬼₧魂石19 小时前
192.168.1.4(Windows 靶机)渗透测试练习全流程(详细步骤)
windows·学习
yaoxin52112320 小时前
237. Java 集合 - 对 List 元素进行排序
java·windows
yaoxin52112320 小时前
236. Java 集合 - 使用索引访问 List 元素
java·windows·list
DY009J20 小时前
如何在Ubuntu虚拟机中设置Samba共享,并在Windows宿主机中挂载为网络驱动器
网络·windows·ubuntu
怣疯knight20 小时前
搜狗输入法在vecode中打出的是繁体,在其他软件打出的都是简体的解决办法
windows