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


相关推荐
十五年专注C++开发18 小时前
MinHook:Windows 平台下轻量级、高性能的钩子库
c++·windows·钩子技术·minhook
dongdonglele52120 小时前
ros2环境安装
windows
muinomarts21 小时前
【Windows挂载夸克网盘到本地 AList+Raidrive】
windows
Sharewinfo_BJ1 天前
PowerBI 2026年1月功能更新|效率升级,体验再优化
windows·microsoft·powerbi
yaoxin5211231 天前
314. Java Stream API - 使用 Collectors.partitioningBy() 分区元素
java·windows
云小逸1 天前
【windows核心编程】Windows GDI编程深度解析:从消息循环到双缓冲动画的完整实现
windows
奋斗羊羊1 天前
rocketmq 及依赖环境编译安装过程记录(windows)
windows·rocketmq
鲨辣椒100861 天前
Linux软件编程基石——基础指令使用
linux·windows·microsoft
云小逸1 天前
【Nmap 源码学习】深度解析:main.cc 入口函数详解
网络·windows·学习·nmap
郝学胜-神的一滴1 天前
Python美学的三重奏:深入浅出列表、字典与生成器推导式
开发语言·网络·数据结构·windows·python·程序人生·算法