TC官方合作论坛

 找回密码
 立即注册
查看: 6147|回复: 21
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-23 13:48:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

方法一:分析法
以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”改变指针,
看一下我们 分析出来的这个指针是不是准确同步变化。
同时也可以看到,改变指针以后,前面找出来的那些动态地址,全都没用了。


<未完待续,请稍候看第二部分>












本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

沙发
 楼主| 发表于 2013-1-23 13:48:54 | 只看该作者
上面,简要说了用分析法 查找多级指针的方法,说得比较粗略,网上类似的教程也较多,大家可以去找找参考一下。
现在这里要讲讲第二办法:扫描法
相对来说,CE教程上的指针地址,是比较简单的,让我们这些未入门的人 也三下五除二 找到了,
在实际各类游戏中,大多数时候可没这么简单,更多的需要点汇编的功力,
特别是,有的时候进行第二步,“找出是什么在访问这个地址”,一个地址也搜索不到,如果要分析代码吧,能力有限,
怎么办,这就可以用到第二种办法,扫描指针,关于这个方法,网上很多教程都是一句话带过,以为大家都是大侠,
这点小事不值得一提,唉,的确 就差一层窗户纸,我也有一阵子 很糊涂,冥想很久才明白,好了,废话不说了,进入正题

第一步是同分析法一样的,先的到这个动态地址。
然后注意,这里要做的是“扫描目标地址指针”


多数情况下,我们只需要CE默认值进行搜索就可以了,就是要设一下扫描指针的深度,
级数少 扫描的时间就少,我一般都是从4级开始扫描,扫描4级指针真的花不了多少时间,
4级找不到就再扫5级,再6级。7级。。
再高8级、10级,恐怕搜索几天几夜也搜索不完,大家看着办吧。


这里要选择一下,存放扫描的结果文件名和目录位置,
建议放到空间相对较大的磁盘分区上,扫描级数高的时候,占用磁盘空间是相当可观的。


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


在教程软件上按“Change pointer”改变一下指针,重复第一步操作,得到一个新的动态地址。
在实际的游戏中实现这一步的动作就是重新登录一下游戏,
甚至是关闭游戏客户端重新开启
或者只是简单地改变一下场景等等,要根据游戏的实际情况来确定。


我们把再次查找到的地址,输入进去重新扫描,
注意:最好新建一个文件存放扫描结果,
避免有的时候 因操作失误破坏已有的数据文件,这样出错了还可以返回重新来过。


结果出来了,就1个指针,双击一下,添加到地址中。扫描任务完成了。
是不是很简单啊,一点都不用分析汇编。
前面说了 教程的指针是简单的,扫描一下 就出来了,
实际游戏中扫描操作可能要进行多次才能得到比较准确的指针,
指针也可能不止1个,有很多,
比如说,现在大型游戏中的模块很多,不同的模块名加不同的偏移,
都是不同的指针,但大家只要看,各级指针的偏移量是不是相同的,
如果全部相同,那就说明其实是同一个指针,只是说基址的地址相对于各个模块的位置不同而已。


也有的时候,扫描几次以后,一个指针也没找到,那就悲剧了,
可能一:需要扫描更高级别的指针。解决办法:花时间继续扫描吧。。。。
可能二:链表式结构的指针(可能是这个意思吧,我也不太明白),不适合扫描。
解决办法,请汇编功力比你我高的人,帮你分析代码吧。或者你努力学习,自己成为高手、大侠以后,再来帮我解决这个问题。

========================================
顺便说一下,找到指针以后,在TC中 怎么用:
方法是调用大漠插件,如读取内存数值的函数:
value = dm.ReadInt(hwnd, "[[[[<GameObj.dll>+2b2aec]+5c]+16]+0]+20", 0)

好了,我要讲的东西就这么多了,有讲得不对的地方请大侠们指正一下, 如果大家觉得对自己有帮助就支持一下吧,谢谢啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

板凳
发表于 2013-1-23 14:16:34 | 只看该作者
虽然不知道怎么回事 但是感觉很妞呗的映子
回复 支持 反对

使用道具 举报

地板
发表于 2013-1-23 14:43:20 | 只看该作者
uuuuuuuuuuuuuuuuuuuuuuuuuuuup
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2013-1-23 14:59:45 | 只看该作者
虽然不知道怎么回事 但是感觉很妞呗的映子
我又来了 发表于 2013-1-23 14:16:34

谢谢支持哦,
我来说明一下,找游戏指针的用处:
写个打怪的脚本, 要根据血量多少来确定是不是要吃加血的药,
如果不能找到内存中存放的血量数值,那你就得用找图色的方法来确认血条长短,
如果能读内存,直接得到血量值,那省了多少事啊
只需要读取就行了,对于网络游戏 通常情况下 千万别指望去改写这个数值,没用的。
回复 支持 反对

使用道具 举报

6#
发表于 2013-1-23 16:24:21 | 只看该作者
支持原创!支持分享!
回复 支持 反对

使用道具 举报

7#
发表于 2013-1-23 18:22:00 | 只看该作者
汇编  也就就学校那点东西
回复 支持 反对

使用道具 举报

8#
发表于 2013-1-23 18:28:38 | 只看该作者
撸主传个过保护的ce呗,调试不了有毛用。。。
回复 支持 反对

使用道具 举报

9#
发表于 2013-1-23 18:44:23 | 只看该作者
撸主是个好人,说的很详细!顶!!!
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2013-1-23 18:58:27 | 只看该作者
撸主传个过保护的ce呗,调试不了有毛用。。。
Sky_Pro 发表于 2013-1-23 18:28:38

我爱破解论坛上,有个“我爱破解专用过检测版CE”,据说可以过多种保护,
但我没试过,不敢说好不好用,你可以去看看,如果不行的话,我可以帮你转过来。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-23 04:44 , Processed in 0.140347 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表