I have nothing currently written on this topic, but I was going through some old text files and found this saved in one of them with codes. This was written by Parasyte on the old GSC boards in '05 (8/19/05 to be exact). I didn't find the tip mentioned before the SQL issue. And for the sake of completeness, I had saved another that was posted on Kodewerx. I was a save-addict back then.
Originally posted by Parasyte
Text references, it's all about text references. I wrote about it briefly on the board before the SQL database was destroyed, so this one will be even more brief.
Find some debug text in the game or RAM. Not just crap saying "IS Debugger" or "MetroTRK Debugger" or "* Debugger". Anything in the game labelled as a "debugger" is unlikely to be of use to anyone other than the developers. However, they can still be interesting for the extreme hackers. (Most debuggers do not display anything on screen, but rather send text messages and other data to a console program running on a linked computer. Casual gamers will unlikely have access to the hardware required to use those.)
Any way, you locate some debug text. Usually anything saying "Debug Menu" or "Sound Test" etc. is good stuff to work with. Use a good disassembler and debugger in tandem to track the program routines responsible for reading and displaying the text on screen. This is done with one method which may vary depending on the game; locate a pointer. Locating a pointer to the text is usually the easy part. Just text search in the disassembly listing for the address(es) where the text lies in memory. You may find the pointer among an assembly routine, or among a pointer table. You may also not find a pointer to the specific text at all. In such cases, you would attempt to locate the "first" text string listed from the debug menu. For example, imagine you are hacking a game with the following text:
Code:
Konami Presents
A game by Hideo Kojima
09/13/04 13:10:47
Debug Menu
Option 1....Blah
Option 2....Etc.
If you are unable to locate a pointer to the text "Debug Menu", then you should attempt to figure out which of these text strings is likely to be the first of the debug menu listing. In this example, it will not be the first two, since those are much more likely to show up in the game's normal intro. It may actually be the date/time displayed first in the menu. When you find the pointer you are looking for, no matter which piece of text it points to, you can be certain that the game will make use of it. You just have to make it so. (Games for which you can find no pointers to the debug text, you may as well give up unless you are proficient with assembly and debug menu hacking. In which case you would not require such a lesson in the first place.)
Now then, "making it so" is often easier said than done. It takes patience, skill, knowledge and effort. Your job from this point is to find out why the game is NOT using the pointed text. Either the whole routine is not being executed, or only the text loading code is being skipped. It may also be that SEVERAL LAYERS of nested subroutines are not getting executed. How you accomplish this task is left soley to the hacker(s) involved. Whether it is nopping/forcing a branch at some point, creating your own function call elsewhere, or changing a pointer of some sort. (Physical pointers, array indices, switch statement cases, and the like.)
That's about as much detail as I am willing to get into without divulging on certain games from the past and present. So unless someone is willing to tutor you, I would suggest you do some research on your own. Get to understand the codes which have already been hacked. Figure out how they work, and learn to back-trace with those examples.
I wish I did not have to be so vague, but when dealing with other people's code (IE, software written by someone other than you), you have no choice but to learn their style and work with it. I believe that the only thing which can truly teach that is experience.
Find some debug text in the game or RAM. Not just crap saying "IS Debugger" or "MetroTRK Debugger" or "* Debugger". Anything in the game labelled as a "debugger" is unlikely to be of use to anyone other than the developers. However, they can still be interesting for the extreme hackers. (Most debuggers do not display anything on screen, but rather send text messages and other data to a console program running on a linked computer. Casual gamers will unlikely have access to the hardware required to use those.)
Any way, you locate some debug text. Usually anything saying "Debug Menu" or "Sound Test" etc. is good stuff to work with. Use a good disassembler and debugger in tandem to track the program routines responsible for reading and displaying the text on screen. This is done with one method which may vary depending on the game; locate a pointer. Locating a pointer to the text is usually the easy part. Just text search in the disassembly listing for the address(es) where the text lies in memory. You may find the pointer among an assembly routine, or among a pointer table. You may also not find a pointer to the specific text at all. In such cases, you would attempt to locate the "first" text string listed from the debug menu. For example, imagine you are hacking a game with the following text:
Code:
Konami Presents
A game by Hideo Kojima
09/13/04 13:10:47
Debug Menu
Option 1....Blah
Option 2....Etc.
If you are unable to locate a pointer to the text "Debug Menu", then you should attempt to figure out which of these text strings is likely to be the first of the debug menu listing. In this example, it will not be the first two, since those are much more likely to show up in the game's normal intro. It may actually be the date/time displayed first in the menu. When you find the pointer you are looking for, no matter which piece of text it points to, you can be certain that the game will make use of it. You just have to make it so. (Games for which you can find no pointers to the debug text, you may as well give up unless you are proficient with assembly and debug menu hacking. In which case you would not require such a lesson in the first place.)
Now then, "making it so" is often easier said than done. It takes patience, skill, knowledge and effort. Your job from this point is to find out why the game is NOT using the pointed text. Either the whole routine is not being executed, or only the text loading code is being skipped. It may also be that SEVERAL LAYERS of nested subroutines are not getting executed. How you accomplish this task is left soley to the hacker(s) involved. Whether it is nopping/forcing a branch at some point, creating your own function call elsewhere, or changing a pointer of some sort. (Physical pointers, array indices, switch statement cases, and the like.)
That's about as much detail as I am willing to get into without divulging on certain games from the past and present. So unless someone is willing to tutor you, I would suggest you do some research on your own. Get to understand the codes which have already been hacked. Figure out how they work, and learn to back-trace with those examples.
I wish I did not have to be so vague, but when dealing with other people's code (IE, software written by someone other than you), you have no choice but to learn their style and work with it. I believe that the only thing which can truly teach that is experience.


Comment