Привет, товарищи, переливающиеся цветы,
Я собираюсь создать программу, которая проигрывает гимн домашней команды, когда она на самом деле забила гол в футбольном симуляторе FIFA 19.
Я знаю, что для самой игры нет открытого API. Единственный метод, который я вижу для использования, - это фактически опросить результат из памяти. Я не знаю, соответствует ли это лицензионному соглашению с конечным пользователем игры, но я никоим образом не собираюсь обманывать.
Для исследования я нашел и просмотрел таблицу Cheat Engine с https://github.com/xAranaktu/FIFA-19---Career-Mode-Cheat-Table. Это дает возможность читать или записывать счет матча через Cheat Engine.
К сожалению, у меня возникли проблемы с перепроектированием таблицы. Я нашел кусок кода, который считывает значение из памяти. Но мне трудно понять, что делает каждая строка.
[ENABLE]
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
alloc(matchscore_cave,$1000,"FIFA19.exe"+2578D85)
alloc(ptrHomeTeamScore, 8)
registersymbol(ptrHomeTeamScore)
ptrHomeTeamScore:
dq 00
alloc(ptrAwayTeamScore, 8)
registersymbol(ptrAwayTeamScore)
ptrAwayTeamScore:
dq 00
label(code_matchscore)
label(home_matchscore)
label(away_matchscore)
label(return_matchscore)
matchscore_cave:
pushf
cmp rdx, 00
je home_matchscore
cmp rdx, 01
je away_matchscore
jmp code_matchscore
home_matchscore:
mov [ptrHomeTeamScore], rcx
jmp code_matchscore
away_matchscore:
mov [ptrAwayTeamScore], rcx
jmp code_matchscore
code_matchscore:
mov r8d,[rcx+0000011C]
popf
jmp return_matchscore
INJECT_matchScore+5B:
jmp matchscore_cave
nop
nop
return_matchscore:
registersymbol(INJECT_matchScore)
У меня есть базовые знания о том, что такое указатель, стек и что делает ассемблер. Но я не могу понять, что здесь происходит. Может быть, вы можете дать мне построчное описание того, что происходит.
Заранее спасибо.