And here are some goodies for the upcoming full version
Preparations, lol
GetName: (you need a certain pointer format for this to work; for me to know)
Code: Select all
function _readInteger( Input )
-- thanks, Pox!
local Value = readInteger( Input )
if Value < 0x80000000 then return Value
else return Value - 0x100000000 end
end
function GetName( input )
local addr = readQword( input )
addr = addr + 0x48 -- 0x48 in Breakpoint
addr = readQword( addr )
if readBytes( addr, 1 ) == 0xE9 then
addr = addr + _readInteger( addr + 0x1 ) + 0x5
end
addr = addr + _readInteger( addr + 0x3 ) + 0x7
addr = readQword( addr )
print( string.format( "IStruct: 0x%X", input ) )
print( string.format( "IName: 0x%X", addr ) )
local str = readString( readQword( addr + 0x20 ) )
print( string.format( "ObjStr: %s", str ) )
addr = readInteger( addr + 0x2C )
print( string.format( "ObjHash: 0x%X", addr ) )
print( "" )
print( "* * *")
end
GetName( 0x15B9E890AE0 )
Example:
Code: Select all
IStruct: 0x15B9E890AE0
IName: 0x7FF7411C56A0
ObjStr:
ObjHash: 0x6CD605D3
Note the developers have stripped almost any string references leading to their classes/objects
Luckily, I stored the crc32b hashes table dumped from the GRW PS4 ISO
So 0x6CD605D3 == "GR_cPlayerComponent".
And a nifty hook spot for various useful pointers, player-related, that can be used in turning all the scripts out there player-only
Code: Select all
GRB.exe+1D9232D0 - 48 89 E0 - mov rax,rsp <-- hook here
GRB.exe+1D9232D3 - 48 89 58 08 - mov [rax+08],rbx <-- or here
GRB.exe+1D9232D7 - 48 89 68 10 - mov [rax+10],rbp
GRB.exe+1D9232DB - 48 89 70 18 - mov [rax+18],rsi
GRB.exe+1D9232DF - 57 - push rdi
GRB.exe+1D9232E0 - 41 56 - push r14
GRB.exe+1D9232E2 - 41 57 - push r15
GRB.exe+1D9232E4 - 48 81 EC 80000000 - sub rsp,00000080
GRB.exe+1D9232EB - 0F29 70 D8 - movaps [rax-28],xmm6
GRB.exe+1D9232EF - 48 89 CF - mov rdi,rcx
GRB.exe+1D9232F2 - 0F29 78 C8 - movaps [rax-38],xmm7
GRB.exe+1D9232F6 - 0F28 F1 - movaps xmm6,xmm1
GRB.exe+1D9232F9 - 44 0F29 40 B8 - movaps [rax-48],xmm8
GRB.exe+1D9232FE - 44 0F29 48 A8 - movaps [rax-58],xmm9
GRB.exe+1D923303 - 44 0F29 50 98 - movaps [rax-68],xmm10
GRB.exe+1D923308 - E8 F306DEE4 - call GRB.exe+2703A00
GRB.exe+1D92330D - 48 8B 87 40030000 - mov rax,[rdi+00000340]
GRB.exe+1D923314 - 45 31 FF - xor r15d,r15d
GRB.exe+1D923317 - 48 83 F8 FD - cmp rax,-03 { 253 }
GRB.exe+1D92331B - 77 4C - ja GRB.exe+1D923369
GRB.exe+1D92331D - 48 85 C0 - test rax,rax
GRB.exe+1D923320 - 75 0A - jne GRB.exe+1D92332C
GRB.exe+1D923322 - 48 8B 87 48030000 - mov rax,[rdi+00000348]
GRB.exe+1D923329 - 48 8B 00 - mov rax,[rax]
GRB.exe+1D92332C - 48 3B 87 38030000 - cmp rax,[rdi+00000338]
GRB.exe+1D923333 - 72 34 - jb GRB.exe+1D923369
GRB.exe+1D923335 - 44 88 BF 8B040000 - mov [rdi+0000048B],r15l
GRB.exe+1D92333C - 48 8B 87 48030000 - mov rax,[rdi+00000348]
GRB.exe+1D923343 - 48 85 C0 - test rax,rax
GRB.exe+1D923346 - 74 05 - je GRB.exe+1D92334D
GRB.exe+1D923348 - 48 8B 08 - mov rcx,[rax]
GRB.exe+1D92334B - EB 03 - jmp GRB.exe+1D923350
GRB.exe+1D92334D - 4C 89 F9 - mov rcx,r15
GRB.exe+1D923350 - 48 89 8F 30030000 - mov [rdi+00000330],rcx
GRB.exe+1D923357 - 4C 89 BF 38030000 - mov [rdi+00000338],r15
GRB.exe+1D92335E - 48 C7 87 40030000 FFFFFFFF - mov qword ptr [rdi+00000340],FFFFFFFFFFFFFFFF
At the above point, you got these:
rbx == GR_cPlayerComponent
rcx == g_Player (don't have the string for 0x3F61AFE6 hash yet; this is the same in GRW)
[rcx+8] == Entity (our player's Entity; 0x0984415E)
Example: (this will make sure the God check is applied only to your g_Player, just in case the enemy benefits from it)
Code: Select all
[ENABLE]
aobscanmodule( GodMode, GRB.exe, 80BB????????000F85????????80BB????????000F85????????F683 )
registersymbol( GodMode )
label( GodMode_o )
registersymbol( GodMode_o )
alloc( Hook, 0x1000, GRB.exe )
Hook:
push rax
mov rax,[g_Player]
test rax,rax
je short @f
cmp rax,rbx
jne short @f
mov byte ptr [rbx+48B],1
@@:
pop rax
GodMode_o:
readmem( GodMode, 7 )
jmp GodMode+7
GodMode:
jmp Hook
db 90 90
[DISABLE]
[g_Player]+48B:
db 0
GodMode:
readmem( GodMode_o, 7 )
unregistersymbol( GodMode )
unregistersymbol( GodMode_o )
dealloc( Hook )