По сути, это ловушка, которая направляет поток кода в ваш внедренный шелл-код, используя возможности сценариев Cheat Engine.Я собираюсь разбить каждую строку на ее основную цель, чтобы помочь объяснить это.Узнайте больше об этом в Cheat Engine Wiki
aobscanmodule(INJECT_matchScore,FIFA19.exe,48 8B 41 20 48 89 42 20 8B 41 28 89 42 28 41 8B 54) // should be unique
Сканирует процесс для этого конкретного шаблона, сохраняет местоположение соответствующего шаблона в INJECT_matchScore
alloc(matchscore_cave,$1000,"FIFA19.exe"+2578D85)
Выделяет память рядом с "FIFA19.exe" + 2578D85 размером 1000 байт и сохраняет адрес этой памяти inmatchscore_cave.Здесь ваш шеллкод будет помещен
alloc(ptrHomeTeamScore, 8)
registersymbol(ptrHomeTeamScore)
ptrHomeTeamScore:
dq 00
, выделенный 8 байтов для хранения 64-битного указателя, регистрирует имя переменной символа и присваивает ему значение QWORD 0x0
alloc(ptrAwayTeamScore, 8)
registersymbol(ptrAwayTeamScore)
ptrAwayTeamScore:
dq 00
, как указано выше
label(code_matchscore)
label(home_matchscore)
label(away_matchscore)
label(return_matchscore)
создать несколько меток для сборочных блоков, к которым вы можете добавить jmp, определенные ниже
matchscore_cave:
pushf
cmp rdx, 00
je home_matchscore
cmp rdx, 01
je away_matchscore
jmp code_matchscore
вставлять флаги, если rdx == 0, jmp to home_matchscore иначе, если rdx == 1,jmp to away_matchscore else jmp code_matchscore
home_matchscore:
mov [ptrHomeTeamScore], rcx
jmp code_matchscore
away_matchscore:
mov [ptrAwayTeamScore], rcx
jmp code_matchscore
захватывает указатель, сохраненный в rcx, и сохраняет его в ptrHomeTeamScore
code_matchscore:
mov r8d,[rcx+0000011C]
popf
jmp return_matchscore
по смещению 0x11C из RCX, захватывает значение и сохраняет его в регистре r8dпоп-флаги, восстанавливающие их до того, что было до первоначального перехвата jmp
INJECT_matchScore+5B:
jmp matchscore_cave
nop
nop
перезаписывают исходную сборку и jmp в ваш введенный код, направляя поток из кода игры в ваш собственный код