| View previous topic :: View next topic |
| Author |
Message |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Sun Dec 23, 2007 3:27 pm Post subject: What happens when we get 400 invalid results in ptr scan? |
|
|
Ok i have been searching for a string. I find the string then i do a "pointer scan for this address" i do like a level 6 and get about 400 results.
Then i restart game/computer or go to another computer and find the same string then i load the result of that "pointer scan for address" and put the new address(remove invalid pointers) and it returns zero. So it finds tons of addresses but when you restart none of them work.
do i just keep going up in level ? I just did a level 8 and found 22 then i restarted and none of them were valid.
I have found tons of other stuff this way, but this dont seem to be working, any ideas ? I could just do like lvl 10 but that takes forever i will do it but i just want to know if thats what i "should" do
tia
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Sun Dec 23, 2007 6:57 pm Post subject: |
|
|
Depends on what the game is, You have not said what game. So the answers you will get are random.
example: flash games. If you find a pointer, it will definitely change after restart of the game.
Regular game, Your getting a code shift.
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Sun Dec 23, 2007 7:57 pm Post subject: |
|
|
Its a mmorpg (shadowbane) i just did a search for up to 15 level pointers and found some 25k results after restarting game 0 pointed to the right place what do you mean by a "code shift" and is there any way around it ?
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Sun Dec 23, 2007 8:08 pm Post subject: |
|
|
Any level 1 pointers? Or any less then 4?
Also, try altering assembly instruction that you find that write to the address or read/access it.
Be sure to use module+remainder of the offset so it can calculate the address from the base address of the module you are in.
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Sun Dec 23, 2007 8:15 pm Post subject: |
|
|
The assembly address that writes to it is normally a function that handles allmost all text that goes out to the screen. It moves it around and stuff. so if i edit that it normally crashes because it might work for the string im working with but not every string printed to the screen..
im gonna do a lvl2 scan see what i get
oh the base address "sb.exe" is always the same 0x400000 i think thats what you mean.
well maybe there aren't any >4 level pointers i looked found nothing.
this is what reads it im not the greatest at asm but when i put a bp on this it breaks for all kinds of other text, so its not just the text im looking for i wish it was.
| Code: | 00336D10 >/$ 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]
00336D13 |. 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4]
00336D17 |. 66:8B0448 MOV AX,WORD PTR DS:[EAX+ECX*2]
00336D1B \. C2 0400 RETN 4
|
this is one of the things that writes to it ... i tore into it the other day
and found out what it does. I do have some asm know how.
| Code: | 00331290 /$ 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8] // end of string
00331294 |. 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4] // begining of string
00331298 |. 2BC1 SUB EAX,ECX // subtract to get the amount of chars
// subtracting eax from ecx you get '0x18' or 24
// and there would be 24 chars in the unicode of "night spider"
ECX=0BAEB7D8, (UNICODE "Night Spider") EAX=0BAEB7F0
0033129A |. D1F8 SAR EAX,1 // shifts to the right once ?
0033129C |. 85C0 TEST EAX,EAX // if theres nothing jump ?
0033129E |. 7E 18 JLE SHORT Core.003312B8 // jump do nothing ?
003312A0 |. 8BD0 MOV EDX,EAX // move the difference into edx
003312A2 |. 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] // another part of the string ? Termintor ?
003312A6 |. 56 PUSH ESI // get esi ready as a working register for transfer
003312A7 |> 66:8B31 /MOV SI,WORD PTR DS:[ECX] // move this char of ecx into si
003312AA |. 83C1 02 |ADD ECX,2 // add 2 to ecx (null space for unicode)
003312AD |. 66:8930 |MOV WORD PTR DS:[EAX],SI // move the char into eax
003312B0 |. 83C0 02 |ADD EAX,2 // add two for null char
003312B3 |. 4A |DEC EDX // subtract one from the difference
003312B4 |.^75 F1 JNZ SHORT Core.003312A7 // if the difference (if theres still chars) jump
003312B6 |. 5E POP ESI // finished with esi
003312B7 |. C3 RETN
003312B8 |> 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] // not sure why it would jump here ?
003312BC . C3 RETN |
another thing, the text im looking for is usually overwritten with other stuff as soon as the window that contains it is destoyed, i can find the original text, this being where it pulls the string from, i can access it with ease and find it but that string is moved into memory at another location and then printed to the screen, if i edit the original it will show up on the screen like that but i cant change it and have the changes show up in "real time"
hope that makes sence.
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Sun Dec 23, 2007 9:09 pm Post subject: |
|
|
Looking in text, the first one you find is not static?
Yeah you will need to manually look for a pointer and see what
[ESP+8]
[ESP+4]
ESP+? is and address so,
ESP = ???????? + offset of 8 Theres 1 pointer,
ESP = ???????? + offset of 4 this is another one.
You will have to try and track it down.
???????? + offset = pointer
It is hard to tel you what to do, since im not in the game and looking as well. But i think your getting the idea since you understood about the base address of the exe/module was 400000.
If you had an address 331290 and base of the module was 400000 your not in your exe. Or the base address of it is not 400000
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Sun Dec 23, 2007 9:20 pm Post subject: |
|
|
| Labyrnth wrote: |
If you had an address 331290 and base of the module was 400000 your not in your exe. Or the base address of it is not 400000 |
Yes that makes sense. So maybe im looking in the wrong place ? When i do the pointer search i in the games .exe I have tried looking for the esp + 8 but esp changes for everything sent through the function and they execute before the breakpoint ... So ce wont find them ?
I might be wrong but i thought ce would be better at finding pointers than me doing it by hand ?
update: looking at it the address 331290 is not in the sb.exe its in core.dll maybe i should scan for pointers there ?
core.dll is 00320000 - 00362000
searched in core.dll i never find any pointers (to 4 levels)
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Mon Dec 24, 2007 9:32 am Post subject: |
|
|
Heh, told yah you wasnt in the exe.
Now manually track down a pointer.
Example:
1. Find out what writes to the address you find. *Read or Access also if nothing useful found.
2. Now click more info on what it found.
You find this: 71a5162f - ff 75 08 - push [ebp+08]
So you see the spot that says:
"The value of the pointer needed to find this address is probably"
02CFFAD4
Ok so in CE you do this:
After you find an address on the left, if it is green you have found the level 1 pointer. If not then you will have to figure your offset from this find.
By subtracting the 2 address's to get the offset.
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Mon Dec 24, 2007 9:42 am Post subject: |
|
|
So just trace it back and write down the offsets, like in your example i would write down -08 for the last offset. I thought thats what cheat engine does ?
Dont get me wrong ive done tons of what your talking about i just thought that the "scan for pointers to this address" would do it much better than i would. Like i would never attempt to find a pointer thats 10 levels deep manually.
So i guess by me doing it manually i will for some reason have better results ?
NE way thanks Labyrinth and merry Christmas.
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Mon Dec 24, 2007 10:04 am Post subject: |
|
|
Not sure ce does it that way or not, But it does miss pointers with pointer scan.
I have come across nothing using it, then manually found some level 1 and 3 pointers. So i could not really say how it does it.
One such game right now that no pointers are found using pointer scan is Angels Online.
But i find them manually. So no big deal really.
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Mon Dec 24, 2007 12:07 pm Post subject: |
|
|
Well i tried it a few times (find out what reads from this address) it took me to some semi familiar functions that read strings into other functions and stuff like
[eax+ecx*2] but it seems to be crashing all the time, funny it never crashed before. Im gonna peruse other methods. I have reliably found a string but its the players name so different players have different names (lenghts) im gonna try and find how to make their names longer and just leave my menu there.
thanks again
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Mon Dec 24, 2007 1:34 pm Post subject: |
|
|
I see whats going on, You need to lower the start address from 400000 when doing pointer scan. Since the base you are in is not 400000.
I bet it will find pointers then.
|
|
| Back to top |
|
 |
zonemikel Newbie cheater
Reputation: 0
Joined: 20 Dec 2007 Posts: 18
|
Posted: Mon Dec 24, 2007 2:42 pm Post subject: |
|
|
Great idea ill try it.
What about all that other stuff (checkboxes)
"Writable memory as base only" is the only one i have checked
|
|
| Back to top |
|
 |
|