Is there a way to change the register on which Dissect Data is based?

Section's for general approaches on hacking various options in games. No online-related discussions/posts OR warez!
Post Reply
User avatar
SilverRabbit90
Table Makers
Table Makers
Posts: 258
Joined: Fri Jan 15, 2021 12:01 am
Reputation: 222

Is there a way to change the register on which Dissect Data is based?

Post by SilverRabbit90 »

As in the title, I would like to know if there is a way to change the register accessed from the "Dissect Data Structure." Let me explain better:

After finding a certain value and creating a script on top (to be honest, creating a script is not necessary, but it can be very helpful), in the "Memory Viewer," you can right-click at the injection point of our script and choose the option "Find out what addresses this instruction accesses" to see what that part of memory effectively contains. At this point, simply right-click on our value present in the "Accessed addresses by xxxxxx" window and select "Open dissect data with selected addresses" to open the "Dissect Data Structure." This will open the dissect data, but for a specific register defined at the injection point of the code, for example, in this code:

Code: Select all

[ENABLE]

aobscan(PlayerExpOnStatusMenuA,48 63 80 C8 00 00 00 48 89 85) // should be unique
alloc(newmem,$1000,PlayerExpOnStatusMenuA)

label(code)
label(return)

label(seePlayerExp)
registersymbol(seePlayerExp)

newmem:

mov [seePlayerExp],rax

code:
  movsxd  rax,dword ptr [rax+000000C8] 
  jmp return

  seePlayerExp:


PlayerExpOnStatusMenuA:
  jmp newmem
  nop 2
return:
registersymbol(PlayerExpOnStatusMenuA)

[DISABLE]

PlayerExpOnStatusMenuA:
  db 48 63 80 C8 00 00 00

unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 010BCA50

010BCA26: 48 8B 00                       - mov rax,[rax]
010BCA29: 90                             - nop 
010BCA2A: 90                             - nop 
010BCA2B: 90                             - nop 
010BCA2C: FF 90 C8 02 00 00              - call qword ptr [rax+000002C8]
010BCA32: 48 83 C4 20                    - add rsp,20
010BCA36: 48 8B 86 68 02 00 00           - mov rax,[rsi+00000268]
010BCA3D: 48 89 85 F8 FE FF FF           - mov [rbp-00000108],rax
010BCA44: 48 8B 04 25 E0 1E B0 33        - mov rax,[33B01EE0]
010BCA4C: 48 8B 40 58                    - mov rax,[rax+58]
// ---------- INJECTING HERE ----------
010BCA50: 48 63 80 C8 00 00 00           - movsxd  rax,dword ptr [rax+000000C8]
// ---------- DONE INJECTING  ----------
010BCA57: 48 89 85 E0 FE FF FF           - mov [rbp-00000120],rax
010BCA5E: B9 D8 99 14 05                 - mov ecx,051499D8
010BCA63: 48 83 EC 20                    - sub rsp,20
010BCA67: 49 BB 50 24 5B 05 00 00 00 00  - mov r11,00000000055B2450
010BCA71: 41 FF D3                       - call r11
010BCA74: 48 83 C4 20                    - add rsp,20
010BCA78: 48 8B 8D E0 FE FF FF           - mov rcx,[rbp-00000120]
010BCA7F: 89 48 10                       - mov [rax+10],ecx
010BCA82: 48 89 85 E8 FE FF FF           - mov [rbp-00000118],rax
010BCA89: 48 8B 04 25 E0 1E B0 33        - mov rax,[33B01EE0]
}
The register used in the "Dissect Data" will be RAX because it is defined at the injection point movsxd rax,dword ptr [rax+000000C8] (in this case, the rax in square brackets).

My question is: can you make it so that the dissect data accesses another register, for example, RSP or RBP, etc.?

Yes, I know that you can examine these registers using other methods like "Find commonalities between addresses" (where you need at least two values entering the same offset; otherwise, this method is not usable) or the method "Show register states" followed by clicking on the "S" for "Stack view." But I would like to access different registers via "Dissect Data." I need it for a tool that helps with comparisons.


.
Here is my Cheat Engine Tutorial:
[Link]

Post Reply

Who is online

Users browsing this forum: No registered users