怪物猎人世界ce代码表(怪物猎人世界ce全代码)
游戏外挂之利用CE和OD查找被选中怪物和怪物列表
这一节我们利用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就是被选中怪物。这个就到这里,下一节分析对象属性。
作者:egojit
原文:https://wwwblogs/egojit/p/3150097.html
ce轻松使用入门
精确数值的搜索按照确定的数字搜索内存值的地址。
模糊搜索根据指定条件,例如减少了,增加了搜索内存单元的地址。
不同数据类型的搜索根据内存单元值的数据类型配合精确或模糊搜索内存单元的值。
基址和偏移指针基址:不变的基础段地址。
偏移:此内存单元距离基址的距离。
指针:基址+[偏移量1+[偏移量2]]。
指针扫描指针扫描的目的是找到内存单元的地址,用于下次启动应用是,本次修改仍然有效。这个地址不是具体的地址,而是指针(基内存地址+偏移量1[+偏移量N])。
操作步骤
通过精确、模糊或数据类型等条件找出目标内存单元地址。右键点击内存单元地址,点击“对这个地址进行指针扫描”,打开指针扫描页面。修改最大偏移量或最大级别,设置保存的文件,进行扫描。重启角色或游戏,在扫描结果中再次扫描目标内存值,过滤掉不需要的指针记录,剩下的就是找到的到这个内存单元的指针(应用基址+偏移量)。用新的游戏进程,在老的找到的内存单元中进行多次匹配,会自动去掉匹配不成功的,剩余的就是指向目标内存地址的指针。简单的代码修改步骤
找到目标内存地址右键 > 是什么修改了此地址应用中操作修改。在上面修改了此地址页面会显示修改的汇编代码。点击代码,点击显示反汇编代码。双击修改代码保存。代码注入步骤
1、找到目标内存地址
2、右键 > 是什么修改了此地址
3、应用中操作修改。在上面修改了此地址页面会显示修改的汇编代码。
4、点击代码,点击显示反汇编代码。以上4步同上。
5、在汇编代码中,点击菜单栏的工具,自动汇编,进入自动汇编代码编辑窗口。
在自动汇编窗口中,点击菜单下的模板,下的代码注入,写入基础代码。改写里面的代码,然后点击菜单 > 分配到CT表,加入到ce下面的窗格中,勾选使之生效。AOB脚本同上代码注入,不同点是注入方式模板代码选择AOB,意思是通过内存指令特征码实现改写。
声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送至邮件举报,一经查实,本站将立刻删除。转载务必注明出处:http://www.hixs.net/article/20230925/169494803220317.html