admin管理员组

文章数量:1532657

2024年3月30日发(作者:)

Cheat Engine (以下简称CE) 是用得最多的也是最优秀的游戏修改工具。它的优点

多不胜数,虽然单独从搜索游戏里面的数值来说,它并不比其他同类软件强多少,但它不

仅仅是个游戏修改工具,它还有其他游戏修改软件所没有的一些特点,例如:它有强大的

反汇编功能,这个是别的游戏工具中几乎没有的;还有,它本身就自带了外挂制作工具,

可以直接由它生成外挂。而它的界面非常简洁朴素,这也是我喜欢它的原因之一。

在这个教程里面,你不会看到任何图片,因为我觉得我能用纯文字教你使用CE,如果

你觉得没有图片就一定学不会,我想你没必要看下去了,因为我没空做图片,并且我觉得

文字已经足够表达,没必要用多余的图片。

好了,废话少说,进入正题吧。

其实,使用CE的基本步骤:

1、运行CE

2、运行游戏

3、在CE中指定要修改的游戏

4、首次搜索一个数值

5、回游戏中让这个数值增加或减少

6、回CE按数值增减的情况再次搜索

7、重复5和6直到得到一个或很少的几个结果

8、在这几个结果中判断哪一个是真正的结果。

而下面的这个教程,就是要对上面说的这些步骤进行详细的解释,然后再用一个具体

的例子来让大家真正掌握CE的用法。

当然,要用一个具体的例子来讲解CE的用法,需要一个游戏,以这个游戏的修改来

讲解。不过,如果真正的用一个游戏来做例子,那么大家也得找到我用的游戏,就算找得

到,还有可能要安装,确实比较麻烦。幸好,CE本身带了一个TUTORIAL,就是教程的意

思,不过这个TUTORIAL,本身也是一个程序,它是作者为了让使用的人进行练习而编写

的,它不但会一步一步地教你怎么用CE,而且它本身也和游戏差不多,除了没有游戏的画

面。如果你能使用CE按这个TUTORIAL的要求对它进行修改,我想你也应该能用CE对

真正的游戏进行修改了。

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

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

CE操作入门

一,如果你还没安装CE,那么开始这一切之前,当然是把它安装上,CE的安装也和

其他的软件一样,很简单,没必要再罗嗦。安装后,在开始菜单上会有CE的程序组,而

在桌面上会有CE的快捷方式。※ 如果是中文压缩包,解压后注意文件夹不能是中文,否

则不能正常运行。

二,安装好之后,就可以运行CE了,运行后,会看到CE的主界面。其实CE的主界

面真的非常非常简单,简单到不能再简单了,以至于我本来想给它做汉化,结果看到它的

主界面上的英语单词少得可怜,根本不需要汉化。如果你连这几个单词都没办法或者不想

去弄懂,我想,你的智商应该不足以用来修改游戏,那么赶快把CE删了吧,这不是你玩

的东西。

三,现在我来描述一下CE的主界面,并且解释上面的各个部分的功能和简单的用法

介绍,至于使用上的具体细节,请看后面的实例。

在CE主窗口的标题栏下面,左上方有三个按钮。

第一个按钮,是指定进程的按钮。在刚运行CE,还没指定所要修改的进程时,它的外

框会不停地闪动,这个是作者提醒你,使用CE要做的第一件事,就是指定一个进程(什么

叫进程?简单地说,就是你系统当前正在运行的程序)。这样CE才知道你要修改的是正在

运行的程序中的哪一个。点击之后,会出来一个新窗口,窗口的标题是Process

List(当前进程列表),就是当前在你的系统上运行的所有进程的列表。这个窗口的下

方,还有几个按钮,你暂时不用管(一个好的学习方法,就是在接触一个新的东西的时候,

先弄懂那些非知道不可的东西,然后再更细致地学习,当然最后是要什么都知道。就是说

要分主次先后来学。如果一开始就去注重很多暂时不需要知道的细节,结果反而会忽略了

最需要先弄懂的东西,这样的学习方法就不好了)。在这里可以找到并选择你要修改的游戏,

然后点OK按钮,或者简单地就双击要修改的进程。

左上方另外的两个按钮,图标就象其他的软件一样,一个是打开的文件夹,这个是用

来打开以前保存的CE的地址列表(*.CT)的打开按钮,另一个是一张软盘的图标,这个是把

地址列表保存下来的。

在这三个按钮的右边,上面是一行英文,下面是一个进度条,上面的英文,当CE还

没选择要修改的进程时,它会显示“No Process Selected”,表示你还没选择进程,如果

已经选择了一个进程,那么它会显示你选择的进程的ID和进程名,进程ID是一个由8个

十六进制代码组成的标识号,后面的进程名就是你所选择的程序,即游戏的名称。而下面

进度条,是当你在进行扫描的时候,显示当前的进度。

然后,在左上角三个按钮的下方,有个英文FOUND后面有个数字,这个是表示找到

的结果的数目,当还没开始扫描或最后的扫描结果是0时,显示FOUND:0。如果某次扫

描时,找到的结果很多,也暂时不会显示,但在这里可以看到目前为止找到的结果数量是

多少。

在主窗口中间的左边,是一个扫描结果的地址列表,一般找到的结果少于某个数(默认

的设置是少于50个)时,找到的结果会全部显示在这个列表中,而如果目前找到的结果多

于设置的数量时就暂时不显示。这个列表有两个栏,Address是内存地址,而Value是该

地址当前的数值。地址当然是十六进制表示的,而数值是十进制的。

在主窗口中间的右边,是CE的扫描部分,上面是三个按钮,First Scan,Next Scan

和Undo Scan。下面是一个输入数值的地方Value,再下来,是选择扫描方式的Scan Type,

选择数据类型的Value Type,再下面是设置内存扫描选项的Memory Scan Options,这

里一般不需要修改,暂时不用管它。还有右边有个Enable Speedhack的选项,这个也先

不管。第一次扫描时选择好扫描类型,输入好数值后点First Scan,这是开始一个全新的

扫描,当数值变化之后输入新的数值再点Next Scan直到找到正确的内存地址。扫描后First

Scan会变成New Scan,如果想开始一个新的扫描,点New Scan之后会清除以前扫描

的结果,并且释放上次扫描所占用的内存,这样你就能重新开始。而有时当你在扫描中间

选错了而影响了结果,可以点Undo Scan,这样会清除掉最后一次你做的选择,并把结果

恢复到前一次扫描时的状态。

在主窗口的下方,又是一个地址列表,这个和上面那个不一样,上面那个是CE扫描

的临时结果,而下方的这个,是你选择了的地址。它有五个栏,Frozen(锁定)是对地址进

行锁定用的,Description是对该地址的注释,Address是地址,Type是数值的类型,Value

是该地址的数值。

在主窗口的中间,有一个斜向右下的红箭头的按钮,这个用于从左边的地址列表中把

地址移到下方的地址列表的。你可以在左边列表中选择一个或多个地址,然后按这个按钮

把它们移到下方的地址列表中。当然,你双击左边的地址列表,也能把它移动到下方的列

表中。

在中间还有另一个红色停止符号的按钮,这个是清除下方地址列表中所有的地址的。

最后,在下方地址列表的左上和右上,各有一个按钮。左边的一个是Memory View,

这个是CE最有用的按钮之一,它是用来查看和修改内存的,而它的功能还不仅仅是查看

和修改内存,CE的最有用的一个功能——反汇编,也是在这个里面,不过暂时不想详细介

绍这个按钮里面的功能,你知道它是做什么的就行了。右边的一个Add address manually,

这个是用于手工向下方的地址列表添加地址的,如果你以前找到过某个地址,知道具体的

地址,可以不用扫描,手工把地址加上。

CE的主界面基本就是这些,其实你用一秒钟就能看清楚,我却要打字打了半天:)

其实到现在为止,你还没真正掌握CE的使用,当然了,如果你会了,我就不用再继

续写下去了,我早就去睡觉了。不要紧,下面结合实例来说明,你会真正掌握CE的使用

的。

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

===========

CE使用实例:

现在,我们来开始一步一步学习CE的使用吧,通过完成CE带的那个TUTORIAL,按

它的要求一步一步做完,如果你做得到,你就基本上算是掌握了CE的用法了。

CE带的TUTORIAL,是英文的,不过没关系,我在教你使用CE来完成这个TUTORIAL

的同时,会把TUTORIAL上面的所有英文都翻译出来让你看明白,所以不用怕。

CE带的这个TUTORIAL,是CE作者做的用来让你练习的一个程序,它里面也和游戏

一样,在每一个步骤都会有一些类似血(HEALTH)或子弹数量的东西,并且你点了上面某个

按钮之后,这些数值也会象游戏中一样减少,这样让你象是修改游戏一样,去找到它的地

址,并按TUTORIAL上面的要求修改,当你按它的要求做到了,才让你做下一步。而在第

一步时那个输入密码的地方,不是说这个TUTORIAL要输入密码才能运行,而是有时你需

要从中间某一步开始时,输入相应的密码会直接从某一步开始,而不用每一次都从第一步

开始的。而你每完成一步之后,它也会给你相应的密码。

好了,也许你等不及了,那么我们现在就开始吧。

第一步:

在CE文件夹找到“”(以下简称TUT),双击运行。这个时候就出来

这个TUT的对话框,上面一大段英文,而Next这个按钮是灰的,为什么呢?让我翻译一

下上面的英文吧,你就明白。TUT上面的英文的译文,我会用【】号把它们括起来。

【欢迎你来到CE的教程(V3.1)

这个教程试图解释在游戏中作弊的基本步骤,并让你更熟悉CE的使用。

首先运行CE,如果你还没运行的话(CCB:因为还没运行,所以Next按钮才是灰色的:)。

然后点击"open process"按钮(在左上角那个有电脑图标的那个)

当进程列表窗口打开后,找到这个教程,进程的名字应该是“”,除非你

把它改名了。选择它,并点击OK。现在先不要管其他所有的按钮,如果你喜欢,以后再

研究它们。

当这一切都做对了之后,进程选择窗口将会消失并且在CE上方会显示进程名。

现在,点击NEXT按钮继续到下一个步骤(或者输入密码而进到你想去的其他步骤)。】

好了,上面的这些英文,我翻译过来了,所以这一步应该不需要我再补充什么,看这

些译文应该能明白怎么做,就是开TUT,开CE(哪个先开都没关系),然后点击CE左上的

那个选择进程的按钮,选择这个TUT的进程,这样就可以点NEXT进到下一步了。

第二步:

【第二步:精确数值扫描(密码:090453)

现在你已经在CE中打开了TUT,让我们进入到下一步吧。

你看到在这个窗口的下方的文字Health:XXX

每次你点击"Hit me"(打我)时,你的Health(血)会减少。

要进到下一个步骤,你必须找到这个数值并把它改为1000

要找到这个数值,有几个不同的方法,但我会告诉你一个最简单的,'Exact Value(精

确数值扫描)':

首先确认数值类型设置为2字节或4字节,1字节也可以的,但当你最后在修改它时

你会遇到麻烦(虽然很容易解决)(CCB:大家不会忘了吧?1字节表示的最大数值是255,

而这里要你改为1000,所以虽然用1字节能找到,但要改却要连前一字节一起改,所以

有点麻烦,不过不是大麻烦)。8字节可能也可以,如果这个地址后面是0的话,不过我不

敢打赌。Single, Double, 以及其他的扫描方式不行,因为它们储存数值的方式不同。

当数值类型设置正确后,确认扫描方式设置在'Exact Value'

把血的数值填在数值输入框上,并点击'First Scan(首次扫描)'

过一会儿(如果你有一个非常慢的电脑的话)扫描完成并且扫描的结果会显示在左边(如

果找到的地址的数量少于设置的数值的话)。

如果你找到多于一个地址而你不知道哪一个是正确的地址的话,点击TUT上的'Hit

me',并把新的血的数值填到数值输入框,并点'Next Scan(再次扫描)'

重复这些步骤直到你确认你已经找到它的地址了(在地址列表上只有一个地址)

现在双击左边列表上的地址,这样会让这个地址移动到下方的列表上并显示它的当前

数值。

双击(下方列表的)数值栏(或者选择它,并按回车),并把它修改为1000。

如果一切都OK,NEXT按钮将会变成可点击的了,你就准备好了进入下一步了。】

这一步,也不用我再补充什么了,这个TUT已经说得很清楚,这是使用CE的最基本

功能,即找到数值,如果扫描结果太多,试图改变数值然后再次扫描,直到结果剩下很少

或者1个为止,这样你就找到了要修改的数值的地址,并且也就能修改它了。到这一步,

你已经能对付很简单的游戏了,不过现在的大多数游戏都没这么简单,但至少你已经学到

最基本的一步,就是精确数值的扫描和修改了。现在就点击NEXT进入下一步吧!

第三步:

【第三步:未知初始数值(密码:419482)

OK,看来你已经理解了怎样使用精确数值扫描找到一个数值了,让我们进入下一步吧。

在上一步中我们知道初始数值所以我们进行了精确数值扫描,但现在我们有一个进度

条,我们不知道它开始时的数值。

我们只知道这个数值是在0到500之间,并且每次你点'Hit me'之后你会减一些血,

每次减的血量会显示在进度条的上方。

同样的有好几个方式找这个数值,(例如使用“减少了什么数值”的扫描方式),但我

只解释最简单的方式,“Unknown initial value”(未知初始数值)和“Descreased value(减

少了的数值)”。

因为你不知道现在它的数值是多少,所以使用精确数值不行了,所以选择扫描方式为

"Unknown initial value",同样的,数值类型选择4字节,(大多数WINDOWS应用程序

使用4字节数据)

点击'First scan'并等它扫描完成。

当扫描完成后点击'Hit me',你会掉一些血(掉的血量多少会在血条上方显示几秒然后

消失,但你不需要这个数值)

现在回到CE,并选择'Decreased Value'(减少了的数值),并点击“Next Scan”

当扫描完成后,再次点击'Hit me',并重复上面的步骤,直到你找到了若干地址。

我们知道这个数值是在0到500之间,所以选择比较象我们要的那个地址是,并把它

加到下边的列表。

现在,把它改为5000,才能进到下一步。

这一步,稍为复杂一点了,这是对那些血条之类的东西的扫描。作者说知道数值是0

到500之间,但没说是怎么知道的。我的看法是,这东西一方面靠猜,另一方面靠试。你

也许会说,比如血条或蓝条,上面或下面不是有数字吗?是的,有些有,有些没有,但有

时,血条上面有个表示血的数字,说血是548,但你就知道它是真的按这个值存在内存的

吗?不一定的哦,很多游戏的开发者,可能会用某一个方式存真正的血的数值,而用另一

个方式显示,例如,最简单的就是,真正的血是你看到的数值的3倍,例如上面说的548,

其实在内存可能是1644,而当它要显示的时候才把1644除以3然后显示出来,所以如果

你受这个显示数字的误导,结果就有可能找不到真正的地址。所以关于那些以长度表示的

数值,一般还是靠猜,然后根据猜测来找。还有,CCB友情提醒一下,其实有时在找到的

数值比较多的时候,试试在扫描的过程中,确认数值确实没改变的情况下,多加几次

"Unchange"(无变化)扫描,这样可以再减掉一些无关的结果。另外,其实在这一步,如果

你够聪明,每次点了Hit me之后记住血条上面显示的减少的数字,再在CE中输入刚才的

数字(负号不要,负号只是表示它是减少的),并选择'Decreased value by',即“减少了什

么数值”,这样也能更快地找到准确的地址,但这种方式是在要知道减少了多少这个具体数

值才有用。好了,继续下一步吧。

第四步:

【第四步:浮点数(密码:890124)

在前面的教程中,我们使用字节来扫描,但有些游戏使用了叫做“浮点数”的记数方

法。

(可能是为了防止简单的内存扫描)

浮点数是带有小数点的一些数字(如5.12或11321.1)

如下边你看到你的血(Health)和子弹(Ammo)。两者都以浮点数储存,但血是储存为

float(浮点数)而子弹是储存为double(双精度浮点数)(CCB:这是数据类型的术语,float

和double都是浮点数,但float为单精度数,而double为双精度数,它们在电脑里面占

用的字节数长度不同,而所能表示的精度也不同,看不懂不要紧,反正知道这是两种不同

的浮点数就行)。

点击Hit me可以减少一些血,而点击shoot(CCB:其实是Fire)可以用掉0.5的子弹。

你得把这两者都修改到5000或者更多才能进下一步。

精确数值扫描方式在这一步能工作得很好,但也许你想试试其他的扫描方式。(CCB友

情提示:扫描子弹的时候试试'Decreased value by'方式就不错,数值填入0.5,很快就能

找到)

这一步,其实也没什么,只是让你熟悉不同数据类型的扫描。再次提醒一下,其实有

时游戏的开发者为了不让你太容易扫描到数值的地址,所以有时故意颠倒黑白,例如你看

到有小数的地方,有时在内存却是用整数来保存,而你明明看到是显示为整数的数值,却

有可能在内存中是用小数来保存,所以有时不要轻易地被你看到的东西误导,特别是在多

次搜索不到结果的时候,有时要换换别的方式,不要让狡猾的游戏开发者骗了:)。

第五步:

【代码寻找(密码: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的方法之一了,就是先找到地址然后找到指

针,找到指针就好办了。

【做得好,你完成了CE的教程了,再玩玩这个TUT并学习一下其他的扫描方法怎样

工作的】

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

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

代码注入过程CE 6。1

第七步:代码注入 (密码=013370)

Step 7: Code Injection: (PW=013370)

这个窗口的下方的文字Health:100还有"Hit me"按钮。

先用精确搜索,搜索出数值,并将数值加入列表

点击Next Scan →Found:1 双击列表上找到的地址将它加入下方的列表并右击地

址,即Address下面

(不是数值哦)。在右键菜单选择“Find out what writes to this address”,这会弹出

“The following "一个空的列表窗口。选择TUT点击Hit me这就会

将改变的地址

加入空列表中并选择它后点击Show Disassembler按钮,这会弹出“Memory

Viewer”窗口。在窗口列表

选择最上面的地址,然后再菜单处点Tools并选择Auto Assemble弹出空的列表,

在"Auto Assemble"的

菜单点Template然后选择Code injection,这会弹出“On what address "

的对话板,

点OK键回到"Auto Assemble"窗口内容如下:

----------------

0045673B:

jmp newmem

nop

returnhere:

mem://this is allocated memory, you have read,write,execute access

//place your code here

originalcode:

dec [ebd+0000030c]

exit:

jmp returnhere

----------------修改后如下:

0045673B:

jmp newmem

nop

returnhere:

mem://this is allocated memory, you have read,write,execute access

//place your code here

add [ebd+0000030c],3

originalcode:

dec [ebd+0000030c]

exit:

jmp returnhere

---------------完成修改

点击Write code按钮会弹出Confirm对话板,点Yes,只时会弹出Cheat Engine

信息板,点OK键。

选择TUT点击Hit me按钮,做对了就可以点Next键进入下一步骤咯。^~^

完成第七步骤代码注入课程。

第八步: 多级指针 (密码=525927)

Step 8: Multilevel pointers: (PW=525927)

这个窗口的下方的数值2025 还有Change value和Change pointer两个按钮。

开始指针扫描,选择CE输入扫描数值,如有看到New Scan先点击它后才输入数值。

Value :2025

Scan type :Exact Value

Value type:4 Bytes

点击First Scan →Found:1 →选择TUT并点击Change value →双击列表上找到的

地址将它加入

下方的列表并右击地址,即Address下面(不是数值哦)。在右键菜单选择

“Find out what writes to this address”,这会弹出“The following "

一个空的列表窗口。选择TUT点击ChangeValue这就会将改变的地址加入空列表中

并选择它后点击

Show Disassembler按钮,这会弹出“Memory Viewer”窗口。在窗口列表选择最

上面的地址并记住它,

然后点击列表右边滚动条上面的箭头,将地址滚向下面要记住刚才的地址哦,

列如:

5. :00456153 - a1 18 c.. - mov eax,[0045cc18]

这记下0045cc18

4. :00456158 - 8b 40 0c - mov eax,[eax+0c]

3. :0045615B - 8b 40 14 - mov eax,[eax+14]

2. :0045615E - 89 00 - mov eax,[eax]

1. 是最上面的地址 :00456160 - 89 70 18 - mov [eax+18],esi 向下滚动后到这里,

现在要写下这以上的4个地址的数值,这要从下向上数。我将倒数的地如下:

1. :00456160 - 89 70 18 - mov [eax+18],esi

这记下 18

2. :0045615E - 89 00 - mov eax,[eax]

没有+号这记下 0

3. :0045615B - 8b 40 14 - mov eax,[eax+14]

这记下 14

4. :00456158 - 8b 40 0c - mov eax,[eax+0c] 不要0这记下 c

记下了就选择CE然后点击“Add address manually”,这会弹出Add address对话

板,

将Pointer旁边的小方格打勾,点击3次Add pointer按钮,这样就有4个Address

of pointer,

然后将数值填入

Address of pointer:不填 Offset (Hex):18

Address of pointer:不填 Offset (Hex):0

Address of pointer:不填 Offset (Hex):14

Address of pointer: 0045cc18 Offset (Hex):c

开始的几步与在第 6 步教学中操作基本相同。找出是什么存取这个数值的,然后检查

指令和可能的基指针数值,以及它的偏移量,

并将这些数值填充或把它记下来。但是在这里与第6步教学中情况不同的是:你找出

的数值其实也是一个指针。你必须依据这些数值,使用同样的操作方法找出指向这个指针

的指针。找出什么访问你发现的那个地址,审查汇编指令,

留意可能的指令和偏移量,并在下一步查找过程中加以使用。这种过程一直进行,直

到不能更进一步查找为止(通常当基址是一个静态的地址时,这个地址将以绿色显示)。

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

备注2: 在某些情况(像本步教程)下,一个被推荐的做法是:改变CE软件的设置中“代

码查找器Code

Finder)”中的相关设置。这样,当你遇到像 mov eax,[eax]

的指令时,调试寄存器(Debugregisters)将显示被改变之后的值,使得能利用这个值

更容易找出指针。

备注3:

如果你仍在往下读。你可能注意到,当你查看汇编指令时,这些指针是在相同的代码

块位置被读写。这种情况并不总是会发生,但是当你在查找某个指针遇到麻烦的时候,真

的有很大用处。

第8步教学步骤(另解)

1.搜索生命值

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

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

[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 =>第一项 =>

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,本步教学终于算是完成

对上面完成步骤的补充说明:

除了最后以绿色显示的0045cc18值之外,其他的Eax值都要以你自己找到实际数值

为准,步骤中的数据只是示例,重要的是原理方法掌握就OK了,千万别以步骤中的值来

找哦。

第九步:注入++(密码:31337157)

在这个步骤中,我们会尽基本上与在第7步相同,但现在一点点变得更加困难。

现在你要编辑代码实现当生命值大于等于30,把生命值改为1000,如果小于30则

改为2000

这使用auto assembler脚本API CALL调用一些例程,以获取当前时间,但这里使用

C-Script注入会更容易些

找到生命值的地址,打开Script engine(在Memory view中按CTRL+ALT+A或者

菜单项Tools->Script

engine)

具体步骤如下:

1.搜索生命值

2.将找到的地址加入列表(我找出来的地址是D629F8)

3.在地址上点右键“Find out what writes to this address”,然后“Hit me”

4.在"the following opcodes "窗口中得到汇编代码,点击"More

information"

6.在"Extra info"窗口中得到代码:0045dea - dec[ebx+310]

7.在"the following opcodes "窗口中点击Show disassembler出现

"Memory

Viewer"窗口

+Alt+A出现"Script engine"窗口

9.填入下列代码

#include

struct tm *timep;

time_t c;

c=time(0);

timep=localtime(&c);

if (timep->tm_sec>=30)

*(int *)0x00D629F8=1000;//第二步中得到的地址

else

*(int *)0x00D629F8=2000;//第二步中得到的地址

10.点击菜单"Inject->Inject into current process"

11.出现"Auto assemble"窗口,出现的代码中有一句"Call 010A0105"

12."Template->Code injection" 填入0045dea(第六步中得到的地址)

13.得到如下代码:

//Call this code to execute the script from assembler

call 011E0103 //(该值可能不同)

//eax==0 when successfully executed

//'call underc_geterror' to get a pointer to the last generated error

buffer

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(originalcode)

label(exit)

00455dea:

jmp newmem

nop

returnhere:

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

originalcode:

dec [ebx+00000310]

exit:

jmp returnhere

14.修改成如下代码:

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(originalcode)

label(exit)

00455dea:

jmp newmem

nop

returnhere:

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

originalcode:

call 011E0103 //(该值可能不同)

exit:

jmp returnhere

15.点击Execute

16.回到"Cheat Engine Tutorial",点击"Hit me",这时"Next"就变得Enable

选择TUT点击Next进入.......Tutorial End。噢!完成了第九步骤。嘻嘻嘻!

本文标签: 数值地址扫描找到使用