|
|
CE(CheatEngine 5.6)0 q- O( v, S7 D( T
请到本人网盘下载:http://feilusaidi.ys168.com9 k( Q. }2 G6 o$ R1 y& i7 u( l
" q' p9 d7 h: n$ T/ Y
CE使用实例:
2 m% I$ }/ i8 s
9 l/ O9 ~; A5 u1 m. T1 ^- H现在,我们来开始一步一步学习CE的使用吧,通过完成CE带的那个TUTORIAL,按它的要求一步一步做完,如果你做得到,你就基本上算是掌握了CE的用法了。
P/ d6 ^# e; K& W* k, N+ M) B9 i( H) ^
CE带的TUTORIAL,是英文的,不过没关系,我在教你使用CE来完成这个TUTORIAL的同时,会把TUTORIAL上面的所有英文都翻译出来让你看明白,所以不用怕。! i. R5 x& T1 C# `% o1 N
" }3 g8 b& `3 V4 F, u
CE带的这个TUTORIAL,是CE作者做的用来让你练习的一个程序,它里面也和游戏一样,在每一个步骤都会有一些类似血(HEALTH)或子弹数量的东西,并且你点了上面某个按钮之后,这些数值也会象游戏中一样减少,这样让你象是修改游戏一样,去找到它的地址,并按TUTORIAL上面的要求修改,当你按它的要求做到了,才让你做下一步。而在第一步时那个输入密码的地方,不是说这个TUTORIAL要输入密码才能运行,而是有时你需要从中间某一步开始时,输入相应的密码会直接从某一步开始,而不用每一次都从第一步开始的。而你每完成一步之后,它也会给你相应的密码。* A. N( {! R. f8 S
. H. D3 ?& L, ^) j! }. s
好了,也许你等不及了,那么我们现在就开始吧。/ d, r$ \8 O7 r/ }2 C/ V
5 l" i8 [9 A+ z* J2 |! {第一步:
; R( ^4 d& l$ h8 G$ m+ K0 x2 D/ L2 ^/ S0 E9 i7 ~' N! |, [
先在开始菜单上找到CE的程序组,找里面的“Cheat Engine Tutorial”(以下简称TUT),点击运行。这个时候就出来这个TUT的对话框,上面一大段英文,而Next这个按钮是灰的,为什么呢?让我翻译一下上面的英文吧,你就明白。TUT上面的英文的译文,我会用【】号把它们括起来。
! J0 j2 i' n+ G. b0 y- R! @: W, }! L) ~: j5 R9 v& y
【欢迎你来到CE的教程(V2.4)) `" C7 K( _; N' Z6 k& A; F0 W% k$ y
这个教程试图解释在游戏中作弊的基本步骤,并让你更熟悉CE的使用。
* |8 O6 s/ G: h6 a
% q$ X8 i/ g( _# U7 N3 l2 H: v首先运行CE,如果你还没运行的话(CCB:因为还没运行,所以Next按钮才是灰色的:)。
* W0 Y: \& U( X ^然后点击"open process"按钮(在左上角那个有电脑图标的那个)$ M( ?/ h" _" f) W O+ W! u
, K" e3 H, G8 B
当进程列表窗口打开后,找到这个教程,进程的名字应该是“tutorial.exe”,除非你把它改名了。选择它,并点击OK。现在先不要管其他所有的按钮,如果你喜欢,以后再研究它们。
$ L& E1 T6 o V) g: H' v) |. Y: M) j* g4 h
当这一切都做对了之后,进程选择窗口将会消失并且在CE上方会显示进程名。
# C. L$ [' A1 s6 ]. Z1 I- E p% h4 _: y9 j3 u) C
现在,点击NEXT按钮继续到下一个步骤(或者输入密码而进到你想去的其他步骤)。
0 p7 d1 e* U9 k( [, D- Y; q】
" o" P6 p( ~2 Z5 J" v
0 R1 ~( d7 [1 }% U1 b* u; ^好了,上面的这些英文,我翻译过来了,所以这一步应该不需要我再补充什么,看这些译文应该能明白怎么做,就是开TUT,开CE(哪个先开都没关系),然后点击CE左上的那个选择进程的按钮,选择这个TUT的进程,这样就可以点NEXT进到下一步了。
4 |6 d. y1 r% P, P8 g* k, J
4 P# z0 {! r& Z( M1 `第二步:
, i/ S8 v. L0 Q$ h( R4 ^% B5 O( h6 _ T8 X( y
【第二步:精确数值扫描(密码:090453)
3 g( d% c( l; U% V$ i现在你已经在CE中打开了TUT,让我们进入到下一步吧。. @5 ~, [% F/ C; F3 I/ {5 W
; l" S) M7 T' r/ L0 [你看到在这个窗口的下方的文字Health:XXX3 Q8 | b$ w! L9 C y- C+ T# D
每次你点击"Hit me"(打我)时,你的Health(血)会减少。5 }, L- q+ \ y7 S- `! r7 ? ]& U
( o; c" A: _, B
要进到下一个步骤,你必须找到这个数值并把它改为1000; O8 ~$ i" z/ y8 ^5 Y2 Q- u: ]& u/ \) R
3 @6 `+ Q# p) B9 m1 m7 h4 @要找到这个数值,有几个不同的方法,但我会告诉你一个最简单的,'Exact Value(精确数值扫描)':& \5 w7 ~! I0 m
首先确认数值类型设置为2字节或4字节,1字节也可以的,但当你最后在修改它时你会遇到麻烦(虽然很容易解决)(CCB:大家不会忘了吧?1字节表示的最大数值是255,而这里要你改为1000,所以虽然用1字节能找到,但要改却要连前一字节一起改,所以有点麻烦,不过不是大麻烦)。8字节可能也可以,如果这个地址后面是0的话,不过我不敢打赌。Single, Double, 以及其他的扫描方式不行,因为它们储存数值的方式不同。$ i( e2 R/ {1 v" }5 z0 r
+ B/ }$ {6 W5 p) [
当数值类型设置正确后,确认扫描方式设置在'Exact Value'
. `; j! N2 a3 ]把血的数值填在数值输入框上,并点击'First Scan(首次扫描)'0 n9 H0 l& T7 o8 s
过一会儿(如果你有一个非常慢的电脑的话)扫描完成并且扫描的结果会显示在左边(如果找到的地址的数量少于设置的数值的话)。: ?1 I* ]2 R4 g5 t
( e" l& g8 q" k; ~4 [6 ~如果你找到多于一个地址而你不知道哪一个是正确的地址的话,点击TUT上的'Hit me',并把新的血的数值填到数值输入框,并点'Next Scan(再次扫描)'9 D: T2 s1 I8 E
重复这些步骤直到你确认你已经找到它的地址了(在地址列表上只有一个地址)
: A9 G$ C- `( `1 }$ l+ c: S! h/ F! x1 e8 C7 w
现在双击左边列表上的地址,这样会让这个地址移动到下方的列表上并显示它的当前数值。9 H$ Q! N+ t L8 L6 C, | Y: w' E$ A
双击(下方列表的)数值栏(或者选择它,并按回车),并把它修改为1000。
( E. U3 L6 s: R$ ` G1 u
0 j- L. j" o7 k% ^如果一切都OK,NEXT按钮将会变成可点击的了,你就准备好了进入下一步了。】
6 K; D& i1 @# I2 A) ], t' N0 @; T
这一步,也不用我再补充什么了,这个TUT已经说得很清楚,这是使用CE的最基本功能,即找到数值,如果扫描结果太多,试图改变数值然后再次扫描,直到结果剩下很少或者1个为止,这样你就找到了要修改的数值的地址,并且也就能修改它了。到这一步,你已经能对付很简单的游戏了,不过现在的大多数游戏都没这么简单,但至少你已经学到最基本的一步,就是精确数值的扫描和修改了。现在就点击NEXT进入下一步吧!5 N% G1 k. ^1 b* l/ F, U4 i! [
+ K9 r; j7 e/ ^. u4 j& F& e第三步:
6 m9 b% R# {+ V" G* s9 o1 d* q( g2 ~# Q
【第三步:未知初始数值(密码:419482)
$ B' ^+ y6 v0 i! sOK,看来你已经理解了怎样使用精确数值扫描找到一个数值了,让我们进入下一步吧。) J1 y. x( x2 M, }* A1 K }1 S
; @ T3 Y$ X1 |% g0 ^
在上一步中我们知道初始数值所以我们进行了精确数值扫描,但现在我们有一个进度条,我们不知道它开始时的数值。
& K4 [5 U: ~, K7 Y( l我们只知道这个数值是在0到500之间,并且每次你点'Hit me'之后你会减一些血,每次减的血量会显示在进度条的上方。
# E& m" z0 ~9 T3 V1 a3 p2 L
5 F. D, j# ~3 m7 \, a同样的有好几个方式找这个数值,(例如使用“减少了什么数值”的扫描方式),但我只解释最简单的方式,“Unknown initial value”(未知初始数值)和“Descreased value(减少了的数值)”。" f. M! d# n7 L L
因为你不知道现在它的数值是多少,所以使用精确数值不行了,所以选择扫描方式为"Unknown initial value",同样的,数值类型选择4字节,(大多数WINDOWS应用程序使用4字节数据): g+ F u/ T- |7 g% B
点击'First scan'并等它扫描完成。8 ^, `- m! ^* ?# Z! V" l: j4 r
8 Q @3 _. m8 S. i当扫描完成后点击'Hit me',你会掉一些血(掉的血量多少会在血条上方显示几秒然后消失,但你不需要这个数值)
. R: o# R7 O/ B) O* k& j; l& `现在回到CE,并选择'Decreased Value'(减少了的数值),并点击“Next Scan”* V w& F2 v E! E* [* g' Y9 j; l5 |
当扫描完成后,再次点击'Hit me',并重复上面的步骤,直到你找到了若干地址。" H2 Y. O3 ?! @& n! b. a# v1 {
- R: T0 z2 ?0 F K我们知道这个数值是在0到500之间,所以选择比较象我们要的那个地址是,并把它加到下边的列表。( ?9 k! \, q' i6 s' _% J3 \% @; @
现在,把它改为5000,才能进到下一步。7 l% |1 ]/ K1 U. Q
】) v$ N5 v- ?- _
. d$ Q, M3 y I/ h# z( N# f
这一步,稍为复杂一点了,这是对那些血条之类的东西的扫描。作者说知道数值是0到500之间,但没说是怎么知道的。我的看法是,这东西一方面靠猜,另一方面靠试。你也许会说,比如血条或蓝条,上面或下面不是有数字吗?是的,有些有,有些没有,但有时,血条上面有个表示血的数字,说血是548,但你就知道它是真的按这个值存在内存的吗?不一定的哦,很多游戏的开发者,可能会用某一个方式存真正的血的数值,而用另一个方式显示,例如,最简单的就是,真正的血是你看到的数值的3倍,例如上面说的548,其实在内存可能是1644,而当它要显示的时候才把1644除以3然后显示出来,所以如果你受这个显示数字的误导,结果就有可能找不到真正的地址。所以关于那些以长度表示的数值,一般还是靠猜,然后根据猜测来找。还有,CCB友情提醒一下,其实有时在找到的数值比较多的时候,试试在扫描的过程中,确认数值确实没改变的情况下,多加几次"Unchange"(无变化)扫描,这样可以再减掉一些无关的结果。另外,其实在这一步,如果你够聪明,每次点了Hit me之后记住血条上面显示的减少的数字,再在CE中输入刚才的数字(负号不要,负号只是表示它是减少的),并选择'Decreased value by',即“减少了什么数值”,这样也能更快地找到准确的地址,但这种方式是在要知道减少了多少这个具体数值才有用。好了,继续下一步吧。# S6 A" w9 K( _7 W
) m% K2 v, d2 d6 I" P$ I5 M) Q- k第四步:% P8 N+ @+ j: g! B# S
4 x. g* g( s$ u【第四步:浮点数(密码:890124)/ k" _/ W* s" F7 ]- H: U
在前面的教程中,我们使用字节来扫描,但有些游戏使用了叫做“浮点数”的记数方法。
" f# F+ i+ \5 C5 D9 {(可能是为了防止简单的内存扫描), L! }6 N* w- @8 `1 [& G/ `9 R) d8 \
浮点数是带有小数点的一些数字(如5.12或11321.1)5 g9 T; q$ e4 k0 ]5 f
+ N( M3 F# y& H- f
如下边你看到你的血(Health)和子弹(Ammo)。两者都以浮点数储存,但血是储存为float(浮点数)而子弹是储存为double(双精度浮点数)(CCB:这是数据类型的术语,float和double都是浮点数,但float为单精度数,而double为双精度数,它们在电脑里面占用的字节数长度不同,而所能表示的精度也不同,看不懂不要紧,反正知道这是两种不同的浮点数就行)。
3 L: ~" M# x& T z' p: M7 v点击Hit me可以减少一些血,而点击shoot(CCB:其实是Fire)可以用掉0.5的子弹。, k( }- C, h; K6 n# ]! }- X& l! l
. c% I, |8 ]! j8 J T9 T
你得把这两者都修改到5000或者更多才能进下一步。
4 B0 K$ t, u! T4 a# _. _' o/ t; m& U* r3 K! `
精确数值扫描方式在这一步能工作得很好,但也许你想试试其他的扫描方式。(CCB友情提示:扫描子弹的时候试试'Decreased value by'方式就不错,数值填入0.5,很快就能找到)
W. G: a) f: `0 |' [】% x6 h' d* V& W' y4 r; a; J
6 [- g1 n( G5 g I
这一步,其实也没什么,只是让你熟悉不同数据类型的扫描。再次提醒一下,其实有时游戏的开发者为了不让你太容易扫描到数值的地址,所以有时故意颠倒黑白,例如你看到有小数的地方,有时在内存却是用整数来保存,而你明明看到是显示为整数的数值,却有可能在内存中是用小数来保存,所以有时不要轻易地被你看到的东西误导,特别是在多次搜索不到结果的时候,有时要换换别的方式,不要让狡猾的游戏开发者骗了:)。
$ c8 X) d# U7 R/ e
t6 E4 q) \4 W' X5 ^第五步:" D) p6 i& h( x+ W( j7 i
! T/ v* `! D7 M$ g( f {2 x
【代码寻找(密码:888899)
# L7 o5 ] p1 _有时一些东西的保存位置在你重新开始游戏时会改变,甚至是在你玩的时候也会变,在这种情况下,你用二件事仍然能做出可以用的内存列表。
: [2 } t, k; B+ O" k在这一步我会描述怎样用寻找代码功能。( }* T) V8 s& N7 v3 O- m
5 i2 j- K" _4 `/ k! i0 a
下面的数值每次你开始这个TUT的时候会存放在不同的位置,所以一个普通的内存地址列表将会不适用。
( G* u: x( u: T- H/ _首先找到这个数值的内存地址(你能进到这一步,我假设你已经知道怎么做了)
' {6 G( L: R- @7 L, @$ L% h当你找到地址后,右击CE中的这个地址,并选择“Find out what writes to this address”(找到是什么改写这个地址),一个窗口将会出现,上面会有一个空的列表。
2 e7 K9 L# M& v# y' i% W/ d) }然后,点击这个TUT上的'Change value'(改变数值)按钮,回到CE,如果一切都做得对,会看到一个地址和一些汇编代码。$ e' G) G1 }) U- u! V
点击这个地址并选择Replace(替换)选项把它替换成什么也不做的代码,这样还会将代码地址加到高级选项窗口上的代码列表(它将会一起保存,如果你保存地址表的话)。
1 l& {0 ^% [+ P/ j( r6 @2 x+ a+ q( H$ E3 q
点击Stop,这样游戏(CCB:指这个TUT)将会再次正常地运行下去,并点Close关闭这个窗口。
5 _; S9 H0 s! S: D! P7 l; Y4 y现在,点击这个TUT上的Change value按钮,如果一切都做对,NEXT按钮将会变成可点击的了。
9 Y: x# O: y1 Z+ G+ H
U, `# w0 |8 h3 ^注:如果你以足够快的速度锁定这个地址,这个NEXT按钮也会变成可见的。
- _. ~3 q9 i% Y! W* [, U]】
+ i5 |# Y6 K$ ?: Q
. d* l# P: d$ ?$ o+ J# a. J越来越精彩了,现在不但教你找地址,还教你找那条修改这个地址的指令了,虽然,你还不太清楚怎样手工修改找到的地址,但至少也比单纯地找数值的地址并修改和锁定要好一些了,不是吗?别急,更精彩的还在后面呢。5 g2 M8 J* X5 c* E6 Y" x) s
8 Z1 l( v! B9 a4 B
第六步
E/ \6 ]6 ]* W) }. t( B( T3 Q8 k1 u6 M9 Y
【指针(密码098712)9 Q5 [6 F( T' E2 }
在上一步我解释了怎样用代码寻找功能对付变化位置。但单独用那个方法不容易找到地址来修改为你要的数值。
; h; h L" m. Z: m; r" G1 E1 O& |这就是为什么要用到指针了:; _; m }. m2 B
/ H/ P' e2 G/ q7 d( P" f/ H a0 C
在TUT下面你会找到两个按钮,一个会改变数值,另一个不但会改变数值并且还会改变数值在内存中的位置。 B( [$ m1 ^8 w% O* c, |6 |9 n
在这一步,你不需要真的懂汇编,但如果你懂的话会很有帮助。
; X, T, x8 w1 q- U/ V' M5 f: d2 g; w4 y- @' n) B: A& k2 Y0 V6 v
首先找到数值的地址,当你找到后,再找找是什么在改写这个地址。再次改变这个数值,这样会找到一个代码地址,双击这个代码地址(或者选择它并点击More info),这样一个新的窗口会打开并显示详细的信息告诉你当这个指令运行时会发生什么事(CCB:这个新出来的窗口上,那条指令会是红色的)。如果这个汇编指令里面没有包括一个在方括号中的东西,(CCB:说明这个不是我们要的)那么再看看代码地址列表中另一个代码地址。如果有方括号,就是说CE认为找到了数值的指针了。
# n8 A/ s/ `: u7 C回到CE主窗口,(你可以让那个扩展信息窗口开着,但如果你关了,要记住在方括号中间的内容)(CCB:要关了那个有代码地址列表的窗口,才能回到CE主窗口,但扩展信息窗口可以不用关掉),并做一次4字节的扫描,扫描扩展信息窗口告诉你的十六进制数。(CCB:就是方括号里面的内容,如果方括号里面是[eax],那么看看扩展信息窗口下面EAX=后面的数值)。当扫描完成时它可能返回一个或几百个地址。大多数情况下你要的会是最小(CCB:指地址最小,也就是排在列表的最上面)那一个。现在点击手工添加内存地址(Add address manually)并在pointer(指针)这个选项上打勾。
: W! K, G( k0 G( l, Q0 Q: O4 | X9 D& ^8 A6 q, Q1 ` D
这个窗口将会改变,并允许你填入指针的地址和偏移量。. F! |) L3 `8 I( f, Z6 x8 [% O
在地址那里填入你刚才扫描到的地址。
" j. G$ ? E) F: D如果汇编指令在后面有一个计算(例如:[esi+12])那么把数值填在后面,否则让它保持0(CCB:就是如果有类似那样的计算,把12这个数值填在偏移量(OFFSET)那里,否则那里填0),如果是更复杂的指令,看看它的算式。
2 o( L$ r l* ^8 F- ~1 `4 g
" N9 }3 v0 k3 i9 q% n7 x* s举例说明更复杂的算式:
! {( `8 j C& M7 R7 O& W- J- X[EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.(CCB:这时各个寄存器的值到底是多少,要看扩展信息窗口下方,那里有各个寄存器在执行这条指令时的值)9 o8 a% p0 p! h
在这个情况下EDX会是数值的指针,而EAX*2+00000310则是它的偏移量,所以你要填的偏移量会是2*4C+00000310=3A8.(这些都是在十六进制下计算的,使用WINDOWS的计算器在科学方式下用十六进制计算)。
+ a; ]6 R# C4 H9 @& E' s9 E9 ^( [9 o3 {6 t9 `' ?
回到TUT(CCB:?),点击OK,这个地址将会加到列表上,如果没搞错,将会显示P->xxxxxxxx,xxxxxxxx会是你找到的数值的地址。如果不正确,那你一定是哪里做错了。
! M) v* M1 j* G7 X现在,使用那个指针改变数值为5000并锁定(就是在下面的地址列表中,点最前面FROZEN那一栏的勾)它,然后(CCB:应该是这里才回到TUT吧?),点击'Change pointer'按钮,如果一切正确,那么NEXT按钮将变成可见的了。( A2 j% `( c$ o/ V1 {
) d9 K; u, B$ o6 J6 A! X额外信息:$ A$ s+ E' n& q& I/ n8 H3 \$ {
在这个TUT中,事实上数值是由一个指针指向另一个指针(CCB:再指向真正的数值,就是使用了“指针的指针”,有点象绕口令:),但要完成这个TUT只需要一个指针。要找到这个指针(CCB:是说要找到指向指针的另一个指针),只要搜索是什么改变那个指针。
$ @+ c( G( E. V# \! c/ M8 V2 w如果你懂汇编,你可能会看到类似这样的:! i) f8 R6 i- [' R! x6 J7 N, H/ Z
mov eax,[ebp-4]4 n8 i M: f% s9 p' w1 g! C) e
mov eax,[eax+310]2 J: f7 h9 e' S8 Y* f
这些别搞混了,只使用扩展信息窗口告诉你的数值。ebp-4指向堆栈中保存了指向这个指针的指针,但堆栈的位置总是在变化,所以不要搜索ebp,而要搜索eax的数值。
1 _$ w& W c* \) U】9 p1 C6 f# z2 P7 M! X5 d6 _
* v" I8 h9 k0 Z; _$ q- e/ J$ ~9 i这一步,确实就够复杂了,也许你到这一步真的有点想放弃了。不过,如果我告诉你,这是这个TUT的最后一步了,你还会想放弃吗?呵呵,坚持啊,看不懂就问,把CCB这家伙问倒了才好呢:)。其实这就是对付DMA的方法之一了,就是先找到地址然后找到指针,找到指针就好办了。/ Q; X, e; B `7 b/ ~) g8 F
! N8 H" W9 s4 S( Y
第七步 密码=013370
* ?. b2 d& W8 \8 J S
6 |% M* D0 I0 v% p/ }% z, t3 x. B代码注入是一个将一小段代码注入到目标进程中的技巧,然后使这个进程执行你写入的自己的代码。9 U3 D- d8 J6 S+ a8 ^
% T# P& n; ?. E& |, v在这一步教程中,你将有一个生命值和一个按钮,这个按钮每按一次将减少1点生命值。你的任务是使用代码注入来增加这个生命值,使得每按一次按钮增加2点生命值。. Z9 m1 L2 ]- M
! _* u5 |' [$ }! F# @开始查找这个地址然后进入“找到写这个地址的东西”。
. i3 M$ W4 K6 u3 N% k然后减小生命值,当你已经找到地址后,显示反汇编程序(Show disassembler), 并找到这个地址,然后打开自动汇编窗口(Tools菜单->Auto Assemble)(Ctrl+a)
8 E, l4 e0 a) J* M在tmplate上点击然后再点击Code Injection,并给出减少生命值的地址(如果程序没有正确填写的话)0 }3 l C5 E, l8 e6 |
% b0 l: T' t* J* M" V* m% G$ Z' ]那样,将产生一个基本的自动汇编程序窗口你可以用于你的代码.; |1 k6 A2 K& u( ^6 W) X
8 o5 u2 ~* o- o" i0 z' m3 m7 O) R注意alloc, 那将用于为你的代码分配一块内存, 而在Win2000系统之前, 这种行为存在安全隐患,是不安全的(HZH:在Win200以前,对系统内存进行分配及代码查找之类的操作,可能会导致系统崩溃),幸运的是这种情况在win200以后的版本得到改善.
" v- a* E- i) T4 T* m1 [" f5 v8 o6 b: N* o3 W
同样,也要注意line newmem语句及原始代码,以及文本"Place your code here",正如你猜测的那样,在这儿写下你每次增加2点生命值的代码.' @0 P1 p6 I1 `$ ?
在这种情况下,一个有用的汇编指令是"ADD".% a+ ]! o$ `2 b$ C
下面是一些示例:9 o8 `: J, j# Q; Q2 l1 O
"ADD [00901234],9" 使[00901234]地址的值增加9 w: i% S( J- e. Z7 f% r$ t* n
"ADD [ESP+4],9" 使地址指针[ESP+4]的值增加9- h5 Z& }) C, l4 k
5 N; x8 g, a' I5 m2 L( d
注意:
& c' w4 M% Y/ @6 h) ^ `推荐你从原始生成代码中删除减少你生命值的那行代码, 否则你将不得不增加3点生命值(你增加3点,而原始代码减少1点,那样最终结果是增加2点),这样可能会造成混乱.$ L% I1 ^8 Q7 M2 o" ?$ C8 }
" O% b) K5 z" S0 v: Y
注意2:# _4 O* w* V/ d5 A0 d+ A( n
在一些游戏中,原始代码可能存在在多指令之外,并且某些时候(并非一直如此),这可能会发生在其他地方跳转到你的跳转指令结束,那样将引起未知的行为.如果这种情况发生的话,你通常应该查看附近的指令,查看跳转情况并进行修改,或者选择使用一个不同的代码注入开始地址." m1 c3 @+ U+ J1 ^1 U. D
, {& E7 w$ G$ d- G! l
最后,点击 Write code.0 k: Q, L, R" \* q
3 L8 [- t2 _, x) O$ D1 Z
2 W5 _9 M# X7 ~% ?. w8 o/ S第八步 多级指针: (密码=525927)1 G* f! J! f7 H' O5 R, h
这一步教学将会解释该如何使用多级指针。
/ q( B- K+ n0 v" H- U在第 6 步的教学中你应该了解到了简单的1级指针的概念和用途, 以及如何由数据的地址找到真正的基址。
; [8 p( L8 q3 _0 P6 D) m o在本步教学中,你将面对的是4级指针的挑战。它将是一个指向指针的指针的指针的指针,最终指向表示生命的数值。$ v% W; [, ^* B% ~3 G
- O- G' \. H/ V5 n/ o; w! D& c2 x5 Z
开始的几步与在第 6 步教学中操作基本相同。找出是什么存取这个数值的,然后检查指令和可能的基指针数值,以及它的偏移量, 并将这些数值填充或把它记下来。但是在这里与第6步教学中情况不同的是:你找出的数值其实也是一个指针。你必须依据这些数值,使用同样的操作方法找出指向这个指针的指针。找出什么访问你发现的那个地址,审查汇编指令, 留意可能的指令和偏移量,并在下一步查找过程中加以使用。这种过程一直进行,直到不能更进一步查找为止(通常当基址是一个静态的地址时,这个地址将以绿色显示)。! y- |3 J ^; O3 I" n( y
y$ n0 r# E* S; C8 S6 N点一下“Change Value(改变数值)”让教程程序改变下生命数值。
$ b" G* _8 N6 A6 o$ g" r如果你认为你已经发现指针路径单击“Change Register(改变寄存器)”按钮。指针和数值将随之2 w, S0 W: X4 u6 d$ Y
改变,并且你将有 3 秒时间来锁定地址到 5000。
2 B3 T% ]3 q4 B% V# W% o. L! D( q H+ ~4 ?# |, @# i% l
备注1: 这个问题也可以使用自动汇编程序脚本或者使用指针扫描器加以解决。
/ g, F- Z( \' R2 [, |* J3 a7 s& z. G; c
备注2: 在某些情况(像本步教程)下,一个被推荐的做法是:改变CE软件的设置中“代码查找器Code# l9 I; h: \1 g6 p4 p$ o
Finder)”中的相关设置。这样,当你遇到像 mov eax,[eax] 的指令时,调试寄存器(Debugregisters)将显示被改变之后的值,使得能利用这个值更容易找出指针。
" T6 _( h5 G+ v0 i' e6 i+ Y O2 |1 R2 e) K( F1 O1 `) o% }
备注3: 如果你仍在往下读。你可能注意到,当你查看汇编指令时,这些指针是在相同的代码块位置被读写。这种情况并不总是会发生,但是当你在查找某个指针遇到麻烦的时候,真的有很大用处。
) M+ |6 x9 a* D* }) t# @; [) m, D3 |$ w8 n- h
第8步教学完成步骤 B' L: F4 |; d! h" i/ j) a. s
: v: d+ w4 W0 {8 U/ F1.搜索生命值
! f* z8 A4 E e& ^( e
. {- v% G) p8 P2 L2.将找到的地址加入列表# k2 C) B# ~$ D
$ p4 {5 V5 {$ v0 P% l
3.在地址上点右键“找出什么读写这个地址”,然后“change Value”
! U4 g/ m) s! S3 h6 M( M
5 Y+ K1 I- t5 n' b, l; `" k4.mov [eax+18],esi ==> eax=009ca668(大家找到的肯定不同,后面有说明)==> 搜索009ca668 ==>009ca5ec7 E) i% i3 [+ H/ u8 O3 Y
5 q* H$ g- a& y
5. Add address manually ==> Point => Pointer: 009ca5ec, Offset:18 => OK =>P->009ca6803 J8 o; }1 x! \0 D" ~+ y4 \( }
$ p: N R B, b+ U
6. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value
8 W! |4 m/ K- b" d# Z& b# D0 p
7. mov eax, [eax] eax: 009ca668 ==> 搜索009ca668 ==> 009ca5ec ==> 009ca5c4
3 t% [! q" u. D( N- j% O8 B- S/ s, Y7 ?" T6 y6 z) L( S2 s
8. 编辑列表项 P->009ca680,添加指针项,Pointer: 009ca5c4, Offset:0 => OK& p' N2 |5 O: `& @9 T1 z
" n2 ]' s5 i) a' R* ]2 \
9. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value
A, t$ F' d0 v# M7 j8 f" t |5 x* g! Q" j1 G4 q7 i8 F
10. mov eas, [eax+14] => eax: 009ca5ec => 009ca5c4 => 计算:009ca5c4-14=009ca5b0 => 搜索009ca5b0 => 009ca544
: v. h5 {, v* J
& F2 _6 z4 u, w% c11. 编辑列表项 P->009ca680,添加指针项,Pointer: 009ca544, Offset:14 => OK# Q5 V3 D: J+ S$ ^3 z) c
6 I. ^: }9 u- f, _
12. 在列表项 P->009ca680 上点右键 => Find out what accresses this pointer => Change Value7 u) E. J8 O* x6 J, ^
- w+ F* W: U; a' |! g13. mov eax, [eax+0c] =>eax: 009ca5b0 => 009ca544 => 计算:009ca5b0-c=009ca538 => 搜索009ca538 => 0045cc18(绿色显示)
1 z. y/ C" Y! r7 y2 I$ r
' T1 k2 f1 R) i' D+ i" ^0 d/ _0 C( d+ D& u14. 编辑列表项 P->009ca680,添加指针项,Pointer: 0045cc18, Offset:c => OK0 {. I" \* T, W U) p& L% t
8 y8 Q+ ?4 A, d+ y0 H
最后,将数值改为5000,Next
0 _: O7 ^- k! i
: n( G/ v: X" b, e/ e8 d- u) |% qWell done, you've completed the tutorial of Cheat Engine.5 \6 G) ?5 k$ d4 O& p
Just play arround with the tutorial and learn how the other scanmethods weor.. X; l( ~* Y" ?, ~
: C. W' p2 r/ p& v
4 E$ @2 a5 V$ v' S$ E& X- X- j# P关于第8步的补充说明:
+ C4 ]1 c7 s; X
/ C( c9 d" C5 l' d. g除了最后以绿色显示的0045cc18值之外,其他的Eax值都要以你自己找到实际数值为准,步骤中的数据只是示例,重要的是原理方法掌握就OK了,千万别以步骤中的值来找哦。0 I! r/ q1 T( ~8 P Y; y* `
另外 本关可以通过备注里提到的使用指针扫描器等方法加以解决。 |
|