草庐IT

Cheat Engine 官方教程汉化

LyShark 2023-03-28 原文

CE修改器官方教程汉化版,区别于前款教程,官方教程中使用的是Tutorial64位程序,如下是经过翻译后的官方文档。

第一步:欢迎

当教程启动时,您应该会看到类似的东西,您只需在阅读帮助文本后单击“下一步”按钮即可。

在后面的步骤中保存密码,以防崩溃(从注入中)并在以后重新启动。

运用CE如何附加到进程

  • 1.打开要附加到的进程/游戏(如果尚未打开)。
  • 2.打开作弊引擎(如果尚未打开)。
  • 3.单击作弊引擎窗体工具栏中的计算机图标,如果作弊引擎刚刚打开,它应该会闪烁,或者在作弊引擎主窗体菜单上选择进程。

4.从列表中选择进程。

5.单击打开按钮或双击该过程。您应该会在窗体顶部看到进程名称。您现在已附加到该进程。

第二步:精确值扫描

对于步骤2,您将看到类似这样的东西。

我们需要找到的是健康,这里是一个整数。

因此,设置内存扫描程序以查找整数,然后进行精确值扫描,然后将该值设置为当前运行状况值,大多数整数将存储在4字节变量中,因此让我们从那里开始。

注意:整数可以存储在 1 字节变量(字节)、2 字节变量(int16/短)、4 字节变量 (int32/int) 或 8 字节变量 (int64/long) 中。

准备就绪后,单击第一个扫描按钮

您应该在找到的地址列表中看到一个地址列表,如下所示。

现在点击点击我按钮,然后重新输入当前值,然后单击下一次扫描按钮

请注意列表中的红色值,这表示该值已更改。

单击下一次扫描后,您可能需要继续单击击中我,然后重新扫描,告诉找到的地址列表足够小,可以使用。

只需双击找到列表中的地址,即可将其添加到作弊表中。然后更改值并冻结地址,双击地址列表中的值进行编辑,通过单击启用码/冻结框将其冻结。

现在应该启用下一个按钮,单击它以转到下一步。如果下一个按钮尚未启用,请再次单击点击我按钮。

第三步:未知的初始值

当您开始步骤 3 时,您应该会看到表单如下所示。

就像帮助文本所说的那样,请确保在开始新扫描之前单击新扫描按钮。

这将清除找到的结果以开始扫描新值。

在这里,我建议继续单击点击我按钮,只是为了查看值是如何减小的,以帮助确定要扫描的值类型。

请注意,该值减小了一个整数,即非小数。

因此,我将扫描仪设置为4个字节和未知的初始值。然后单击第一个扫描按钮

现在点击点击我按钮。然后将扫描类型设置为减小值,然后单击嵌套扫描按钮

请注意找到的地址数量,对于当今的大多数游戏来说,这有点小,对于大多数游戏来说,找到的结果很容易达到数百万。

现在,只需使用点击我按钮继续减小该值,然后扫描减小的值,直到找到的结果足够小,可以使用。

现在我们只需选择一个地址并更改值以查看它是否具有所需的效果,这就是它的工作原理。

在这里,我建议您在更改值(或只是Ctrl + C)之前始终注意这些值,以便在它们不是正确的值时将其设置回去,以防止在游戏中执行此操作时更改一堆未知地址并损坏保存文件。

一旦您将值设置为 5000,下一步按钮应立即变为启用状态。更改值并单击点击我按钮后,进度条应填充,但这不是必需的。

现在应该启用下一个按钮,单击它以转到下一步。如果下一个按钮尚未启用,请再次单击点击我按钮。

第四步:浮点数

当您开始步骤 4 时,您应该会看到表单如下所示。

因此,请单击新建扫描按钮。然后为扫描仪设置一个浮点数精确值,输入当前运行状况值。设置时,单击第一个扫描按钮。

因此,只需像以前一样扫描以查找健康地址,然后将其添加到地址列表中。

现在再次单击新的扫描按钮。然后将扫描仪设置为双精度值,输入当前弹药值。设置时,单击第一个扫描按钮。

因此,只需像以前一样扫描以查找弹药地址,然后将其添加到地址列表中即可。

现在将值更改为5000,然后下一步按钮应变为启用状态。然后单击下一步按钮以继续执行下一步。

第五步:代码查找器

当您开始步骤 5 时,您应该看到表单如下所示。

因此,首先找到该值,然后将其添加到地址列表中。此时继续保存表和密码,以防调试器设置不正确。

在地址列表中拥有地址后,右键单击它,然后选择找出访问此地址的内容。

作弊引擎将提示您有关附加调试器的信息,只需单击按钮即可。

然后将打开一个调试器窗体,现在单击更改值按钮,您应该获得显示在调试器窗体中的代码。

我们想要的是一个书面指令。因此,我们将寻找一些类似于以下内容之一的东西:

mov [**],**
add [**],**
sub [**],**
*** [**],**

选择写入指令的代码行,可以单击显示拆装器按钮以查看内存中的代码,然后单击替换按钮。最后不要忘记单击停止按钮。

替换按钮会将该行代码替换为NOP。作弊引擎将提示您输入它将添加到高级选项列表中的条目的名称。

输入名称,然后单击确定按钮。

现在,单击教程中的更改值按钮。下一步按钮应变为启用状态,然后单击下一步按钮以前进到下一步。

当高级选项列表中的条目被替换时,它们将显示为红色文本。

可以通过单击作弊引擎主窗体左下角状态栏中的高级选项按钮来查看高级选项列表。

要还原列表中某个条目的原始代码,请右键单击该条目,然后选择使用原始代码还原

请注意,恢复后文本为黑色。

第六步:指针

当您开始步骤 6 时,您应该看到表单如下所示。

因此,首先找到该值,然后将其添加到地址列表中。

在地址列表中拥有地址后,右键单击它,然后选择找出访问此地址的内容。

然后单击更改值按钮,让进程访问该地址。

选择代码以查找指针的基址时,请尝试选择不写入与基址相同的寄存器的指令。

在这里,我们对方括号[]之间的值感兴趣,因此这里我们需要RDX的值。

这里的偏移量是0,如果指令有这样的东西:

mov [rdx+12C],eax

然后偏移量将为12C(0x12C),请注意,这是十六进制。

现在将扫描仪设置为8个字节精确值,选中十六进制复选框,然后获取找到的值并将其作为要扫描的值。

准备就绪后,单击第一个扫描按钮。

在找到的地址列表中查找带有绿色文本的地址,这些是静态地址。

将一个添加到作弊表,双击已添加到地址列表的内存记录的地址,复制该地址,然后选中指针复选框,然后将该地址粘贴到指针基址中。

所以我的指针看起来像["Tutorial-x86_64.exe"+XXXXXX]+0这样。

设置指针时单击确定按钮。

现在将值冻结5000并单击更改指针按钮,下一个按钮应该变为启用状态。

如果下一个按钮未启用,则从找到的列表中选择另一个地址,查找更改其值的绿色地址,并将其设置为与上一个地址一样,并查看它是否指向正确的值,如果是这样,请更改值冻结并单击更改指针按钮。

单击下一步按钮前进到下一步。

第七步:代码注入

当您开始步骤 7 时,您应该会看到表单如下所示。

在这里,我们将遵循与步骤 5 相同的过程,但不是单击替换,请单击显示反汇编器按钮。

这将在指令的地址打开反汇编器视图表单。

选中该指令后,按 Crtl+A 打开自动汇编程序窗体。

在自动组装器表单菜单中,选择模板,然后选择完全注入

这将生成一些脚本来启动。

现在,我们需要添加一些将值增加 2 的代码,然后删除减小该值的原始代码。

为了增加价值,我们可以使用INC或ADD

所以让我们尝试这样的事情。

...
newmem:
  add dword ptr [rsi+780],2

code:
  //sub dword ptr [rsi+00000780],01
  jmp return

address:
  jmp newmem
  nop
  nop
return:
...

现在将脚本添加到作弊表,然后启用脚本并单击“点击我”按钮。

这应该启用下一步按钮,因此单击下一步按钮转到下一步。

第八步:多级指针

当您开始步骤 8 时,您应该会看到表单如下所示。

手动迭代

在这里,我们将遵循与步骤6相同的步骤,除了我们将看到哪些内容访问了我们找到的基址,并且我们将继续重复此操作,直到找到静态基址。

这是我的第一个调试器输出。

10002D8D1 - B9 A00F0000 - mov ecx,00000FA0
10002D8D6 - E8 3522FEFF - call Tutorial-x86_64.exe+XXXXXX
10002D8DB - 89 46 18  - mov [rsi+18],eax  <<<<<<
10002D8DE - 89 C2  - mov edx,eax
10002D8E0 - 48 8D 4D F8  - lea rcx,[rbp-08]

RAX=00000000000007F7
RBX=000000000125CD60
RCX=0000000000000FA0
RDX=00000000828087F3
RSI=0000000001287960  <<<<<<
RDI=0000000100258308
RSP=000000000102F070
RBP=000000000102F0B0
RIP=000000010002D8DE
R8=0000000100161BA0
R9=00000000008E06A0
R10=0000000000000002
R11=0000000000000206
R12=00000000012607C0
R13=0000000100161BA0
R14=0000000100258300
R15=0000000100257A18

我确实在基址的第一次扫描中发现了一个静态基数,但我记得这是一个虚假的基数。所以这里我们想要的是一个process.exe+offset形式的基址,你可以尝试其他看起来像module.dll+offset的基址,但我想说的是,在这里它们将被证明是错误的指针。是的,大多数较新的游戏都会有许多错误的值和指针。

调试器从地址保持输出:0000000001287960

10002D88B - E8 90961200 - call Tutorial-x86_64.exe+XXXXXX
10002D890 - E9 65000000 - jmp Tutorial-x86_64.exe+XXXXXX
10002D895 - 48 83 3E 00 - cmp qword ptr [rsi],00  <<<<<<
10002D899 - 74 5F - je Tutorial-x86_64.exe+XXXXXX
10002D89B - 48 8B 36  - mov rsi,[rsi]

RAX=0000000000013117
RBX=000000000125CD60
RCX=000000000125CD60
RDX=0000000000003CE3
RSI=0000000002D6D540  <<<<<<
RDI=0000000100258308
RSP=000000000102F070
RBP=000000000102F0B0
RIP=000000010002D899
R8=0000000100161BA0
R9=00000000008E06A0
R10=0000000000000002
R11=0000000000000206
R12=00000000012607C0
R13=0000000100161BA0
R14=0000000100258300
R15=0000000100257A18

调试器输出的地址保持:0000000002D6D540

10002D845 - E8 D6961200 - call Tutorial-x86_64.exe+XXXXXX
10002D84A - E9 AB000000 - jmp Tutorial-x86_64.exe+XXXXXX
10002D84F - 48 83 7E 18 00 - cmp qword ptr [rsi+18],00  <<<<<<
10002D854 - 0F84 A0000000 - je Tutorial-x86_64.exe+XXXXXX
10002D85A - 48 8B 76 18  - mov rsi,[rsi+18]

RAX=00000000000166D2
RBX=000000000125CD60
RCX=000000000125CD60
RDX=000000000000302E
RSI=0000000002D6CE40  <<<<<<
RDI=0000000100258308
RSP=000000000102F070
RBP=000000000102F0B0
RIP=000000010002D854
R8=0000000100161BA0
R9=00000000008E06A0
R10=0000000000000002
R11=0000000000000206
R12=00000000012607C0
R13=0000000100161BA0
R14=0000000100258300
R15=0000000100257A18

调试器输出的地址保持:0000000002D6CE40

10002D800 - E8 1B971200 - call Tutorial-x86_64.exe+XXXXXX
10002D805 - E9 F0000000 - jmp Tutorial-x86_64.exe+XXXXXX
10002D80A - 48 83 7E 10 00 - cmp qword ptr [rsi+10],00  <<<<<<
10002D80F - 0F84 E5000000 - je Tutorial-x86_64.exe+XXXXXX
10002D815 - 48 8B 76 10  - mov rsi,[rsi+10]

RAX=000000000000B567
RBX=000000000125CD60
RCX=000000000125CD60
RDX=00000000000050A1
RSI=000000000123F1C0  <<<<<<
RDI=0000000100258308
RSP=000000000102F070
RBP=000000000102F0B0
RIP=000000010002D80F
R8=0000000100161BA0
R9=00000000008E06A0
R10=0000000000000002
R11=0000000000000206
R12=00000000012607C0
R13=0000000100161BA0
R14=0000000100258300
R15=0000000100257A18

现在我们扫描该基址000000000123F1C0,您应该找到一个静态地址,但在实际游戏中,您将继续前进,直到找到静态基址。

以该静态地址为基址,我的指针将如``[[[["Tutorial-x86_64.exe"+XXXXXX]+10]+18]+0]+18`所示。

指针扫描可以通过首先找到所需值的地址,保存生成的指针映射,重新启动游戏,再次搜索地址,保存另一个指针映射,然后比较两者来快速解决此问题。

找到指针后,将其冻结在 5000,然后单击更改指针按钮。如果您找到了正确的底座,则下一步按钮应在大约2秒后启用。因此,单击下一步按钮转到下一步。

第九步:共享代码

当您开始步骤 9 时,您应该会看到表单如下所示。

因此,就像帮助文本所说的那样,解决方案远远不止一种。

首先,我们需要找到其中一个地址并将其添加到表中。

如果您在查找地址时遇到问题,请记住尝试不同的值类型,并且不要忘记开始新的扫描。

然后,就像在步骤7中一样,我们想要查看访问地址的内容,以找到写入参与者运行状况的函数。

如果您想尝试其他方式,请继续保存密码,这是本教程的最后一步。

因此,在这里,最好了解我们实际上在寻找什么来区分盟友和战斗人员。

当编写游戏或引擎时,演员和玩家可能会这样编写。

//// Actor, base for all actors
class Actor(object){
   string Name = 'Actor';
   Coord Coords = new Coord(0, 0, 0);
   float Health = 100.0;
   ...
}
//// Player
class Player(Actor){ //// Player inherits form Actor
   string Name = 'Player';
   int Team = 1;
   ...
}

团队本身可以是一个结构,比如说,如果它被声明为一个对象类,比如Coords变量,我们希望寻找一个指向参与者团队结构的指针。

因此,我们可以做到这一点的一种方法是在玩家结构中找到团队ID或团队结构。

在球员结构中查找球队ID

找到减少生命值的功能后。右键单击反汇编器视图窗体中的指令,然后选择找出此指令访问的地址。

然后单击所有 4 个值的攻击按钮。调试器列表中应具有所有 4 个地址。

因此,请继续将它们添加到地址列表中。

然后,让我们打开剖析数据结构表单。

你会得到一些弹出窗口,在想到它们之后,你应该看到这样的表单。请注意,我必须扩展窗体的宽度才能移动列。

现在在我的偏移量上,0x10被猜测为一个指针,在64位进程中宽度为8字节。我看到0x10的指针的值看起来真的不像指针。

因此,我必须将其切换到4字节,并添加一个新的元素集,其偏移量为具有4字节值类型的0x14。这通常是它的工作方式。

所以在这里我们可以看到团队变量在结构的偏移0x14。

现在我们需要向脚本添加一些注入代码,然后添加一些代码来检查结构的团队变量,以确定哪些参与者是盟友,哪些是战斗员。

所以我们想要一些这样的。

因此,启用此脚本后,当游戏写入演员健康时,以下是跳转到钩子代码后将发生的事情:

  • 1.保存(PUSH)RFLAGS寄存器,不是完全需要,但在比较时仍然是一个好习惯。
  • 2.检查演员是否在团队 1 中。如果 actor 在团队 1 中,则我们以浮点格式将新值设置为 5000。
  • 3.检查演员是否在团队 2 中。如果 actor 在团队 2 中,则我们将新值设置为 0,采用十六进制格式。(浮点数 0 == 整型 0 == 十六进制 0)
  • 4.恢复(POP)RFLAGS寄存器,如果寄存器是PUSHed的,这是完全需要的。

启用此脚本后,单击重新启动游戏并自动播放按钮,然后您应该看到表单更改并如下所示。

因此,单击下一步按钮以完成本教程。然后,您应该会看到一个表单,告诉您已完成本教程。

在寄存器中发现差异

找到减少生命值的功能后。

右键单击反汇编器视图窗体中的指令,然后选择找出此指令访问的地址。

然后单击所有 4 个值的攻击按钮。

调试器列表中应具有所有 4 个地址。

现在让我们看看登记册,看看我们是否能找到盟友和战斗人员的差异。

单独选择每个地址,然后按 Ctrl+R

排列表单以使其更易于比较。

因此,在这里我们可以看到战斗人员的RSI为1。

所以像这样的脚本应该可以工作。

因此,启用此脚本后,当游戏写入演员健康时,以下是跳转到钩子代码后将发生的事情:

  • 1.保存(PUSH)RFLAGS寄存器,不是完全需要,但在比较时仍然是一个好习惯。

  • 2.检查 RSI 寄存器是否为

    • 1,如果 RSI 寄存器为 则我们将新值设置为十六进制格式的 0。(浮点数 0 == 整型 0 == 十六进制 0)
    • 2,如果 RSI 寄存器不是 1,那么我们假设 actor 是盟友,因此我们以浮点格式将新值设置为 5000。
  • 3.恢复(POP)RFLAGS寄存器,如果寄存器是PUSHed的,这是完全需要的。

启用此脚本后,单击重新启动游戏并自动播放按钮,然后您应该看到表单更改并如下所示。

因此,单击下一步按钮以完成本教程。

然后,您应该会看到一个表单,告诉您已完成本教程。

有关Cheat Engine 官方教程汉化的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  3. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  4. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  5. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  6. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  7. ruby-on-rails - rails 教程 : Putting flash messages in partial yields error "undefined method ` each' for nil:NilClass"? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView:

  8. ruby - ||= 条件赋值运算符的官方扩展 - 2

    我想强调的是,我正在寻找||=运算符被Ruby1.9.3解释器扩展的实际方式,而不是它出现的方式根据其行为进行扩展。我真正希望的是能够理解实际解释器源代码的人,遗憾的是我可能无法胜任这项任务。我发现似乎可以检查此问题的唯一资源已过时:“Ashort-circuit(||=)edgecase”。我上面提到的资源似乎暗示x||=y到x=x||的“官方”扩展y在1.9之前的解释器版本中要么不准确要么有错误。无论如何,指示的边缘情况似乎已被消除。上面的资源声称x||x=y或x或x=y“更准确”。然而,这些都不正确,因为当x是一个以前未声明的全局变量时它们不起作用:[11:04:18][****

  9. ruby-on-rails - Ruby on Rails 教程 - 5.26 - Sublime Text "Unable to Save"新文件 "spec/support/utilities.rb" - 2

    我正在使用SublimeText2,同时遵循MichaelHartl的RubyonRails教程。可以在http://ruby.railstutorial.org/book/ruby-on-rails-tutorial找到我所指的教程的具体部分。(ctrl+F“list5.26”)。我能够创建规范/支持文件。但是,在尝试创建spec/support/utilities.rb文件时,我收到消息“无法保存~/rails_projects/sample_app/spec/support/utilities.rb”。有人知道为什么会这样吗?SublimeText论坛上有人似乎遇到了完全相同的问

  10. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

随机推荐