Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- AUTHOR:
- - Aranaktu
- CREDITS:
- - lampuiho (first version of the script)
- GAME VERSION:
- - Script should always work with newest version of the game which can be downloaded from Origin.
- RISK LEVEL:
- - 4/5 (This script will harm your cm save if you mess up something with your editions.)
- DESCRIPTION:
- Script is hooking function that reads data from game database. Storing valid pointers in allocated variables for easy later use.
- HOW TO USE:
- 1. Activate script.
- 2. Make game to access database for the table you want to edit.
- for example game will access 'players' table when you hover player in game
- VIDEO TUTORIAL:
- - NONE
- }
- [ENABLE]
- //code from here to '[DISABLE]' will be used to enable the cheat
- {$lua}
- -- Check if user has set up CT correctly
- local status, error = pcall(get_validated_address)
- if not status then
- showMessage('Error during script activation, error:\n' .. error)
- print("Read guide to avoid problems like this: https://github.com/xAranaktu/FIFA-19---Career-Mode-Cheat-Table#getting-started")
- assert(false, error)
- end
- INJECT_DatabaseRead = get_validated_address('AOB_DatabaseRead')
- ORG_DatabaseRead = readBytes(INJECT_DatabaseRead, 7, true)
- {$asm}
- alloc(new_DatabaseReadCave,$500,$INJECT_DatabaseRead)
- label(playersTable)
- label(teamkitsTable)
- label(managerTable)
- label(career_presignedcontractTable)
- label(career_precontractTable)
- label(career_transferofferTable)
- label(career_scoutsTable)
- label(career_scoutmissionTable)
- label(career_managerprefTable)
- label(career_managerinfoTable)
- label(career_usersTable)
- label(career_calendarTable)
- label(teamstadiumlinksTable)
- alloc(playerDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(playerDataPtr)
- playerDataPtr:
- dq 0
- alloc(firstPlayerDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(firstPlayerDataPtr)
- firstPlayerDataPtr:
- dq 0
- alloc(ptrTeamkits, 8, $INJECT_DatabaseRead)
- registersymbol(ptrTeamkits)
- ptrTeamkits:
- dq 0
- alloc(ptrManager, 8, $INJECT_DatabaseRead)
- registersymbol(ptrManager)
- ptrManager:
- dq 0
- alloc(presignedcontractDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(presignedcontractDataPtr)
- presignedcontractDataPtr:
- dq 0
- alloc(precontractDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(precontractDataPtr)
- precontractDataPtr:
- dq 0
- alloc(transferofferDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(transferofferDataPtr)
- transferofferDataPtr:
- dq 0
- alloc(scoutsDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(scoutsDataPtr)
- scoutsDataPtr:
- dq 0
- alloc(scoutmissionDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(scoutmissionDataPtr)
- scoutmissionDataPtr:
- dq 0
- alloc(managerprefDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(managerprefDataPtr)
- managerprefDataPtr:
- dq 0
- alloc(managerinfoDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(managerinfoDataPtr)
- managerinfoDataPtr:
- dq 0
- alloc(usersDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(usersDataPtr)
- usersDataPtr:
- dq 0
- alloc(ptrCareerCalendar, 8, $INJECT_DatabaseRead)
- registersymbol(ptrCareerCalendar)
- ptrCareerCalendar:
- dq 0
- alloc(playercontractDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(playercontractDataPtr)
- playercontractDataPtr:
- dq 0
- alloc(teamstadiumlinksDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(teamstadiumlinksDataPtr)
- teamstadiumlinksDataPtr:
- dq 0
- alloc(leagueteamlinksDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(leagueteamlinksDataPtr)
- leagueteamlinksDataPtr:
- dq 0
- alloc(leagueteamlinksDataFirstPtr, 8, $INJECT_DatabaseRead)
- registersymbol(leagueteamlinksDataFirstPtr)
- leagueteamlinksDataFirstPtr:
- dq 0
- alloc(teamsDataPtr, 8, $INJECT_DatabaseRead)
- registersymbol(teamsDataPtr)
- teamsDataPtr:
- dq 0
- alloc(ptrTeamplayerlinks, 8, $INJECT_DatabaseRead)
- registersymbol(ptrTeamplayerlinks)
- ptrTeamplayerlinks:
- dq 0
- alloc(ptrFirstTeamplayerlinks, 8, $INJECT_DatabaseRead)
- registersymbol(ptrFirstTeamplayerlinks)
- ptrFirstTeamplayerlinks:
- dq 0
- label(code)
- label(return)
- new_DatabaseReadCave:
- mov r12, r8
- add rdx,rbx
- add r8,[rsi+30] // [rsi+30] = First Record addr, [rdi+8] = Table shortname (4chars)
- cmp [rdi+8], 'CZUM' // players
- je playersTable
- cmp [rdi+8], 'GdtI' // teamkits
- je teamkitsTable
- cmp [rdi+8], 'Knen' // manager
- je managerTable
- cmp [rdi+8], 'gllz' // career_presignedcontract
- je career_presignedcontractTable
- cmp [rdi+8], 'PHFQ' // career_precontract
- je career_precontractTable
- cmp [rdi+8], 'QWbR' // career_transferoffer
- je career_transferofferTable
- cmp [rdi+8], 'zlrC' // career_scouts
- je career_scoutsTable
- cmp [rdi+8], 'apoo' // career_scoutmission
- je career_scoutmissionTable
- cmp [rdi+8], 'dqXv' // career_managerpref
- je career_managerprefTable
- cmp [rdi+8], 'biWl' // career_managerinfo
- je career_managerinfoTable
- cmp [rdi+8], 'mPrV' // career_users
- je career_usersTable
- cmp [rdi+8], 'GJUr' // career_calendar
- je career_calendarTable
- cmp [rdi+8], 'DvsP' // career_playercontract
- je career_playercontractTable
- cmp [rdi+8], 'qdZF' // leagueteamlinks
- je leagueteamlinksTable
- cmp [rdi+8], 'kISL' // teamstadiumlinks
- je teamstadiumlinksTable
- cmp [rdi+8], 'lyxL' // teams
- je teamsTable
- cmp [rdi+8], 'RrqT' // teamplayerlinks
- je teamplayerlinksTable
- jmp code
- playersTable:
- // 0x64
- mov [playerDataPtr], r8
- mov r8, [rsi+30]
- mov [firstPlayerDataPtr], r8
- mov r8, [playerDataPtr]
- jmp code
- teamkitsTable:
- mov [ptrTeamkits], r8
- jmp code
- managerTable:
- mov [ptrManager], r8
- jmp code
- career_presignedcontractTable:
- mov [presignedcontractDataPtr], r8
- jmp code
- career_precontractTable:
- mov [precontractDataPtr], r8
- jmp code
- career_transferofferTable:
- mov [transferofferDataPtr], r8
- jmp code
- career_scoutsTable:
- mov [scoutsDataPtr], r8
- jmp code
- career_scoutmissionTable:
- mov [scoutmissionDataPtr], r8
- jmp code
- career_managerprefTable:
- mov [managerprefDataPtr], r8
- jmp code
- career_managerinfoTable:
- mov [managerinfoDataPtr], r8
- jmp code
- career_usersTable:
- mov [usersDataPtr], r8
- jmp code
- career_calendarTable:
- mov [ptrCareerCalendar], r8
- jmp code
- career_playercontractTable:
- mov [playercontractDataPtr], r8
- jmp code
- teamstadiumlinksTable:
- mov [teamstadiumlinksDataPtr], r8
- jmp code
- leagueteamlinksTable:
- mov [leagueteamlinksDataPtr], r8
- mov r8, [rsi+30]
- mov [leagueteamlinksDataFirstPtr], r8
- mov r8, [leagueteamlinksDataPtr]
- jmp code
- teamsTable:
- mov [teamsDataPtr], r8
- jmp code
- teamplayerlinksTable:
- // 0x10?
- mov [ptrTeamplayerlinks], r8
- mov r8, [rsi+30]
- mov [ptrFirstTeamplayerlinks], r8
- mov r8, [ptrTeamplayerlinks]
- jmp code
- code:
- jmp return
- $INJECT_DatabaseRead:
- jmp new_DatabaseReadCave
- nop
- nop
- return:
- [DISABLE]
- //code from here till the end of the code will be used to disable the cheat
- {$lua}
- writeBytes(INJECT_DatabaseRead, ORG_DatabaseRead)
- {$asm}
- unregistersymbol(playerDataPtr)
- unregistersymbol(ptrTeamkits)
- unregistersymbol(ptrManager)
- unregistersymbol(presignedcontractDataPtr)
- unregistersymbol(precontractDataPtr)
- unregistersymbol(transferofferDataPtr)
- unregistersymbol(scoutsDataPtr)
- unregistersymbol(scoutmissionDataPtr)
- unregistersymbol(managerprefDataPtr)
- unregistersymbol(managerinfoDataPtr)
- unregistersymbol(usersDataPtr)
- unregistersymbol(ptrCareerCalendar)
- unregistersymbol(playercontractDataPtr)
- unregistersymbol(teamstadiumlinksDataPtr)
- unregistersymbol(leagueteamlinksDataPtr)
- unregistersymbol(leagueteamlinksDataFirstPtr)
- unregistersymbol(teamsDataPtr)
- unregistersymbol(ptrTeamplayerlinks)
- dealloc(new_DatabaseReadCave)
- dealloc(playerDataPtr)
- dealloc(ptrTeamkits)
- dealloc(ptrManager)
- dealloc(presignedcontractDataPtr)
- dealloc(precontractDataPtr)
- dealloc(transferofferDataPtr)
- dealloc(scoutsDataPtr)
- dealloc(scoutmissionDataPtr)
- dealloc(managerprefDataPtr)
- dealloc(managerinfoDataPtr)
- dealloc(usersDataPtr)
- dealloc(ptrCareerCalendar)
- dealloc(playercontractDataPtr)
- dealloc(teamstadiumlinksDataPtr)
- dealloc(leagueteamlinksDataPtr)
- dealloc(leagueteamlinksDataFirstPtr)
- dealloc(teamsDataPtr)
- dealloc(ptrTeamplayerlinks)
- {
- // ORIGINAL CODE - INJECTION POINT: "FIFA19.exe"+12541435
- "FIFA19.exe"+12541411: 74 59 - je FIFA19.exe+1254146C
- "FIFA19.exe"+12541413: 44 8B 46 44 - mov r8d,[rsi+44]
- "FIFA19.exe"+12541417: 48 8D 96 84 00 00 00 - lea rdx,[rsi+00000084]
- "FIFA19.exe"+1254141E: 0F B6 E8 - movzx ebp,al
- "FIFA19.exe"+12541421: 49 89 F9 - mov r9,rdi
- "FIFA19.exe"+12541424: 41 0F B7 C6 - movzx eax,r14w
- "FIFA19.exe"+12541428: 89 EB - mov ebx,ebp
- "FIFA19.exe"+1254142A: 44 0F AF C0 - imul r8d,eax
- "FIFA19.exe"+1254142E: 48 89 F1 - mov rcx,rsi
- "FIFA19.exe"+12541431: 48 C1 E3 04 - shl rbx,04
- // ---------- INJECTING HERE ----------
- "FIFA19.exe"+12541435: 48 01 DA - add rdx,rbx
- "FIFA19.exe"+12541438: 4C 03 46 30 - add r8,[rsi+30]
- // ---------- DONE INJECTING ----------
- "FIFA19.exe"+1254143C: E8 5F FC 47 EF - call FIFA19.exe+19C10A0
- "FIFA19.exe"+12541441: 83 BC 33 84 00 00 00 00 - cmp dword ptr [rbx+rsi+00000084],00
- "FIFA19.exe"+12541449: 75 15 - jne FIFA19.exe+12541460
- "FIFA19.exe"+1254144B: 48 8D 45 09 - lea rax,[rbp+09]
- "FIFA19.exe"+1254144F: 48 01 C0 - add rax,rax
- "FIFA19.exe"+12541452: 8B 0C C6 - mov ecx,[rsi+rax*8]
- "FIFA19.exe"+12541455: 48 8B 07 - mov rax,[rdi]
- "FIFA19.exe"+12541458: 48 C1 E9 03 - shr rcx,03
- "FIFA19.exe"+1254145C: C6 04 01 00 - mov byte ptr [rcx+rax],00
- "FIFA19.exe"+12541460: 48 83 C7 18 - add rdi,18
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement