Читать счет от EAs FIFA 19

Привет, товарищи, переливающиеся цветы,

Я собираюсь создать программу, которая проигрывает гимн домашней команды, когда она на самом деле забила гол в футбольном симуляторе 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)

У меня есть базовые знания о том, что такое указатель, стек и что делает ассемблер. Но я не могу понять, что здесь происходит. Может быть, вы можете дать мне построчное описание того, что происходит.

Заранее спасибо.


person user1401881    schedule 05.12.2018    source источник


Ответы (1)


По сути, это хук, который направляет поток кода в ваш внедренный шеллкод, используя возможности сценариев 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 байт и сохраняет адрес этой памяти в matchscore_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)

Создайте несколько меток для сборочных блоков, к которым вы можете перейти, как указано ниже.

matchscore_cave:
    pushf
    cmp rdx, 00
    je home_matchscore
    cmp rdx, 01
    je away_matchscore
    jmp code_matchscore

push-флаги, если rdx == 0, jmp на home_matchscore, иначе, если rdx == 1, jmp наaway_matchscore, иначе 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 pop flags, восстановив их до того состояния, в котором они были до первоначального хука jmp.

INJECT_matchScore+5B:
  jmp matchscore_cave
  nop
  nop

перезаписать исходную сборку и перейти к введенному вами коду, направляя поток из кода игры в ваш собственный код.

person GuidedHacking    schedule 23.07.2019