你好,堆栈溢出者,
我准备创建一个程序,当它在足球模拟器 FIFA 19 中实际进球时播放主队的进球。
我知道游戏本身没有开放的 API。我看到使用的唯一方法是从内存中实际轮询结果。我不知道这是否符合游戏的最终用户许可协议,但我不打算以任何方式实际作弊。
对于研究,我从https://github.com/xAranaktu/FIFA-19---Career-Mode-Cheat-Table找到并查找了作弊引擎表。它提供了通过作弊引擎读取或写入比赛分数的能力。
可悲的是,我无法对表格进行逆向工程。我找到了从内存中读取值的代码。但是我很难弄清楚每条线的作用。
[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)
我对指针、堆栈是什么以及汇编程序的作用有基本的了解。但我无法理解这里发生的事情。也许你可以给我逐行描述正在发生的事情。
先感谢您。