One thing that you're assuming wrong is that this is the same type of guide as a simple modding guide. Here is a version dumbed down into how I think most people would read this and automatically interpret it into actions. I believe all credit for this guide goes to dootdoo, though I do not know for sure. There is nothing original in my interpretation. I'm just trying to make it spoon-feed-able. All credit still goes to whoever wrote the guide you posted. The following is that same guide, with some places spoodfed to show how good of a guide it actually is, and how followable and do-able it is.
AHEM!
Grab the Latest Evox
Grab CXBX (http://www.caustik.com/cxbx/). Download the already compiled .exe instead of the uncompiled source code.
Buy Ida Pro, Around version 4.30, if you want to follow the guide exactly and make sure that IDA Pro still has all the functions referenced here.
Pick a game
Start out with something simple, and search for simple values. Don't go after a game that's known to be programmed in such a way that it's a BITCH to search for values.
What's usually the easiest search is something that tends to be in memory with an identical quantity to what you see on the screen, like lives or amount of ammo.
Most games did not have code that was simple to search for values. The easiest ones for beginners to start on to grasp the basic concept before building on talents are Armed and Dangerous and TMNT. Rent or buy TMNT and follow this guide to get experience/ beggining education in this.
Put a copy of the game's .xbe onto your computer
Load up CXBX.exe which is in the precompiled program you should have downloaded.
Load the game's xbe that you put on your computer into CXBX. (File / Open xbe / duh!)
Now go to 'file'. Click 'export exe'. Save the file as tmnt.exe
Go to 'edit' click 'dump xbe info to' click 'file'. Save it as whatever you want to. Boom. Now you have your text (output) file. /Duh.
Open the text (output) file you just made. (With notepad or text pad. Just double-clicking it should do the job)
Do a search for "Title ID"
You should land in a section that has a text chunk comparable to this...
"Dumping XBE Certificate...
Size of Certificate : 0x000001EC
TimeDate Stamp : 0x3FB3F515 (Thu Nov 13 16:18:13 2003)
Title ID : 0x5454000C"
The only part YOU care about is the title ID, copy that number down somewhere to use it in your trainer later.
Load up the game on your xbox (This is a search for continues on Ninja Turtles.),
Find telnet on your computer. Do a search for "telnet.exe'. This is common sense and it's a tool on your computer. If you need help with commands, click 'start' at the bottom left on your computer screen and go to 'Help and Support'. Search for "telnet" and you can find a list of commands if you have no idea how to use telnet.
Run telnet.exe, like dootdoo said, and then type
set NTLM
Then type
open xbox 192.168.0.2
(if 192.168.0.2 is your xbox ip. Substitute whatever your xbox ip is.)
In the telnet window, the text "RemoteX Debugger V1.1" will appear.
Pick a character. Choose Donatello. He'll whoop Leonardo's ass with a stick.
Hit A until you you see a bunch of the little robot thingies coming at you..
Now look at your status bar, you have health (bar) # of Shurikens, score, and '6' hearts.
In your Telnet screen, type
value 6
What pops up (the output) should look like
Store Game State in slot 0
...
...
Done.
Slot 0 Val 6
--
Now lose a life, and continue, now on the screen it says '5' so do a value 5 search.
the output should look like:
Store Game State in slot 1
...
...
Done.
Slot 0 Val 6
Slot 1 Val 5
--
repeat the above process again (lose a life and continue) then search for 4..
Store Game State in slot 2
...
...
Done.
Slot 0 Val 6
Slot 1 Val 5
Slot 2 Val 4
(a bunch of crap)
Go back to the title screen (Start) and start playing again, now life count is back to 6, so
type in
value 6
Paraphrase:"Something like the following popped up in my case"
Check 83d00000:83f58000
83d03088
83d030d0
83d0343c
83d03444
83d034d8
83d03910
83d0395c
83d08084
83d0842c
83d0c2dc
83d0c2e0
83d0c2e4
83d0c2e8
83d0c2ec
83d0c600
83d0c604
83d0c618
83d0c634
83d0c638
83d0c63c
83d0c670
83d17424
83d1781c
83d814c0
83d81830
83d81c1c
Check 00a80000:00b80000
00b72448
Check 83b34000:83c60000
83b97274
83b99a54
Check 83575000:835b5000
From this I would have to say that only three of these addresses look like good targets,
00b72448
83b97274
83b99a54
Do not ask why because you probably would not be able to grasp that. Just try to get the feel for it. It was probably just intuition / a feel for finding the right ones based on experience, anyway.
The next step is to look at what data is stored there..
so type: db <address> 10
in this case, you would type
db 00b72448 10
since that's the first promising address to try.
This should produce the text:
00b72448 : 06 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 | ................
83b97274 : 06 6a 7e d2 06 6c 81 d2 06 6a 7e d2 07 66 79 d0 | .j~R.l.R.j~R.fyP
83b99a54 : 06 67 79 d2 59 a1 af e2 bf dc e1 f4 ff ff ff ff | .gyRY!/b?\at
From this I would have to say this first try is the best canidate. This is a concept you are trying to grasp of how to recognise what look like the best values. It is not really explained in logic, but just try to get a feel for it by observing this example.
"Most if not all games
for xbox are wrote in C (or C++) and in C a integer (whole number) is 4 bytes long. Although you can store values in a single byte, unless memory is tight, it is seldom done" (from the experience of the person who wrote the guide you posted)
Try poking the value now and seeing if it changes.
In the telnet window, type
poke 00b72448 7
! The hearts value went up to 7! We MAY have the correct address..
(A lot of reasons could make it not be the address that works in a trainer.)
Now its time to verify the address. Let's see see WHEN this value is moving.
Type (In the telnet window, of course)
bpmb 0 00b72448 w
This sets a breakpoint. If you don't know what that is I'm not explaining. Research it yourself. It's kind of a marker for when the value moves, from what I understand.
Die again. When you hit start to continue the game froze. This is
good, it means this value WAS updated when you continued.. (Because as is explained later, this particular game freezes when a breakpoint is hit.)
Obviously, this is the resulting output text that comes up.
BP 0 @ 0002a261
EAX : 00b72424
EBX : 00000000
ECX : 00000001
EDX : 00000006
ESI : 013bcd24
EDI : d0044df0
EBP : d0044d4c
TMNT hangs after you do a break point (At least it does for me) so just reboot your system
(type reset in the telnet window) or turn the xbox on and off and reload TMNT, and reconnect
with telnet.
Load up IDA pro
click the VIEW-ASM tab
click the jump menu
select jump address
and type in 0002a261.
(The address that came up at the breakpoint.)
You will see the following text:
.text:0002A250 arg_0 = dword ptr 4
.text:0002A250
.text:0002A250 mov eax, dword_2AA8E0
.text:0002A255 mov edx, [eax+24h]
.text:0002A258 mov ecx, [esp+arg_0]
.text:0002A25C sub edx, ecx
.text:0002A25E mov [eax+24h], edx
.text:0002A261 retn
.text:0002A261 sub_2A250 endp
"Look at the instruction before the break, they are moving the value in edx to some memory
location, this is whats updating the value we see on the screen. So where does this edx
value come from?"
***If you're struggling with this concept it can not be explained in baby steps. We're dealing with programming code here. That's just the complex nature of it.
"If you look at the line above that:
.text:0002A25C sub edx, ecx
This means: edx = edx - ecx
if we look back to what our break point said, we see that ecx equals one, so that means its
edx = edx - 1 and since edx equals 6 after the subtraction, that means it was previously 7."
***Same as above.
so rewrote in english:
(What this means, broken down as simple as possible, but it is still not going to be simple enough for some people. This is what is happening in the program chunk there, which is what you're looking at when making trainers. Read below and tell me if you still think it can be broken down into simple terms.)
"move some address stored at 2AA8E0 into eax
*move the value that is at eax + 24h into edx
move the value (1) that was pushed to this routine into ecx
-subtract ecx from edx and place it in edx
*move edx back to where it came from (eax + 24h)"
"So we have a few options, we can change ecx to 0, we could not subtract the value, or we
could remove all instructions from the function, or we could just return as soon as we get
to the function."
(That is as simple as that part's going to get.)
move some address stored at 2AA8E0 into eax
*move the value that is at eax + 24h into edx
move the value (1) that was pushed to this routine into ecx
*move edx back to where it came from (eax + 24h)
If we remove the subtraction part, we end up moving a value from
eax+24h to edx
then from
edx to eax+24h
That will keep the value the same, so lets do that..
(The above few chunks of information is what I'm talking about, on trainer making. You can follow the steps perfectly fine, and they're layed out easily enough that you can make this particular trainer. The problem is that it takes that type of complex and clear mathematical/programming reasoning skill to understand and interpret how to search for your own trainer values. If you can not understand and absorb the actual dynamic of logic that he is using, which is not the simplest thing in the world yet is required here, then you will not be very successful at learning how to make trainers unless you just get better at that.)
The SUB starts at 0002A25C and ends at 0002A25D so we have to remove two bytes,
the simplist way to do this is to 'NOP' (no operation) the SUB instruction.
(Don't ask me why I remember this, but the value for NOP'ing an instruction is 90. So at the addresses of the instructions you want to put a NOP (no operation) on, you have to type the address followed by 90 in telnet.)
so in your telnet window type:
poke 0002A25C 90
poke 0002A25D 90
Now start playing, and try to die, the value should stay the same, and you now have
infinite lives!
This post has been edited by Hopeful: Apr 20 2005, 07:11 PM <