2

是否可以避免在作弊引擎中搜索值并设置它们(我解释过,我需要下面的内容)?我知道您可以找到地址指针并创建培训师,但问题是我使用作弊引擎的应用程序经常被我的公司更新,并且指针每次都在变化。这意味着,我必须每周多次创建新的培训师。基本上每天都这样。。

我想自动执行此操作,因为我需要的非常简单:

1)打开作弊引擎并按名称选择应用程序(example.exe)

2) 查找等于 100.0 的浮点值

3)等待2秒(这样我就可以在应用程序中更改内容)

4) 查找已更改为 200.0 的浮点值

5) 等待 2 秒(这样我就可以更改应用程序中的内容)

6) 找到现在已更改为 300.0 的浮点值

7)此时只会找到3个值。所以我需要选择最后一个并将其冻结为 500.0,因此即使应用程序将其更改回 300.0,它也会再次设置为 500.0。

如您所见,手动执行此操作非常烦人,而且我不想几乎每天都创建 3 个培训师。只是为了那天使用它们 3 倍。

所以我的问题是,是否有可能实现自动化?

我不是要求完整的代码,但是非常感谢一些带有链接的详细信息,因为我经常使用作弊引擎,而且我对编程了解很多,我对作弊引擎脚本的经验和知识为零。

4

2 回答 2

3

有可能实现自动化吗?是的。您可以通过至少创建一个作弊引擎脚本或创建一个培训师来自动执行此操作。您的问题还表明您想在不创建培训师的情况下做到这一点,所以不。

作弊引擎 LUA或简单的作弊引擎脚本框架包括您想要做的所有事情的功能:

openProcess()   //to get process access rights for the process
MemScan::firstScan()  //to scan for 100.0f
MemScan::nextScan()  //to filter/rescan the results
sleep()  //to pause execution
memrec_freeze()  //to freeze

您请求的链接是官方 Cheat Engine 论坛的LUA 和 Auto Assembler 教程部分

当您正在开发的游戏经常更新时,您是正确的,指针成为逆转和更新每个补丁的负担。解决方案是使用字节签名扫描数组来定位访问您想要访问的变量的汇编指令。不用担心 CE 也涵盖了这一点,AOBScan()。

于 2017-11-22T04:24:23.253 回答
3

大多数情况下,您可以创建一个处理更新的脚本。例如,找到地址后,右键单击并执行“找出访问此地址的内容”。等待更改值,然后弹出的窗口将显示更改该地址的代码。右键单击其中一个结果并打开反汇编程序。假设这是movsd xmm0,[ecx]这里的行:

8B 01 - mov eax,[ecx] 89 06 - mov [esi],eax EB 54 - jmp Game.exe+45951 F2 0F10 01 - movsd xmm0,[ecx] F2 0F11 06 - movsd [esi],xmm0

选择该行并按 CTRL+A 打开自动汇编器窗口。然后从模板菜单中选择“AOB 注入”。将此保存到您的表格并关闭窗口,然后打开该新脚本。顶部附近会有一条以 开头的线aobscanmodule。如果您在此处看到错误,则无法确定该内存位置的唯一签名。如果没有错误,那么当游戏更新,地址发生变化时,应该还是能找到的。应该有一个部分如下所示:

code: movsd xmm0,[ecx] movsd [esi],xmm0 jmp return

这是重新定位的代码。游戏中的原始代码被替换为一个新分配的内存区域的 jmp,在该内存区域组装该代码,然后jmp return返回到原始内存区域中的该代码之后。

你需要知道一点组装。该指令movsd xmm0,[ecx]将 ecx 指向的内存位置中的浮点值加载到 xmm0 寄存器中。这会访问您关心的内存位置,因此您可以像这样设置该值:

code: mov [ecx],(float)500.0 // set value to 500.0 movsd xmm0,[ecx] movsd [esi],xmm0 jmp return

现在,每当程序尝试运行访问该内存位置的代码时,它将跳转到新的内存位置,将该地址处的值更新为 500.0,然后运行原始代码并跳回。

当该aobscanmodule行确实显示错误时,这意味着有太多太相似的代码部分。逻辑向后和向前查看几行汇编并查找十六进制字节,忽略如果游戏更新可能会更改的地址。例如,当游戏更新时,该代码中的任何内容都可能不会改变,没有指针,只有一条相当接近的 jmp 指令。

要格外小心,您可能需要停止正在查找访问该地址的代码的窗口,然后右键单击该代码行并选择“找出该指令访问的地址”。如果窗口中出现多个地址,那么您在没有更多帮助的情况下有点搞砸了,因为它是用于更多值的通用代码,而不仅仅是您关心的值。

于 2018-02-18T03:37:42.337 回答