ce吧 关注:195,837贴子:3,798,804

【CE扫盲系列·第五弹】CE第五关:指针: (密码=098712)

只看楼主收藏回复

前言:
本教程使用的工具为:
Cheat Engine 7.4 64位
官网网站为:https://cheatengine.org/
如果您没有CE,那么请参考这篇教程,他会教您如何下载并安装一个CE
https://tieba.baidu.com/p/8126971048?pid=146028156375&cid=0#146028156375
本教程修改游戏目标为:
Cheat Engine 7.4 自带的默认新手教程(64位游戏),如果您没有看过前面的教程,推荐您先看完前面的教程然后再观看此次教程。


IP属地:湖南1楼2022-11-16 17:10回复
    注:本教程旨在带领新人小白熟悉和使用CE,如您应该能够熟练掌握并使用CE,那么您可以略过本教程。


    IP属地:湖南2楼2022-11-16 17:11
    回复
      老规矩,先看第五关描述:
      步骤 6: 指针: (密码=098712)
      上一步阐述了如何使用"代码查找"功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,
      所以我们需要学习如何利用指针。
      在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。
      这一步,你不需要懂得汇编,但如果懂的话会很有帮助。
      首先找到数值的地址,然后再查找是什么改写了这个地址。
      再次改变数值,CE 便可以列出找到的汇编代码。 双击一行汇编代码(或选择它并点击"详细信息")并打开"详细信息"窗口以显示详细的信息,用来告诉你当这个指令运行时发生了什么事情。
      如果在这条汇编指令中没看到方括号([])的存在,我们就应该查看下一条汇编代码的详细信息,
      如果看到了方括号,那很可能表示我们已经找到了需要的指针。
      返回到主 cheat engine 窗口 (只要你愿意,你可以保持这个额外的信息窗口为打开状态。如果你要关掉它,那么要记好方栝号中间的代码)并做一次 4 字节的扫描,扫描"详细信息"窗口中告诉你的一串十六进制数值。
      扫描完成时它可能返回一个或几百个地址。大多数时候你需要的地址将是最少的一个。现在点击"手工添加地址"按钮,并勾选"指针"选项。
      "添加地址"窗口将发生变化,多出了"Address of Pointer(指针地址)"和"Offset (Hex)(偏移量(16进制))"的文本框,以便您键入一个指针的地址和偏移量。
      请尽量填入刚才扫描到的地址。
      如果汇编指令中的方栝号里存在计算(例如:[esi+12])则把数值部分填在"Offset (Hex)"的文本框中,如果不存在,则让它保持为 0 。
      如果看上去是更复杂的计算指令的话(举例说明一下):
      [EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.
      这种情况下 EDX 便是数值的指针,而 EAX*2+00000310 则是它的偏移量, 所以你要填在"Offset (Hex)"的将是 2*4C+00000310=3A8。(这些都是在十六进制下计算的,你可以使用WINDOWS的计算器,在科学方式下用十六进制计算)。
      回到教程,点击"确定"这个地址便会加到 CE 主窗口下方的地址列表中,如果没做错,在地址栏将显示 P->xxxxxxxx,而 xxxxxxxx 和你扫描到的地址数值是一致的,如果不一致,那么可能是哪里出错了。
      现在, 改变那条指针地址的数值为 5000 并锁定它,然后点击 Tutorial.exe 窗口上的"改变指针"按钮,如果一切正确,"下一步"按钮将变为可点击状态。
      备注:
      你也可以使用"指针扫描"的方式来查找这个指针地址。


      IP属地:湖南3楼2022-11-16 17:11
      回复
        这一关和前面几关有所不同,可以看到,这一关有两个按钮。

        一个是改变数值的按钮,点击数值就会改变,一个是个改变指针的按钮,点击的话地址和数值都会发生改变。如果按照我前面几关所教的方法去搜索的话,确实是可以搜索到保存数值的地址的,但是一旦点击了"改变指针"按钮,我们找到的地址就会失效。如图:

        接下来,我们点击改变指针,看看CE表里面的数值有没有有关卡里面的数值对应变化。

        可以看到,当我们点击了"改变指针"后,关卡里面的数值确实发生的变化,但是CE表里面的数值还是原来那个,接下来我们可以多改变几次数值看看,我们现在找到的这个地址能不能同步变化。


        可以看到,明显是没有的,这就说明我们找到的这个地址已经"失效"了。


        IP属地:湖南4楼2022-11-16 17:15
        回复
          在前面第一关结尾的时候我说过,我们目前找到的地址都是所谓的"动态地址",什么叫"动态地址"呢?动态地址就是每次改变指针,或者重启游戏就会发生变化的地址,我们叫这种地址为"动态地址"。


          IP属地:湖南6楼2022-11-16 17:17
          回复
            到这你可能就要问了,我们每次找到的都是"动态地址",那岂不是每次重启游戏,或者指针改变的时候我们就要重新找一遍,这样是不是太麻烦了。有没有办法可以让他不要变化,或者我们能定位到"动态地址",这样我们就不用在每次指针改变或者重启游戏的时候去重新找一遍了,这样就能更加方便了。


            IP属地:湖南7楼2022-11-16 17:17
            收起回复
              答案是有的,在游戏中,有一类地址称作"静态基址",这一类地址通常是不会发生变化的,除非游戏中有重大更新会发生变化外,否则这些"静态基址"一般是不会发生变化的,我们可以通过"静态基址" + "偏移"的方式,来确定变化的"动态基址",也就是以不变应变化。当使用"静态基址" + "偏移"的方式固定下来地址后,不管我们是重启游戏,还是改变指针,我们都能准确的找到它的"动态地址"。这样我们就不用担心,每次重启游戏或者改变指针就要重新找一遍的情况出现了。


              IP属地:湖南8楼2022-11-16 17:18
              收起回复
                回到游戏中,我们还是以相同的方式先找到这个数值保存的"动态地址"。

                然后选中我们找到的"动态地址",右键,选择—>"找出是什么改写了这个地址"。


                这里选择Yes对进程进行附加操作。选择Yes后会弹出一个小窗口。

                这个小窗口是不是很熟悉?没错。这就是我们第四关提到的那个小窗口,用来监视哪些代码修改了我们的地址的。接下来我们回到游戏,点击修改数值,然后注意小窗口里面出现的代码。


                IP属地:湖南9楼2022-11-16 17:20
                回复
                  接下来我们选择这条指令,然后点击详情信息,注意,这里不是点击替换,不要和第四关搞混淆了。

                  然后就会弹出这么一个小窗口。

                  这里面有一些具体的详情。但我们只需要关注 mov [rdx], eax 这一条。

                  接下来我们把鼠标移动到这块区域。然后右键。

                  然后把这个结果,放到CE里面再搜索一下。

                  这里记得一定要点击Hex后再复制粘贴我们得到的那个地址进去。切记!然后我们扫描一下这个地址。


                  IP属地:湖南10楼2022-11-16 17:23
                  收起回复

                    可以看到,这里我们得到了一个绿色的地址,这个就是我们要找的"静态基质"。我们把这个地址拉取下来。然后我们复制这个地址
                    然后点击"手动添加地址"。然后把这个地址填入进去。

                    然后我们再选择指针

                    填入偏移0(这里为什么填入0后面我会解释,请仔细观看)

                    点击确认。

                    可以看到,添加偏移后,这个地址的值与我们找到地址的值是完全相同的。接下来我们把这个值改为5000并锁定,看看能否通关。


                    IP属地:湖南11楼2022-11-16 17:27
                    回复

                      回到游戏,点击改变指针。可以看到,下一步已经可以点击了,这就证明我们没找到,即使改变了指针,我们也还是可以通过"静态基址"+"偏移"的方式获取到正确的值,从而进行修改并通关。

                      这里我们可以多改变几次指针试试,看看改变指针后我们这个地址能否对应产生变化。当然,不尝试也没关系,因为静态地址不会和动态地址一样会因为改变指针就改变位置的。或者你也可以重启游戏试试,看看我们找到的这个静态基址是不是真的如我所说的那样,不会因为游戏重启而变化。当然,最后结果肯定是不会变化的,不论你重启多少次都一样,这个"静态基址" + "偏移"都能正确的显示数值。


                      IP属地:湖南12楼2022-11-16 17:28
                      收起回复
                        OK了,现在是疑问解答时间。可能有小伙伴要问了,为什么这个"偏移"是0


                        IP属地:湖南13楼2022-11-16 17:29
                        收起回复
                          那么请将视线移回我刚刚所说的那一条代码:mov [rdx], eax ,也就是前面这一条我要你们注意的代码。请注意,[rdx] 方括号里面没有任何的加减法。所以这个"偏移"就是0
                          但如果出现这样 mov [rdx + 2857], eax 这样的,那么你填入 2857这个值就行了。
                          那如果是更加复杂的呢?这里我截取一段CE关卡描述里面关于偏移计算的。
                          如果看上去是更复杂的计算指令的话(举例说明一下):
                          [EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.
                          这种情况下 EDX 便是数值的指针,而 EAX*2+00000310 则是它的偏移量, 所以你要填在"Offset (Hex)"的将是 2*4C+00000310=3A8。(这些都是在十六进制下计算的,你可以使用WINDOWS的计算器,在科学方式下用十六进制计算)。
                          那么我们只要填入3A8这个值就行了。


                          IP属地:湖南14楼2022-11-16 17:30
                          收起回复
                            哦,对了,你可能还有一个疑问,有没有一种方法,可以不用自己找偏移,因为我觉得自己找偏移太麻烦了,能不能帮我找一下?
                            这里我的回答是可以的,这个方法我会在后面的教程中提到,所以请各位慢慢向后面看。


                            IP属地:湖南15楼2022-11-16 17:31
                            回复
                              好了,这一关就到这里了。


                              IP属地:湖南16楼2022-11-16 17:31
                              收起回复