游戏外挂四之利用CE和OD查找被选中怪物和怪物列表
Q Q:408365330 E-Mail:egojit@qq.com
这一节我们利用CE和OD去找到被选中的怪物对象,和怪物列表。从而为后面自动遍历怪物实现自动打怪的外挂做铺垫。当然在这之前我们得了解汇编中数组和列表是怎么定位的。一般是[eax*4+0x0063fedd],这样通过自增通用寄存器eax去实现数组下标。0x0063fedd在这里就是一个基址。因为32位系统的地址是4字节我想这个大家都非常清楚,所以乘以4.废话不多说了,现在开始打开游戏盒CE。并且将游戏进程附加到CE中去。

选中两者之间的值。输入值1和值0xFFFFFFFF。这是为了过滤掉0值。否则多查询出很多值。同时为了更快速的查询,我将内存扫描选项设置成00010000和7FFEFFFF之间的内存中进程查找。那么大家肯定会问,那如下的内存呢?如果我们要找的值在余下的内存中怎么办??这个绝不用当心,如果对windows操作系统内存比较了解很容易知道,我设置的这个区间真好是windows的用户模式区间。我们的程序都是在这个区间中的。0x00000000至0x0000FFFF是空指针赋值区。主要是用来辅助程序员捕捉空指针赋值。0x80000000至0xFFFFFFFF是内核模式分区,这个空间是2G。在内核模式分区和用户模式分区之间的是64k禁入分区。所以大家毫无当心的在这个内存区间中去查找,肯定能查到我们想要的值。

第一次查询出的是一个庞大的数字。然后我们将扫描类型改成“未改变的”,然后查询,这样重复几次。然后我们在游戏中去选中一个怪。


然后将将扫描类型改成“改变的”,在次查询。再选中其它的怪去查询改变的值,这样不停的改变选中的怪去查询,直到查询出几个值,我这里查询出一个值。

可以看出它的值是65535。当时我没选中任何怪,说明未选中怪的时候这个内存中的值是0000FFFFh(16进制)
我们已经找出这个被选中怪id存放的地址。

然后将这个值选中到被选取,右击被选取数据"找出什么访问了这个地址"。弹出一个对话框,可以看到这样一行汇编指令:“004adb43 mov eax,[edi+00001478]”
我们将这行代码记录下来。这个时候关闭CE,我们需要打开另一个外挂人员和破解人员必备动态调试工具OD。首先来了解下OD工作区:

1区反汇编代码区,这个区是程序被反汇编器放汇编出的汇编指令。
2区是寄存器区。这里显示了CPU中的寄存器,我们可以在动态调试的时候查看下寄存器的变化。
3区是内存注释区
4区是内存区,这里显示了内存状态。
5区是栈区,这里会显示程序在调用过程中堆栈的变化。
打开OD并且附加游戏进程。

然后

右击转的表达式,然后输入我们记录的那个地址004adb43。跳到访问被选中怪物id存放的地址的汇编指令那个地方。MOV EAX,DWORD PTR DS:[EDI+1478]这样一行代码。就是将被选中怪物的ID放到EAX寄存器。CMP EAX,0FFFF紧接着这行代码。0000FFFF是没有怪物被选中时DS:[EDI+1478]中的值。

MOV ECX,DWORD PTR DS:[EAX*4+312DF20] 后面的DS:[EAX*4+312DF20]就是汇编中集合的访问方式。312DF20是基址,那么312DF20+0就是这个数组的第一个元素。我们猜测这个数组存放的就是怪物数组。

我们在OD的命令行中输入dd 0312DF20以堆栈形式转储。我们可以看到一个一个对象地址在这个数组中,这个就是怪物包括玩家的数组。当然有一个熟悉区别它是怪物还是其它对象。

我们进入这个数组中的第二个对象。右击第二个数组-》数据窗口跟随进入的第二个对象,可以看到+c这个位置就是对象数组下标是1.恭喜我们已经找到对象数组了。同时我们知道只要是放入[eax+00001478]中的id就是被选中怪物。这个就到这里,下一节分析对象属性。
游戏外挂四之利用CE和OD查找被选中怪物和怪物列表的更多相关文章
- 一步步用python制作游戏外挂【转】
转自:http://www.cnblogs.com/xsmhero/archive/2013/01/03/2842973.html 玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过 ...
- 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程
详解游戏辅助编程 [目录] 1-什么是Windows API 2-Windows进程 3-Windows 的内存的运行原理 4-windows 中句柄的概念 5-Windows的变量类型 6-辅助实现 ...
- Python论做游戏外挂,Python输过谁?
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...
- 用Python制作游戏外挂(上)
源地址:http://eyehere.net/2012/python-game-bot-autopy-1/ 悲剧成我这样的人,我知道肯定不止我一个,所以我一点都不悲伤:-( 所以我打开了4399小游戏 ...
- C#简单游戏外挂制作(以Warcraft Ⅲ为例)
网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的外挂. 作为微软. ...
- JAVA 8.20 游戏:四子连(Java&C++)
(游戏:四子连 )四子连是一个两个人玩的棋盘游戏,在游戏中,玩家轮流将有颜色的棋子放在一个六行七列的垂直悬挂的网格中: 这个游戏的目的是在对手实现一行.一列或者一条对角线上有四个相同颜 ...
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)
正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...
随机推荐
- nodejs的初学
1.启服务器.先server.js,再命令行输入命令node server.js,打开浏览器输入http://127.0.0.1:2016可以看到有内容输出. server.js代码如下: var h ...
- 161227、js显示对象所有属性和方法的函数
要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的. function ShowObjProperty(Obj) { var PropertyList=''; var Pro ...
- mysql 慢查询日志切割
- C#利用反射机制创建对象
"反射"其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用 ...
- 一个被称为世界上最短的判断IE方法
最近偶然看到一段判断是否为IE浏览器的代码: if(!+[1,]) { console.info("IE 浏览器"); } else { console.info("非 ...
- 小结一下前段时间做的rpgdemo
虽然说已经是彻底放弃继续做那个demo了(代码结构混乱,想增加新功能非常的不方便),不过还是花了一点心血在里面的,毕竟这是我开始学习unity游戏制作的初衷,不过果然是学的越多越发现自己的不足... ...
- GUID 全局统一标识符的介绍
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...
- python学习之函数
1.函数名可以被赋值 比如: def aaa(): pass b = aaa//将函数名字赋值给b b()//跟aaa()效果一样 2.return 2.1.如果函数不写return的话,会默认返回N ...
- Chapter 2: 随机变量
1. 随机变量, 离散型随机变量,连续型随机变量 设$\Omega$为随机试验的样本空间,$X:\Omega \rightarrow R$是定义在样本空间$\Omega$上的实值函数,则称$X$为随机 ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...