Читайте счет от EAs FIFA 19 - PullRequest
       21

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

0 голосов
/ 05 декабря 2018

Здравствуйте, коллеги переполнены стека,

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

Я знаю тамнет открытого API для самой игры.Единственный способ, который я вижу, - это опросить результат из памяти.Я не знаю, соответствует ли это лицензионному соглашению с конечным пользователем игры, но я не собираюсь на самом деле обманывать.

Для исследования я нашел и посмотрел таблицу Cheat Engine Table от 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)

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

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

1 Ответ

0 голосов
/ 23 июля 2019

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

...