In this way, I change the GXT entry's, read the codes:
Find GXT Entry:
Change GXT String
ASM injectors
In CLEO there is a more easy way, Seemann created:
The text will not appear in upper-case, only how you write it.
- Code:
:ChangeGXTEntries
alloc($_param1, 76)
alloc($_asmproc, 77)
alloc($_param2, 78)
1@ = @_GXTNewString_1
2@ = @_GXTNewString_2
3@ = @_GXTNewString_3
4@ = @_GXTNewString_4
0@ = -429863
31@ = 1
while 31@ < 8 // strings mult 2
Find GXT Entry:
- Code:
&0(0@,1i) = 0xA49960
&0(0@,1i) += @_GetGxtStringPointer
$_asmproc = 0x6A0050
$_param1 = 0xA49958
005E: $_param1 += 1@(31@,33i)
0572: run_asm_inject true
Change GXT String
- Code:
dec(31@)
$_param1 = 0xA49964
005E: $_param1 += 1@(31@,33i)
&0(0@,1i) = 0xA49960
&0(0@,1i) += @_CopyString
$_asmproc = 0x718660
0572: run_asm_inject true
inc(31@,2)
end
ASM injectors
- Code:
:_GetGxtStringPointer
hex
FF 35 909AA400
B9 40B3C100
FF 15 949AA400
A3 989AA400
C3
end
:_CopyString
hex
FF 35 909AA400
FF 35 989AA400
FF 15 949AA400
83 C4 08
C3
end
// Compiled Strings Pool (null-terminated)
:_GXTNewString_1
0900: "Text Value"
0900: 'Entry'
:_GXTNewString_2
0900: "Text Value"
0900: 'Entry'
:_GXTNewString_3
0900: "Text Value"
0900: 'Entry'
:_GXTNewString_4
0900: "Text Value"
0900: 'Entry'
In CLEO there is a more easy way, Seemann created:
- Code:
0A9F: 1@ = current_thread_pointer
000A: 1@ += 0x10
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
000E: 1@ -= @GxtLabel
000A: 1@ += 0x3
0AA8: call_function_method 0x6A0050 struct 0xC1B340 num_params 1 pop 0 1@ 0@ // GetGxtString
000A: 1@ += 0xC
0AA5: call 0x718600 num_params 2 pop 2 0@ 1@ // cpystr
0A93: end_custom_thread
:GxtLabel
0900: 'ITBEG'
:NewName
0900: "NEW NAME"
0000: null_terminator
The text will not appear in upper-case, only how you write it.