找回密码
 注册

QQ登录

只需一步,快速开始

宝峰科技 门户 调试工具 Cheat Engine 查看内容
宝塔服务器面板

Cheat Engine Tutorial 教程八步完成

2010-11-17 12:06| 发布者: admin| 查看: 8399| 评论: 0

摘要: 第一步: 先在开始菜单上找到CE的程序组,找里面的“Cheat Engine Tutorial”(以下简称TUT),点击运行。这个时候就出来这个TUT的对话框,上面一大段英文,而Next这个按钮是灰的,为什么呢?让我翻译一下上面的英文吧 ...

第五步:

【代码寻找(密码:888899)
有时一些东西的保存位置在你重新开始游戏时会改变,甚至是在你玩的时候也会变,在这种情况下,你用二件事仍然能做出可以用的内存列表。
在这一步我会描述怎样用寻找代码功能。

下面的数值每次你开始这个TUT的时候会存放在不同的位置,所以一个普通的内存地址列表将会不适用。
首先找到这个数值的内存地址(你能进到这一步,我假设你已经知道怎么做了)
当你找到地址后,右击CE中的这个地址,并选择“Find out what writes to this address”(找到是什么改写这个地址),一个窗口将会出现,上面会有一个空的列表。
然后,点击这个TUT上的'Change value'(改变数值)按钮,回到CE,如果一切都做得对,会看到一个地址和一些汇编代码。
点击这个地址并选择Replace(替换)选项把它替换成什么也不做的代码,这样还会将代码地址加到高级选项窗口上的代码列表(它将会一起保存,如果你保存地址表的话)。

点击Stop,这样游戏(CCB:指这个TUT)将会再次正常地运行下去,并点Close关闭这个窗口。
现在,点击这个TUT上的Change value按钮,如果一切都做对,NEXT按钮将会变成可点击的了。

注:如果你以足够快的速度锁定这个地址,这个NEXT按钮也会变成可见的。
]】

越来越精彩了,现在不但教你找地址,还教你找那条修改这个地址的指令了,虽然,你还不太清楚怎样手工修改找到的地址,但至少也比单纯地找数值的地址并修改和锁定要好一些了,不是吗?别急,更精彩的还在后面呢。

第六步

【指针(密码098712)
在上一步我解释了怎样用代码寻找功能对付变化位置。但单独用那个方法不容易找到地址来修改为你要的数值。
这就是为什么要用到指针了:

在TUT下面你会找到两个按钮,一个会改变数值,另一个不但会改变数值并且还会改变数值在内存中的位置。
在这一步,你不需要真的懂汇编,但如果你懂的话会很有帮助。

首先找到数值的地址,当你找到后,再找找是什么在改写这个地址。再次改变这个数值,这样会找到一个代码地址,双击这个代码地址(或者选择它并点击More info),这样一个新的窗口会打开并显示详细的信息告诉你当这个指令运行时会发生什么事(CCB:这个新出来的窗口上,那条指令会是红色的)。如果这个汇编指令里面没有包括一个在方括号中的东西,(CCB:说明这个不是我们要的)那么再看看代码地址列表中另一个代码地址。如果有方括号,就是说CE认为找到了数值的指针了。
回到CE主窗口,(你可以让那个扩展信息窗口开着,但如果你关了,要记住在方括号中间的内容)(CCB:要关了那个有代码地址列表的窗口,才能回到CE主窗口,但扩展信息窗口可以不用关掉),并做一次4字节的扫描,扫描扩展信息窗口告诉你的十六进制数。(CCB:就是方括号里面的内容,如果方括号里面是[eax],那么看看扩展信息窗口下面EAX=后面的数值)。当扫描完成时它可能返回一个或几百个地址。大多数情况下你要的会是最小(CCB:指地址最小,也就是排在列表的最上面)那一个。现在点击手工添加内存地址(Add address manually)并在pointer(指针)这个选项上打勾。

这个窗口将会改变,并允许你填入指针的地址和偏移量。
在地址那里填入你刚才扫描到的地址。
如果汇编指令在后面有一个计算(例如:[esi+12])那么把数值填在后面,否则让它保持0(CCB:就是如果有类似那样的计算,把12这个数值填在偏移量(OFFSET)那里,否则那里填0),如果是更复杂的指令,看看它的算式。

举例说明更复杂的算式:
[EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.(CCB:这时各个寄存器的值到底是多少,要看扩展信息窗口下方,那里有各个寄存器在执行这条指令时的值)
在这个情况下EDX会是数值的指针,而EAX*2+00000310则是它的偏移量,所以你要填的偏移量会是2*4C+00000310=3A8.(这些都是在十六进制下计算的,使用WINDOWS的计算器在科学方式下用十六进制计算)。

回到TUT(CCB:?),点击OK,这个地址将会加到列表上,如果没搞错,将会显示P->xxxxxxxx,xxxxxxxx会是你找到的数值的地址。如果不正确,那你一定是哪里做错了。
现在,使用那个指针改变数值为5000并锁定(就是在下面的地址列表中,点最前面FROZEN那一栏的勾)它,然后(CCB:应该是这里才回到TUT吧?),点击'Change pointer'按钮,如果一切正确,那么NEXT按钮将变成可见的了。

额外信息:
在这个TUT中,事实上数值是由一个指针指向另一个指针(CCB:再指向真正的数值,就是使用了“指针的指针”,有点象绕口令:),但要完成这个TUT只需要一个指针。要找到这个指针(CCB:是说要找到指向指针的另一个指针),只要搜索是什么改变那个指针。
如果你懂汇编,你可能会看到类似这样的:
mov eax,[ebp-4]
mov eax,[eax+310]
这些别搞混了,只使用扩展信息窗口告诉你的数值。ebp-4指向堆栈中保存了指向这个指针的指针,但堆栈的位置总是在变化,所以不要搜索ebp,而要搜索eax的数值。

这一步,确实就够复杂了,也许你到这一步真的有点想放弃了。不过,如果我告诉你,这是这个TUT的最后一步了,你还会想放弃吗?呵呵,坚持啊,看不懂就问,把CCB这家伙问倒了才好呢:)。其实这就是对付DMA的方法之一了,就是先找到地址然后找到指针,找到指针就好办了。

第七步 密码=013370

代码注入是一个将一小段代码注入到目标进程中的技巧,然后使这个进程执行你写入的自己的代码。

在这一步教程中,你将有一个生命值和一个按钮,这个按钮每按一次将减少1点生命值。你的任务是使用代码注入来增加这个生命值,使得每按一次按钮增加2点生命值。

开始查找这个地址然后进入“找到写这个地址的东西”。
然后减小生命值,当你已经找到地址后,显示反汇编程序(Show disassembler), 并找到这个地址,然后打开自动汇编窗口(Tools菜单->Auto Assemble)(Ctrl+a)
在tmplate上点击然后再点击Code Injection,并给出减少生命值的地址(如果程序没有正确填写的话)

那样,将产生一个基本的自动汇编程序窗口你可以用于你的代码.

注意alloc, 那将用于为你的代码分配一块内存, 而在Win2000系统之前, 这种行为存在安全隐患,是不安全的(HZH:在Win200以前,对系统内存进行分配及代码查找之类的操作,可能会导致系统崩溃),幸运的是这种情况在win200以后的版本得到改善.

同样,也要注意line newmem语句及原始代码,以及文本"Place your code here",正如你猜测的那样,在这儿写下你每次增加2点生命值的代码.
在这种情况下,一个有用的汇编指令是"ADD".
下面是一些示例:
"ADD [00901234],9" 使[00901234]地址的值增加9
"ADD [ESP+4],9"        使地址指针[ESP+4]的值增加9

注意:
推荐你从原始生成代码中删除减少你生命值的那行代码, 否则你将不得不增加3点生命值(你增加3点,而原始代码减少1点,那样最终结果是增加2点),这样可能会造成混乱.

注意2:
在一些游戏中,原始代码可能存在在多指令之外,并且某些时候(并非一直如此),这可能会发生在其他地方跳转到你的跳转指令结束,那样将引起未知的行为.如果这种情况发生的话,你通常应该查看附近的指令,查看跳转情况并进行修改,或者选择使用一个不同的代码注入开始地址.

最后,点击 Write code.


第八步 多级指针: (密码=525927)
这一步教学将会解释该如何使用多级指针。
在第 6 步的教学中你应该了解到了简单的1级指针的概念和用途, 以及如何由数据的地址找到真正的基址。
在本步教学中,你将面对的是4级指针的挑战。它将是一个指向指针的指针的指针的指针,最终指向表示生命的数值。

开始的几步与在第 6 步教学中操作基本相同。找出是什么存取这个数值的,然后检查指令和可能的基指针数值,以及它的偏移量, 并将这些数值填充或把它记下来。但是在这里与第6步教学中情况不同的是:你找出的数值其实也是一个指针。你必须依据这些数值,使用同样的操作方法找出指向这个指针的指针。找出什么访问你发现的那个地址,审查汇编指令, 留意可能的指令和偏移量,并在下一步查找过程中加以使用。这种过程一直进行,直到不能更进一步查找为止(通常当基址是一个静态的地址时,这个地址将以绿色显示)。

点一下“Change Value(改变数值)”让教程程序改变下生命数值。
如果你认为你已经发现指针路径单击“Change Register(改变寄存器)”按钮。指针和数值将随之
改变,并且你将有 3 秒时间来锁定地址到 5000。

备注1: 这个问题也可以使用自动汇编程序脚本或者使用指针扫描器加以解决。

备注2: 在某些情况(像本步教程)下,一个被推荐的做法是:改变CE软件的设置中“代码查找器Code
Finder)”中的相关设置。这样,当你遇到像 mov eax,[eax] 的指令时,调试寄存器(Debugregisters)将显示被改变之后的值,使得能利用这个值更容易找出指针。

备注3: 如果你仍在往下读。你可能注意到,当你查看汇编指令时,这些指针是在相同的代码块位置被读写。这种情况并不总是会发生,但是当你在查找某个指针遇到麻烦的时候,真的有很大用处。

第8步教学完成步骤

1.搜索生命值

2.将找到的地址加入列表

3.在地址上点右键“找出什么读写这个地址”,然后“change Value”

4.mov [eax+18],esi ==> eax=009ca668(大家找到的肯定不同,后面有说明)==> 搜索009ca668 ==>009ca5ec

5. Add address manually ==> Point => Pointer: 009ca5ec, Offset:18 => OK =>P->009ca680

6. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value

7. mov eax, [eax] eax: 009ca668 ==> 搜索009ca668 ==> 009ca5ec ==> 009ca5c4

8. 编辑列表项 P->009ca680,添加指针项,Pointer: 009ca5c4, Offset:0 => OK

9. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value

10. mov eas, [eax+14] => eax: 009ca5ec => 009ca5c4 => 计算:009ca5c4-14=009ca5b0 => 搜索009ca5b0 => 009ca544

11. 编辑列表项 P->009ca680,添加指针项,Pointer: 009ca544, Offset:14 => OK

12. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value

13. mov eax, [eax+0c] =>eax: 009ca5b0 => 009ca544 => 计算:009ca5b0-c=009ca538 => 搜索009ca538 => 0045cc18(绿色显示)

14. 编辑列表项 P->009ca680,添加指针项,Pointer: 0045cc18, Offset:c => OK

最后,将数值改为5000,Next

Well done, you've completed the tutorial of Cheat Engine.
Just play arround with the tutorial and learn how the other scanmethods weor.


关于第8步的补充说明:

除了最后以绿色显示的0045cc18值之外,其他的Eax值都要以你自己找到实际数值为准,步骤中的数据只是示例,重要的是原理方法掌握就OK了,千万别以步骤中的值来找哦。
另外 本关可以通过备注里提到的使用指针扫描器等方法加以解决。

12

路过

雷人

握手

鲜花

鸡蛋

相关阅读

最新评论

相关分类

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇ICP备09007156号-2|53050202000040 )

Copyright © 2001-2023 Discuz! Team. GMT+8, 2026-2-7 07:10 , Processed in 0.062951 second(s), 12 queries , File On Powered by Discuz! X3.59© 2001-2025 Discuz! Team.

返回顶部