如何在不创建培训师的情况下自动化作弊引擎值 search/set
How to automate cheat engine value search/set without creating a trainer
是否可以避免在作弊引擎中搜索值并设置它们(我在下面解释过,我需要什么)?我知道你可以找到地址指针并创建培训师,但问题是我使用作弊引擎的应用程序被我的公司更新了很多,指针每次都在变化。
意思是,我必须每周多次创建新的培训师。基本上几乎每天..
我想将其自动化,因为我需要的东西非常简单:
1) 按名称打开作弊引擎和 select 应用程序 (example.exe)
2) 找到等于 100.0
的浮点值
3) 等待 2 秒(以便我可以更改应用程序中的内容)
4) 查找已更改为 200.0
的浮点值
5) 等待 2 秒(以便我可以更改应用程序中的内容)
6) 查找现在已更改为 300.0 的浮点值
7) 此时只会找到 3 个值。所以我需要 select 最后一个并将其冻结为 500.0,因此即使应用程序将其更改回 300.0,它也会再次设置为 500.0。
如您所见,手动执行此操作非常烦人,而且我不想几乎每天都创建 3 个培训师。只是为了那天使用它们 3 倍。
所以我的问题是,是否可以将其自动化?
我不是要完整的代码,但是非常感谢一些带有链接的详细信息,因为我经常使用作弊引擎,并且我对编程了解很多,我对作弊的经验和知识为 0引擎脚本。
是否可以将其自动化?是的,会的。您可以通过至少创建作弊引擎脚本或创建培训师来自动执行此操作。你的问题还说你想在不创建培训师的情况下这样做,所以没有。
Cheat Engine LUA 或简单的 Cheat Engine 脚本框架包含您想要执行的所有功能:
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
您请求的 link 是 LUA and Auto Assembler Tutorial section 官方 Cheat Engine 论坛
当您正在开发的游戏经常更新时,您认为指针成为逆转和更新每个补丁的负担是正确的。解决方案是使用字节签名数组扫描来定位访问您要访问的变量的汇编指令。别担心,CE 也涵盖了这一点,AOBScan()。
大多数时候您可以创建一个脚本来处理更新。例如,找到地址后,right-click 并执行 'find out what accesses this address'。等待更改值,弹出的 window 将向您显示更改该地址的代码。 Right-click 在其中一个结果上打开反汇编程序。假设这里是 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
Select 行并按 CTRL+A 打开 auto-assembler window。然后从模板菜单 [=46=] 'AOB Injection'。将其保存到您的 table 并关闭 window,然后打开该新脚本。顶部附近会有一行以 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 指令。
要格外小心,您可能需要停止正在查找访问该地址的代码的 window,然后是该行代码上的 right-click 和 select 'find out what addresses this instruction accesses' .如果 window 中出现了多个地址,那么您会在没有更多帮助的情况下被搞砸了,因为它是一段通用代码,用于提供比您关心的值更多的值。
是否可以避免在作弊引擎中搜索值并设置它们(我在下面解释过,我需要什么)?我知道你可以找到地址指针并创建培训师,但问题是我使用作弊引擎的应用程序被我的公司更新了很多,指针每次都在变化。 意思是,我必须每周多次创建新的培训师。基本上几乎每天..
我想将其自动化,因为我需要的东西非常简单:
1) 按名称打开作弊引擎和 select 应用程序 (example.exe)
2) 找到等于 100.0
的浮点值3) 等待 2 秒(以便我可以更改应用程序中的内容)
4) 查找已更改为 200.0
的浮点值5) 等待 2 秒(以便我可以更改应用程序中的内容)
6) 查找现在已更改为 300.0 的浮点值
7) 此时只会找到 3 个值。所以我需要 select 最后一个并将其冻结为 500.0,因此即使应用程序将其更改回 300.0,它也会再次设置为 500.0。
如您所见,手动执行此操作非常烦人,而且我不想几乎每天都创建 3 个培训师。只是为了那天使用它们 3 倍。
所以我的问题是,是否可以将其自动化?
我不是要完整的代码,但是非常感谢一些带有链接的详细信息,因为我经常使用作弊引擎,并且我对编程了解很多,我对作弊的经验和知识为 0引擎脚本。
是否可以将其自动化?是的,会的。您可以通过至少创建作弊引擎脚本或创建培训师来自动执行此操作。你的问题还说你想在不创建培训师的情况下这样做,所以没有。
Cheat Engine LUA 或简单的 Cheat Engine 脚本框架包含您想要执行的所有功能:
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
您请求的 link 是 LUA and Auto Assembler Tutorial section 官方 Cheat Engine 论坛
当您正在开发的游戏经常更新时,您认为指针成为逆转和更新每个补丁的负担是正确的。解决方案是使用字节签名数组扫描来定位访问您要访问的变量的汇编指令。别担心,CE 也涵盖了这一点,AOBScan()。
大多数时候您可以创建一个脚本来处理更新。例如,找到地址后,right-click 并执行 'find out what accesses this address'。等待更改值,弹出的 window 将向您显示更改该地址的代码。 Right-click 在其中一个结果上打开反汇编程序。假设这里是 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
Select 行并按 CTRL+A 打开 auto-assembler window。然后从模板菜单 [=46=] 'AOB Injection'。将其保存到您的 table 并关闭 window,然后打开该新脚本。顶部附近会有一行以 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 指令。
要格外小心,您可能需要停止正在查找访问该地址的代码的 window,然后是该行代码上的 right-click 和 select 'find out what addresses this instruction accesses' .如果 window 中出现了多个地址,那么您会在没有更多帮助的情况下被搞砸了,因为它是一段通用代码,用于提供比您关心的值更多的值。