是否可以使用 Cheat Engine 在 Assembly 中修改 movss 或 xmm#?

逆向工程 拆卸 部件 作弊引擎
2021-07-08 22:24:44

我使用作弊引擎作为初学者进入反汇编和黑客攻击,我想知道如何修改使用movss [...],xmm#?

具体来说,我在满意中修改健康。

坠落伤害会导致movss [rbx+00000164],xmm0燃烧,xmm0表示从坠落伤害中减去的生命值。

然后它发送xmm0rbx+000000164.

这会导致健康下降。我希望它上升,或者根本不会失去/获得任何东西。

我试着看看扫描仪中是否有任何 xmm#s 与最大生命值 (100) 对齐,看看我是否可以在玩家每次受到伤害时发送他们的最大生命值(这很容易解决)

然而,它没有。如这里所见: 在此处输入图片说明

我正在关注教程https://wiki.cheatengine.org/index.php?title=Tutorials:Auto_Assembler:Injection_full,但他们让它变得非常简单,只提到......

现在在这里做的最简单的事情,因为代码已经添加了只是使数字为正数。

那不是很通知,他们很幸运,他们的值只是一个可以设置为正数或负数,或者只是修改的数字。

我的不行。

所以最大的问题是,我能做些什么来修改或改变它吗?我需要让这更简单。

顺便说一句,这是我用来实际“破解”健康状况的脚本。它现在所做的只是默认的 xmm0 发送,基本上它什么都不做。

{ Game   : FactoryGame-Win64-Shipping.exe
  Version: 
  Date   : 2020-03-15
  Author : taylo

  This script does blah blah blah
}

define(address,"FactoryGame-Win64-Shipping.exe"+90E3AA)
define(bytes,F3 0F 11 83 64 01 00 00)

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat



assert(address,bytes)
alloc(newmem,$1000,"FactoryGame-Win64-Shipping.exe"+90E3AA)

label(code)
label(return)

newmem:

code:
  movss [rbx+00000164],xmm0
  jmp return

address:
  jmp newmem
  nop 3
return:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
address:
  db bytes
  // movss [rbx+00000164],xmm0

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "FactoryGame-Win64-Shipping.exe"+90E3AA

"FactoryGame-Win64-Shipping.exe"+90E376: 49 89 6B B0              -  mov [r11-50],rbp
"FactoryGame-Win64-Shipping.exe"+90E37A: 4D 89 73 A8              -  mov [r11-58],r14
"FactoryGame-Win64-Shipping.exe"+90E37E: E8 BD D5 FB FF           -  call FactoryGame-Win64-Shipping.exe+8CB940
"FactoryGame-Win64-Shipping.exe"+90E383: 0F 28 C8                 -  movaps xmm1,xmm0
"FactoryGame-Win64-Shipping.exe"+90E386: 0F 2F 0D 53 B9 64 02     -  comiss xmm1,[FactoryGame-Win64-Shipping.exe+2F59CE0]
"FactoryGame-Win64-Shipping.exe"+90E38D: 0F 82 B9 00 00 00        -  jb FactoryGame-Win64-Shipping.exe+90E44C
"FactoryGame-Win64-Shipping.exe"+90E393: F3 0F 10 83 64 01 00 00  -  movss xmm0,[rbx+00000164]
"FactoryGame-Win64-Shipping.exe"+90E39B: F3 0F 5F CE              -  maxss xmm1,xmm6
"FactoryGame-Win64-Shipping.exe"+90E39F: 0F B6 83 6C 01 00 00     -  movzx eax,byte ptr [rbx+0000016C]
"FactoryGame-Win64-Shipping.exe"+90E3A6: F3 0F 5C C1              -  subss xmm0,xmm1
// ---------- INJECTING HERE ----------
"FactoryGame-Win64-Shipping.exe"+90E3AA: F3 0F 11 83 64 01 00 00  -  movss [rbx+00000164],xmm0
// ---------- DONE INJECTING  ----------
"FactoryGame-Win64-Shipping.exe"+90E3B2: A8 01                    -  test al,01
"FactoryGame-Win64-Shipping.exe"+90E3B4: 75 4C                    -  jne FactoryGame-Win64-Shipping.exe+90E402
"FactoryGame-Win64-Shipping.exe"+90E3B6: A8 02                    -  test al,02
"FactoryGame-Win64-Shipping.exe"+90E3B8: 74 1D                    -  je FactoryGame-Win64-Shipping.exe+90E3D7
"FactoryGame-Win64-Shipping.exe"+90E3BA: 48 89 6C 24 28           -  mov [rsp+28],rbp
"FactoryGame-Win64-Shipping.exe"+90E3BF: 4C 8B CF                 -  mov r9,rdi
"FactoryGame-Win64-Shipping.exe"+90E3C2: 0F 28 D1                 -  movaps xmm2,xmm1
"FactoryGame-Win64-Shipping.exe"+90E3C5: 4C 89 74 24 20           -  mov [rsp+20],r14
"FactoryGame-Win64-Shipping.exe"+90E3CA: 48 8B D6                 -  mov rdx,rsi
"FactoryGame-Win64-Shipping.exe"+90E3CD: 48 8B CB                 -  mov rcx,rbx
}
1个回答

经过更多的研究和朋友的帮助,我想通了。

movssmov操作码和其通常以的形式(对于MOVSS ATLEAST)

因此,您可以更改其值。

只需movss [..address..],(float)###将### 替换为您的号码即可。

至于我的问题,它有效,我已经禁用了整个游戏的健康减量。使用相同的方法使所有生物和玩家永远无敌。

正如我对它的使用所见:

是的,我知道这是关于修改 movss,但我的值是一个浮点数,它只是存储在一个整数的“形式”中,所以它使用 mov,你可以使用相同的 movss 代码。

code:
  mov [rbx+00000164],(float)100
  jmp return

mov就像说move,它移动操作数中的值并将其发送到地址。

所以它就像移动一个数字一样简单。我只是格式错误,并没有意识到您必须通过类似的方式指定数据类型(float)