Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Cannot find any pointer

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
CassiOwOpeia
Newbie cheater
Reputation: 0

Joined: 29 Nov 2018
Posts: 18
Location: France

PostPosted: Wed Aug 09, 2023 6:26 pm    Post subject: Cannot find any pointer Reply with quote

In a game I try to find a pointer corresponding to magic points. I hope that it's readable, I try my best to make this post readable! Embarassed

To explain briefly, I find the value (4 bytes) corresponding to what I am looking for, if I modify it the game changes the value as expected. When I look at the instructions that access this address I naturally find a subtraction. I start looking for a pointer manually by looking at the first offset as well as the first address, however I can't find any address pointing to the address I'm looking for. I don't get discouraged and I use the pointerscan, I find thousands of results, I restart the game and I do a rescan, and now there is no address left.

The thing that is weird is when I search for the value, I have four exact values (I don't know why but I think it's normal, only one really change the value in game), but I found other values that have the same behavior (increase by and decrease by the same amount, but that don't have the same values).

For exemple when I have max magic, I have 40 (of true value), but there is other values with 108.

I tried to look at the instructions that precede the substraction, but there is nothing very convincing.

Here's the list of instructions that access the address :
Code:
00D0946D - 8B 49 08 - mov ecx,[ecx+08]
00D0948F - 8B 49 08 - mov ecx,[ecx+08]
00D217D2 - 8B 41 08 - mov ecx,[ecx+08]
00D28427 - 29 41 08 - sub [ecx+08],eax

The three first instructions occur everytime (because when we change value it changes instantly the value in game, I think that's the purpose of the instructions)
And the substraction instruction that occurs when we fire a spell.

Here's the list of addresses that behavior just like the real value :
Code:
Address    -    Value    -    Comments
0717D76C    -    1119485952 - It doesn't increase by and decrease by the same amount than the real value, but increase and decrease when the real value is increasing or decreasing
0717D788    -    1119485952 - same thing
0B403A48    -    35    -    Same value as the real, but useless
0B403A58    -    93    -    Same behavior than the real value
0B403B08    -    93    -    Same behavior than the real value
0B403C10    -    2310222 - same thing as above
0E81BD68    -    35    -    Same value as the real, but useless
0E81BD84    -    93    -    Same behavior than the real value
0E81BD9C    -    35    -    Same value as the real, but useless
0E81BDB8    -    93    -    Same behavior than the real value
0E89D4B8    -    35    -    This was indeed the true value


PS: Of course I'm adding that when I search the address at ecx, there is no address pointing at.

Thanks in advance for reading!
Back to top
View user's profile Send private message
ParkourPenguin
I post too much
Reputation: 152

Joined: 06 Jul 2014
Posts: 4724

PostPosted: Wed Aug 09, 2023 10:06 pm    Post subject: Reply with quote

There are plenty of reasons why a "traditional" pointer path might not exist. This isn't an unusual circumstance.

Try code injection instead. Make sure the instruction doesn't access any other address, then do a code injection to copy the address being accessed (search "injection copy").

_________________
I don't know where I'm going, but I'll figure it out when I get there.
Back to top
View user's profile Send private message
CassiOwOpeia
Newbie cheater
Reputation: 0

Joined: 29 Nov 2018
Posts: 18
Location: France

PostPosted: Thu Aug 10, 2023 11:57 am    Post subject: Reply with quote

Thanks you for your answer !

So the best way to "always found the pointer" is to just copy the address that is used in the instruction, and looking if there is no other addresses that is being access by the instruction ?

It feels a bit sad to not being able to found a pointer path, can you tell me some of the reasons of why I canno't found a "traditional" pointer path ? or maybe a documentation or somewhere where I can understand a bit more there kind of pointers ?
Back to top
View user's profile Send private message
ParkourPenguin
I post too much
Reputation: 152

Joined: 06 Jul 2014
Posts: 4724

PostPosted: Thu Aug 10, 2023 3:00 pm    Post subject: Reply with quote

I wouldn't call it the best way. That would largely depend on the instruction you're injecting at. Instructions that access multiple addresses are annoying to deal with. Also, the game has to run the instruction in order for your injection to copy the address. This can lead to circumstances where people may think the script doesn't work when they actually need to do something in game in order for the instruction to run.


Pretty much everything in a pointer path could go wrong.

Pointer paths could go through weird data structures that result in non-static offsets. e.g. any container that gets populated in a non-deterministic manner, either intentionally (DoS-resistant hash maps, certain arena implementations) or unintentionally (race conditions).
You could look through the container manually to find the object you want, or there could be an index stored in memory related to it. In any case, the pointer scanner won't be able to do anything about it.

Some offsets can be obscenely large. This is common in emulators. It's infeasible to use a max offset of 2GiB or something in a pointer scan.

I've seen JIT compilers encode dynamically allocated addresses as an immediate in instructions. These practically serve as base addresses that can't be found by the pointer scanner.
Code:
mov rsi,000027A943BE7040
Both the address being moved into rsi and the address the code is located at are in dynamically allocated memory. There's no way CE could find this between several pointer maps.
You could use an aobscan to find the code (output of JIT compilers is usually consistent enough) and get the base address that way, but there's no way the pointer scanner could help you here.

Addresses can be obfuscated in memory. Java embeds other data in pointer values, and emulators can use weird things with addresses (e.g. big endian is one of the simpler problems to deal with).

I'm sure I'm forgetting other things.

_________________
I don't know where I'm going, but I'll figure it out when I get there.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites