Quote:
Originally Posted by 0o0
i see that the length is there before the name however im having trouble reaching the offset im on pw international using the bypass client.
|
Not all values are as easily found as HP for instance, but with a little detective work and patience, not to mention logic, it is doable.
Starting off with correct value is in most cases only way to go (and always proper way to go).
Same as cat skinning, there are more than one way to find values. Method described below is not what I used, but it is one I tested before posting this and hopefully should work for you. Remember that it's written specifically for finding nickname in Perfect World and is not to be used as a general rule to finding texts (though it may work in some other cases).
While it assumes using Cheat Engine as memory scanning tool, others will work as well long as you modify operations to software of your choice.
Right, let's clear out the basics in case you or any other aren't familiar with CE:
- start game (good approach is to start with fresh "run", less memory to scan for and less false positives)
- start cheat engine
- hook cheat engine to game process.
Set scanning option to:
- value type to: text
- check checkbox Case sensitive (you know what case your name is)
- check checkbox Unicode (we covered that already :))
Click First Scan
So far so good, we get loads of matches, some are ok, others are just in the way. Obviously, some filtering is required.
I realize this isn't school, but it won't kill anyone to learn something. Hopefully.
Strings, especially ones that change length often, are a tricky business. They can be constantly copied around memory, according to the new length they are set to. For example, if we assign a value of "Test" to a variable of type string (or whatever it might be called in language of your choice), pointer is created. This pointer points to a first letter (char) in memory location that was selected to hold this particular value. 8 bytes are reserved for it, 4 for length and 4 for our value. Unicode will take a bit more, 4 for length, and 8 for value, since every unicode character takes 2 bytes.
Because space after 12 bytes we occupy is assigned to other things already and space before it was occupied even before string was assigned, our value is now neatly boxed in. Since values aren't prone to claustrophobia, this isn't a problem, however if "Test" should decide to grow a bit and become "Test I am"... the dog house will not be enough anymore.
Doesn't take a rocket scientist (though he may be helpful if you got one handy) to figure out that 22 bytes (new length of unicode "Test I am" + length it self) will not fit into 12 bytes "box". We can't very well push stuff that's around out of our way to make room, since that would make all other variables point to wrong memory addresses. Solution is to find a new home in memory that has at least the amount of space we need, copy existing string value there and add " I am".
Note that I said copy not move. Old value is still there, it may not be used by anything and it's marked as unused, but it's still there. Those values are false positives. Remnants of things passed for dramatic. Luckily for us, since they are marked as unused, they can freely be overwritten and some will, exactly what we want.
So, lesson over, back to work.
Loads of matches all pointing at the same value. Let's allow dynamic memory to work in our favour, make the game overwrite some of our false positives. How? Easy, force it to load more things into memory. Run around, go into crowded places, take a quest, kill a mob,... be inventive.
Soon, some of the matches will loose your nickname and get assigned a different value. As that happens, keep clicking Next scan to remove unwanted ones. Don't bother doing this for longer than 2-3 minutes however, whatever is left is what you'll have to work with.
Not all will go away this easy, some simply didn't get overwritten while other are still in use.
Let's move remaining matches to bottom window (don't really know how it's called) by selecting them and clicking on a red arrow button.
We started off with fresh run of the game, thus following assumption can be made: low lying addresses were assigned before high lying ones, i.e. value at address 0x04C6FFF0 was most likely assigned before value at address 0x0B446424.
Armed with this knowledge (and a little of the game itself) we should probably start from the bottom up, in this case from higher addresses towards lower ones.
Right click bottom most entry and from dropdown select "What accesses this address". Alt tab the game into focus for a second, than back to CE. If the little window that opened is still empty, close it and remove offending entry (right click and Delete this address). It's not the one we are looking for. Rinse and repeat, eliminating all that don't yield any results and keeping those that do.
Please note we aren't looking for first offset yet, only trying to eliminate false matches.
When I tried that, I was left with 2 entries and to give you a little hint: lower one (one with higher address) was correct one. If you are unsure of which one is good, attempt finding base pointer on both. You know right one will only have 3 levels and it's very likely that incorrect one will lead you pass 3 levels at which point you can eliminate it.
Value searched is now found and you can begin finding offsets till they lead you to the base pointer.
To throw some more hints your way, although mentioned in my previous post:
- first offset will be 0
- third (and last) offset will be 0x20
- second offset will something like (but not exactly, I made them up to provide an example) 0x4EC or 0x604 and not 0x4C, 0x1C, etc,...
It occurred to me while writing this novel that you may very well know all this things already, but I figured someone else may not, so I kept going.
Can't really provide you with specifics on how to find offsets, apart from be patient and diligent. I guess step by step “guide” would help you find it, but wouldn't teach you much in the end.
Unless of course offsets are all you are after, in which case just send me cracked .exe and save me the time to write 2 pages long forum posts. :)
Quote:
Originally Posted by rahulsk8erboi
wher 2 paste this thinge...
me newbie to this game...
plzz
reply...
|
After 25 pages in this thread of people posting all sorts of "things", you might want to narrow your definition of "thinge" just a bit if you in fact expect a constructive reply.
I also have a sneaky suspicion that you (in general) often opt for Post option where Search would be a far better alternative.