【图文解说】用CE寻找游戏指针的2种方法(原创)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【图文解说】用CE寻找游戏指针的2种方法(原创)

方法一:分析法

以CE教学软件为例,我用的CE版本是 6.2汉化版,教学软件没汉化,不同版本可能会略有不同。

打开CE教学软件“Tutorial-i386.exe”,输入密码525927直接跳到第8步,多级指针,打开CE加载CE教学。

输入教学软件上给出的数字进行搜索。

得到一个地址,黑色的,说明是动态地址。所谓动态地址,就是这个址是会变的,

比如说在游戏中存放人物血的数值的地址,每次变换角色或者重新登录甚至变换一下场景,都会发生变化。那么,通过读写这个地址来得到人物的血量值,就无法实现,变一下就找不到了。

现在我们就是要来分析这个地址是怎么来的。

双击一下这个地址,添加到下面的地址栏,然后右键点击这个地址,“找出是什么改写了这个地址”

按一下教学软件上的按键“Change Value”改变数值。

好了,出来一行代码,正是这行代码在改写这个地址里的数值。

双击这行,看详细信息,CE提示要寻找的指针可能是“d7780”

我们点新的搜索,选中16进制,数值是“d7780”,结果出来了,还是黑色的。

同样的方法把它添加到下面地址栏,但现在起我们要“找出是什么访问了这个地址”

重复这一步的操作,直到搜索到的地址是绿色的为止,绿色的地址,表示是基址,不再会发生变化。现在回过来梳理一下这个过程,原来我们一开始找到的那个地址,是经过这4次变化得来的。

这个是基址,这里是用一个模块加偏移表示的。

我们在CE上,点“手工加入地址”,钩选“指针”,按“Add Offset”,添加成有4级偏移的指针,最底下方框中输入基址(模块名+偏移),逐级往上每次的偏移量。

好了,指针地址添加好了。

现在测试一下,按教学软件上的“Change pointer”改变指针,

看一下我们分析出来的这个指针是不是准确同步变化。

同时也可以看到,改变指针以后,前面找出来的那些动态地址,全都没用了。

上面,简要说了用分析法查找多级指针的方法,说得比较粗略,网上类似的教程也较多,大家可以去找找参考一下。现在这里要讲讲第二办法:扫描法

相对来说,CE教程上的指针地址,是比较简单的,让我们这些未入门的人也三下五除二找到了,

在实际各类游戏中,大多数时候可没这么简单,更多的需要点汇编的功力,

特别是,有的时候进行第二步,“找出是什么在访问这个地址”,一个地址也搜索不到,如果要分析代码吧,能力有限,怎么办,这就可以用到第二种办法,扫描指针,关于这个方法,网上很多教程都是一句话带过,以为大家都是大侠,

这点小事不值得一提,唉,的确就差一层窗户纸,我也有一阵子很糊涂,冥想很久才明白,好了,废话不说了,进入正题

第一步是同分析法一样的,先的到这个动态地址。

然后注意,这里要做的是“扫描目标地址指针”

多数情况下,我们只需要CE默认值进行搜索就可以了,就是要设一下扫描指针的深度,

级数少扫描的时间就少,我一般都是从4级开始扫描,扫描4级指针真的花不了多少时间,4级找不到就再扫5级,再6级。7级。。

再高8级、10级,恐怕搜索几天几夜也搜索不完,大家看着办吧。

这里要选择一下,存放扫描的结果文件名和目录位置,

建议放到空间相对较大的磁盘分区上,扫描级数高的时候,占用磁盘空间是相当可观的。

第一次结果出来了,接下来需要做的是清理错误的数据,最终得到我们想要的。

在教程软件上按“Change pointer”改变一下指针,重复第一步操作,得到一个新的动态地址。在实际的游戏中实现这一步的动作就是重新登录一下游戏,

甚至是关闭游戏客户端重新开启

或者只是简单地改变一下场景等等,要根据游戏的实际情况来确定。

我们把再次查找到的地址,输入进去重新扫描,

注意:最好新建一个文件存放扫描结果,

避免有的时候因操作失误破坏已有的数据文件,这样出错了还可以返回重新来过。

结果出来了,就1个指针,双击一下,添加到地址中。扫描任务完成了。

是不是很简单啊,一点都不用分析汇编。

前面说了教程的指针是简单的,扫描一下就出来了,

实际游戏中扫描操作可能要进行多次才能得到比较准确的指针,

指针也可能不止1个,有很多,

比如说,现在大型游戏中的模块很多,不同的模块名加不同的偏移,

都是不同的指针,但大家只要看,各级指针的偏移量是不是相同的,

如果全部相同,那就说明其实是同一个指针,只是说基址的地址相对于各个模块的位置不同而已。

也有的时候,扫描几次以后,一个指针也没找到,那就悲剧了,

可能一:需要扫描更高级别的指针。解决办法:花时间继续扫描吧。。。。

可能二:链表式结构的指针(可能是这个意思吧,我也不太明白),不适合扫描。

解决办法,请汇编功力比你我高的人,帮你分析代码吧。或者你努力学习,自己成为高手、大侠以后,再来帮我解决这个问题。

========================================

顺便说一下,找到指针以后,在TC中怎么用:

方法是调用大漠插件,如读取内存数值的函数:

value = dm.ReadInt(hwnd, "[[[[+2b2aec]+5c]+16]+0]+20", 0)

相关文档
最新文档