| View previous topic :: View next topic |
| Author |
Message |
relation How do I cheat?
Reputation: 0
Joined: 20 Aug 2006 Posts: 6
|
Posted: Tue May 27, 2008 2:43 pm Post subject: Pseudo-Static Pointer! |
|
|
Note: The sole hacking of this game is not important but what is important is its method for storing the data
Note 2: I know there are already some topics about this but this one is not aveyond specific!
Game Info:
Aveyond 2 from (reflexive DOT com SLASH Aveyond2 DOT html) Reflexive Arcade
This game is made with (tkool DOT jp SLASH products SLASH rpgxp SLASH eng SLASH) RPG Maker XP and so a lot of games can have the same hacking procedure.
An Unwrapper for the .RWG files:(you are responsible for its use)
(arteam DOT accessroot DOT com SLASH releases SLASH dl DOT php?id=27)
Known Info About The Game Memory:
1.Generally all the values are encoded this way:
MemoryValue=InGameValue*2+1
They are generally 4 bytes
2.The process that responds to scans is game.exe
3.Some values such as gold and items and remaining HP and MP are saved in single memory locations while some others like the increased MP is recorded in another location (that is, they are added to the main value in the game) and also with the same value encoding method (a*2+1).
4.The code responsible for most of the value changes in the game is this(you can find it by searching for the pointer of an address you found previously):
| Code: | | Code :00da6ff4 - 89 47 08 - mov [edi+08],eax |
and if you add it in the Code List you can find the addresses that it accesses to them. For example:
Go to the Items menu and select an item to increase HP or MP then just before applying the item on a player, go to CE and activate the said code's "Find out what addresses this code accesses" (by right clicking on the added code) and return to game and just apply the item and without anything more Alt+Tab to CE and stop the debugging and add all the found addresses, then you shall find some interesting addresses. (just look for and think a bit)
PROBLEM:
When I find an address and then the corresponding pointer, it seems that that found pointer is a Static one since it doesn't result in more pointers.
However, the seemingly static pointer changes after the game restarts!
Question:
What can be the reason for this kind of pseudo-static Pointer and how can we find a really static one?
Last edited by relation on Tue May 27, 2008 2:46 pm; edited 1 time in total |
|
| Back to top |
|
 |
samuri25404 Grandmaster Cheater
Reputation: 7
Joined: 04 May 2007 Posts: 955 Location: Why do you care?
|
Posted: Tue May 27, 2008 2:46 pm Post subject: |
|
|
Maybe there isn't one, and you need to dynamically find the pointer each hacking session.
_________________
|
|
| Back to top |
|
 |
relation How do I cheat?
Reputation: 0
Joined: 20 Aug 2006 Posts: 6
|
Posted: Tue May 27, 2008 2:53 pm Post subject: |
|
|
So what could be the use of finding the pointer at all!
Could it possibly not have Static things? or what affects the change? any idea!? I am asking the experienced ones!
|
|
| Back to top |
|
 |
Barlad How do I cheat?
Reputation: 0
Joined: 01 May 2008 Posts: 9
|
Posted: Wed May 28, 2008 11:55 am Post subject: |
|
|
Your pointer is not "pseudo-static", it's dynamic. It is not because you cannot find a "static" pointer pointing to your pointer that it means the last one you got is static.
The most obvious thing that comes to my mind is that perhaps your pointer is a member of an object (i.e: instantiation of a class). There is probably a static pointer pointing to the object in question and your "dynamic" pointer is accessed by using an offset from this static pointer.
Now it's up to you to figure out the object in question and the static pointer which points to it
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Wed May 28, 2008 12:54 pm Post subject: |
|
|
You could be getting a code shift, But i do not remember this game series doing that.
Only other thing is the pointer is dynamic, like was said or you have not found the base pointer.
*Try pointer scanner and find pointers. Then recheck pointers after game restart.
Also you can directly alter the flo of the assembly you find and not worry about the pointer.
00da6ff4 - 89 47 08 - mov [edi+08],eax
Just a little side note, the unwrapper you used for this game is not really needed since it is raw at runtime anyway. You would only need that to debug the application for better analysis in trying to crack it. Which turns out to be very easy to do with or without the unwrapper.
|
|
| Back to top |
|
 |
relation How do I cheat?
Reputation: 0
Joined: 20 Aug 2006 Posts: 6
|
Posted: Thu May 29, 2008 1:25 am Post subject: |
|
|
1.If the pointer is dynamic or a member of a class then I think that in some way I should be able to find the cause of the change of it. How can I do it?
The base pointer scan didn't find any correct answers. (I had tried it before this post, or maybe I did something wrong; I selected level 3 and different search options and the few now and again results were not static)
2.In case there is a code shift, that seems logical, hence there are two processes one namely Aveyond 2.exe and the other one game.exe and we could assume that the first one randomly changes the memory location of the second. How can I prove it and find a solution for it?
3.and about the direct assembly code editing I don't think that it could help it or better to say I could do any good for it, since that code is responsible for many kinds of value decrease and increase in game so a static altering of it is not suitable. (btw, that code is an offset of RGSS102E.dll)
|
|
| Back to top |
|
 |
Barlad How do I cheat?
Reputation: 0
Joined: 01 May 2008 Posts: 9
|
Posted: Thu May 29, 2008 1:55 am Post subject: |
|
|
Concerning 1), the way I would go for it is to put a breakpoint on your pointer for access, look at the function(s) accessing your pointer and figure out where this function gets the pointer/offset from. That is, what argument was passed to the function in question to figure out the address of your pointer.
That will get you a level closer to something static. Note that depending on the complexity of your program, you can wander around from function to function for a while until you eventually get a static element.
I am very new to Cheat Engine so I do not know how far you can debug programs with it but I guess that to make it easier, you would need to use something like OllyDbg, Softice or IDA.
|
|
| Back to top |
|
 |
relation How do I cheat?
Reputation: 0
Joined: 20 Aug 2006 Posts: 6
|
Posted: Thu May 29, 2008 2:05 am Post subject: |
|
|
@Barlad:
It seems that I should enter the realm of real Cracking!
(I have many times tried many tutorials or assembly books, but I have stopped halfway because even the best of them sometimes consider the reader a professional coder or a mathematician and go far from the reader's currently assumed knowledge!)
|
|
| Back to top |
|
 |
Barlad How do I cheat?
Reputation: 0
Joined: 01 May 2008 Posts: 9
|
Posted: Thu May 29, 2008 9:03 am Post subject: |
|
|
If you really are into it, I think the smoothest and most interesting way to learn cracking is by reverse engineering your own stuff. I know that might sound lame to crack your own software but, in my opinion, it is the easiest way to go about it.
Do some basic C++ software (or any other language but I recommened an object-oriented one because that's what games are all about today) and then use CE or whatever tool to try to see if you can understand how your program works. By basic C++, I really mean basic. Just a program which creates an object with a string in it can keep you busy for a couple days
It assumes you have some basic programming skill but I guess that's a prerequisite if you want to be serious about it.
|
|
| Back to top |
|
 |
Labyrnth Moderator
Reputation: 10
Joined: 28 Nov 2006 Posts: 6301
|
Posted: Fri May 30, 2008 12:49 pm Post subject: |
|
|
| relation wrote: | @Barlad:
It seems that I should enter the realm of real Cracking!
(I have many times tried many tutorials or assembly books, but I have stopped halfway because even the best of them sometimes consider the reader a professional coder or a mathematician and go far from the reader's currently assumed knowledge!) |
Not really, since all you need to do is forget about the pointer and find what write,access's or reads from this address you find and do a injection in the code. The address's you see on those instructions will be static.
You can do anything you want at this step. Just because it is in a dll, doesn't mean you cant do it mate. Use symbols in your AA Script.
This instruction may be used for several things, But the loop/function it is in when looking at it in maybe olly or tracing it with CE. Will give you an idea of how it works. Then you can direct it how you want.
Cracking, is similar to this in many respects. Debugging the assembly to see how it works. Make your own code to alter how the real flow of the code works to give yourself a wanted result.
|
|
| Back to top |
|
 |
relation How do I cheat?
Reputation: 0
Joined: 20 Aug 2006 Posts: 6
|
Posted: Fri May 30, 2008 1:22 pm Post subject: |
|
|
thanks, it seems that I need to read some books to the end, like the art of assembly that I left after the first chapter
|
|
| Back to top |
|
 |
|