ce吧 关注:194,603贴子:3,796,007

【CE扫盲系列·第八弹】CE第八关:注入++: (密码=31337157)

只看楼主收藏回复

前言:本教程使用的工具为:
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-23 18:18回复
    注:本教程旨在带领新人小白熟悉和使用CE,如您应该能够熟练掌握并使用CE,那么您可以略过本教程。


    IP属地:湖南2楼2022-11-23 18:19
    回复
      这一关会用到前面第六关:代码注入的一点知识,难度并不是很高,如果能看懂第六关的操作的话,那么这一关问题其实并不大。


      IP属地:湖南3楼2022-11-23 18:19
      回复
        这里我们先看游戏介绍:
        步骤 9: 注入++: (密码=31337157)
        这一步将会解释如何处理游戏中的共用代码, 这种代码是通用在除了自己以外的其他同类型对像上
        常常你在修改游戏的时候, 你找到了一个单位的健康, 或是你自己角色的健康, 你会发现一种情况: 如果你把健康相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了。
        在这种情况下, 你必须想办法区分自己与敌人。
        有时候很简单, 你只要检查最前面的4个字节(函数指针表), 它通常指向一个独一无二的地址, 代表着游戏玩家角色,而有的时候它是一个团体号码, 或者也可能是一个指针, 它指向另一个指针, 该址针又指向下一个指针,搞不好还指向下下一个指针, 最后指向一个玩家名字。总之完全取决于游戏的复杂度, 以及你的运气
        最简单的方法是以"找出是什么改写了这个地址"去找出游戏代码,然后使用"分析(新/旧)数据/结构"的功能去比较两种结构。(你的单位和敌人的单位)然后看看是不是可以找到一个区分两者的方法。
        当你找到如何区分你和电脑单位的方法后,你可以注入一段自动汇编脚本来检查状态,然后看是要运行游戏的代码还是要做其他的修改。(例如一击必杀)
        另外, 你还可以用这个方法去创建一般所说的"字节数组"的字串, 它可以用来搜寻并产生一份所有你的单位或是敌人单位的列表
        在这个教程中, 我已经实现了你将会玩到的最惊人的游戏.
        这个游戏有4个玩家。2个属于你的阵容, 另外两个属于电脑方。
        你的任务是找到改写健康的代码, 并且修改以至于你可以获得胜利,但"绝不能"使用锁定HP的方法.
        完成修改以后, 请按 "重新启动游戏并自动执行" 来测试你的修改是否正确
        提示1: 健康是一个单浮点数
        提示2: 解法不只一种


        IP属地:湖南4楼2022-11-23 18:19
        回复

          可以看到,这里其实有两个不同的"队伍",或者说是不同的"阵营"。玩家1和2属于我方阵营,玩家3和4属于电脑阵营,我们要做的是击败电脑阵营。
          这里我们用之前教的方法找到,玩家1和玩家3的血量看看。
          注意:
          CE提示里面说:
          提示1: 健康是一个单浮点数
          这可以帮助我们尽快找到地址,当然,如果没有这个提示,我们也是可以用"未知的初始值",搜索出来的。

          玩家1的地址。

          玩家3的地址。


          IP属地:湖南5楼2022-11-23 18:20
          回复
            找到不同阵营玩家地址后,我们分别看看,是哪些代码修改这些不同"阵营"的健康值。
            操作还是前面我们说过的,选择地址,右键,找出是什么改写了这个地址。
            玩家1:



            IP属地:湖南6楼2022-11-23 18:21
            回复
              然后可以看到这里有一条指令,还是相同的步骤接着我们找一下玩家3
              玩家3:



              IP属地:湖南7楼2022-11-23 18:22
              回复
                到这里我们可以发现。

                修改玩家1和玩家3的代码是同一条指令。
                这里我们可以推测一下,玩家2和玩家4的修改指令估计也是相同的,到这里我们可以得出一个结论:所有玩家修改血量的代码都是一致的。
                这种情况也是游戏介绍里面说的:
                常常你在修改游戏的时候, 你找到了一个单位的健康, 或是你自己角色的健康, 你会发现一种情况: 如果你把健康相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了。在这种情况下, 你必须想办法区分自己与敌人。
                现在我们知道了,所有修改健康值的命令都是这条指令,那么我们现在只要找出有谁调用过这条指令,就能找出所有的玩家了。

                回到游戏,我们点开这条指令。

                然后选中这条指令,右键,选中,"找出指令访问的地址"。

                然后会出现这样一个小窗口,接着我们回到游戏中,依次对每个玩家点击攻击。


                操作完后,就可以看到每个玩家的地址了。但是只是知道这个是不够的,我们要怎么区分每个玩家的阵营呢从而达到
                我方阵营的,被攻击健康值不会减少,电脑方阵营的,被攻击就会直接死亡的这种效果呢?


                IP属地:湖南8楼2022-11-23 18:24
                回复

                  我们选中我们找到的所有地址,然后点击"打开选中地址的分析数据"。


                  这里点击OK即可,如果你想换个名字的换可以自行操作。



                  经过CE分析后,我们就可以看到,每个地址的结构了,接下来我们再这里面找找,看看有没有能作为"队伍"或者"阵营"的标识的。


                  IP属地:湖南9楼2022-11-23 18:26
                  收起回复
                    可以看到。

                    这两个都是可以作为"阵营"和队伍的标识的,这里我选取1和2作为标识。回到反汇编界面

                    选择工具。然后选择自动汇编。



                    这里我们还是选择代码注入。


                    IP属地:湖南10楼2022-11-23 18:29
                    回复
                      注入完成后,接下来我们开始编写队伍判断的代码。

                      从这里我们可以知道,+8的代表健康值的代码,+14是代表队伍的代码。

                      接着我们定义几个数值,队伍代码为1(我方),我们把健康值设置为5000,记得,这是浮点的,所以要加float,队伍为2(电脑方)我们把健康值设置为0。

                      然后再把这个数值写入xmm0,然后在跳回源指令,最后实现扣血操作。

                      最后我们再判断一下队伍即可。01(我方)就执行team1,02(电脑)就执行team2
                      然后我们来试试看。


                      IP属地:湖南11楼2022-11-23 18:32
                      回复



                        这样游戏就通过了。


                        IP属地:湖南12楼2022-11-23 18:33
                        收起回复
                          这也是最后一关了,如果你能全部看完,相信你现在已经能够掌握CE的一点点小技巧了。


                          IP属地:湖南13楼2022-11-23 18:33
                          回复


                            IP属地:山西来自Android客户端14楼2022-12-02 00:05
                            回复
                              这关好难啊


                              IP属地:四川15楼2022-12-04 15:54
                              回复