You are viewing our Forum Archives. To view or take place in current topics click here.
RTM | Using XBDM [Tutorial]
Posted:

RTM | Using XBDM [Tutorial]Posted:

SK7
  • Powerhouse
Status: Offline
Joined: May 26, 201311Year Member
Posts: 491
Reputation Power: 22
Status: Offline
Joined: May 26, 201311Year Member
Posts: 491
Reputation Power: 22
Real Time Modding (Or Real Time Editing/Memory Editing)


In this tutorial I will be showing you how to use a little more flexibility or a better way (IMO) to poke your mods. + Screenshots provided.

Things you will need:

- Xbox 360 Neighborhood
- Visual Studio 2010 Pro/2012
- Latest framework
- Classes (Provided, visit bottom of thread)
- XDevkit.dll


First, open visual studio and create a new project in C# WinForms Application and call it whatever you want.
[ Register or Signin to view external links. ]

After creating the project create a folder by right clicking on the name and selecting "Add" then "New Folder".
[ Register or Signin to view external links. ]

Once added, right click and add an existing item and select the Classes I provided (Downloads are at bottom). You should end up with:
[ Register or Signin to view external links. ]

Then click on references and add the XDevkit dll I provided.
[ Register or Signin to view external links. ]

Then on your design, add a text box and name it JtagIP, this is where we enter our consoles IP and also create another one and call it DUMMYBOX and make it small and hide it.
[ Register or Signin to view external links. ]

Now double click on your form and add these references:

using System.Diagnostics;
using System.IO;
using System.Net;
using XboxMemEdit;
using XDevkit;
using StringDecrypt;
using ExtraFunctions;
using EndianWriter;


Then add under your
  public Form1()
        {
            InitializeComponent();
        }

The IP properties.
JtagIP.Text = Properties.Settings.Default.JtagIP;

If the end JtagIP is an error, hover over it and click on the little icon and create property stub and it should be fixed.


So far you should have:
[ Register or Signin to view external links. ]

Now we want to add the methods for our connection to console and identifying the offset.

The first methods we are going to create are mainJtag and subJtag.
You can add this anywhere:

  public void mainJtag(uint offset, string poketype, string ammount)
        {
            try
            {
                subJtag(offset, poketype, ammount);
            }
            catch
            {
                MessageBox.Show("Can't Poke");
            }
        }


Second method (Setting offset types):

public void subJtag(uint offset, string poketype, string ammount)
        {
            try
            {
                if (JtagIP.Text == "")
                {
                    MessageBox.Show("No IP Set");
                    return;
                }
                XboxDebugCommunicator X_D_C = new XboxDebugCommunicator(JtagIP.Text);
                if (X_D_C.Connected == false)
                {
                    try
                    {
                        X_D_C.Connect();
                    }
                    catch { }
                }

                XboxMemoryStream XMS = X_D_C.ReturnXboxMemoryStream();
                EndianWriter.EndianIO IO = new EndianWriter.EndianIO(XMS, EndianWriter.EndianType.BigEndian);
                IO.Open();
                IO.Out.BaseStream.Position = offset;
                if (poketype == "Unicode String")
                    IO.Out.WriteUnicodeString(ammount, ammount.Length);
                if (poketype == "ASCII String")
                    IO.Out.WriteUnicodeString(ammount, ammount.Length);
                if (poketype == "String" | poketype == "string")
                    IO.Out.Write((string)ammount);
                if (poketype == "Float" | poketype == "float")
                    IO.Out.Write((float)float.Parse(ammount));
                if (poketype == "Double" | poketype == "double")
                    IO.Out.Write((double)double.Parse(ammount));
                if (poketype == "Short" | poketype == "short")
                    IO.Out.Write((short)Convert.ToUInt32(ammount, 16));
                if (poketype == "Byte" | poketype == "byte")
                    IO.Out.Write((byte)Convert.ToUInt32(ammount, 16));
                if (poketype == "Long" | poketype == "long")
                    IO.Out.Write((long)Convert.ToUInt32(ammount, 16));
                if (poketype == "Quad" | poketype == "quad")
                    IO.Out.Write((Int64)Convert.ToUInt64(ammount, 16));
                if (poketype == "Int" | poketype == "int")
                    IO.Out.Write(Convert.ToUInt32(ammount, 16));
                if (poketype == "Bytes" | poketype == "bytes")
                    IO.Out.Write(ExtraFunctions.ExtraFunctions.HexStringToBytes(ammount), 0, ExtraFunctions.ExtraFunctions.HexStringToBytes(ammount).Count());
                IO.Close();
                XMS.Close();
                X_D_C.Disconnect();
            }
            catch
            {
                MessageBox.Show("Couldnt poke");
            }
        }


Then we want to add another to get the original value of the offset.

  public string getValue(uint offset, string type)
        {
            string hex = "X";
            object rn = null;
            if (JtagIP.Text != "")
            {
                XboxDebugCommunicator X_D_C = new XboxDebugCommunicator(JtagIP.Text);
                if (X_D_C.Connected == false)
                {
                    try
                    {
                        X_D_C.Connect();
                    }
                    catch { }
                }
                XboxMemoryStream XMS = X_D_C.ReturnXboxMemoryStream();
                EndianWriter.EndianIO IO = new EndianWriter.EndianIO(XMS, EndianWriter.EndianType.BigEndian);
                IO.Open();
                IO.In.BaseStream.Position = offset;
                if (type == "String" | type == "string")
                    rn = IO.In.ReadString();
                if (type == "Unicode String")
                    rn = IO.In.ReadUnicodeString(int.Parse(DUMMYBOX.Text));
                if (type == "ASCII String")
                    rn = IO.In.ReadAsciiString(int.Parse(DUMMYBOX.Text));
                if (type == "Float" | type == "float")
                    rn = IO.In.ReadSingle();
                if (type == "Double" | type == "double")
                    rn = IO.In.ReadDouble();
                if (type == "Short" | type == "short")
                    rn = IO.In.ReadInt16().ToString(hex);
                if (type == "Byte" | type == "byte")
                    rn = IO.In.ReadByte().ToString(hex);
                if (type == "Long" | type == "long")
                    rn = IO.In.ReadInt32().ToString(hex);
                if (type == "Quad" | type == "quad")
                    rn = IO.In.ReadInt64().ToString(hex);
                byte[] rnarray;
                if (type == "Bytes" | type == "bytes")
                {
                    rnarray = IO.In.ReadBytes(int.Parse(DUMMYBOX.Text));
                    rn = ExtraFunctions.ExtraFunctions.BytesToHexString(rnarray);
                }

                IO.Close();
                XMS.Close();
                X_D_C.Disconnect();

                return rn.ToString();
            }
            else
            {
                MessageBox.Show("No IP Set");
                return "Console not detected!";
            }
        }


This will return original value.

You should now have a similar layout to mine:
[ Register or Signin to view external links. ]

Now you want to poke your offset to alter the game. Okay, I will show you how to do it.

First create a string for your offset. Example:
string Gravity = "0x8203BC6";


Then if you want to poke it, you need to know where it is a Float, byte, bytes, short, double, long or quad. (Usually float, byte and bytes)

You need to use various codes.

Float:
mainJtag(Convert.ToUInt32(string, 16), "float", "value to poke");

Byte:
mainJtag(Convert.ToUInt32(string, 16), "byte", "value to poke");

Bytes:
mainJtag(Convert.ToUInt32(string, 16), "bytes", "value to poke");

Long:
mainJtag(Convert.ToUInt32(string, 16), "long", "value to poke");

Double:
mainJtag(Convert.ToUInt32(string, 16), "double", "value to poke");

Short:
mainJtag(Convert.ToUInt32(string, 16), "short", "value to poke");

String:
mainJtag(Convert.ToUInt32(string, 16), "string", "text to poke");

Quad:
mainJtag(Convert.ToUInt32(string, 16), "quad", "values to poke");


Simple.

If you want to get the original value of something you need to have the text box beside it for it to output to. Example:

gravity.Text = getValue(Convert.ToUInt32(string, 16), "float");


String = your offset string name and "float" can be "byte" etc

The classes I provided are obviously editable so if you want to add or edit something to your own, go ahead.

Downloads:
Classes and Dll's - [ Register or Signin to view external links. ]

Hope it helps, enjoy!

(I take no credit for classes!)

The following 2 users thanked SK7 for this useful post:

alcatraz3222 (11-07-2013), Cartier (11-05-2013)
#2. Posted:
XeX-Volume
  • New Member
Status: Offline
Joined: Nov 05, 201310Year Member
Posts: 2
Reputation Power: 0
Status: Offline
Joined: Nov 05, 201310Year Member
Posts: 2
Reputation Power: 0
nice tutorial bro keep it up
you should made a video next time
#3. Posted:
SK7
  • Powerhouse
Status: Offline
Joined: May 26, 201311Year Member
Posts: 491
Reputation Power: 22
Status: Offline
Joined: May 26, 201311Year Member
Posts: 491
Reputation Power: 22
XeX-Volume wrote nice tutorial bro keep it up
you should made a video next time


Ugh, it would end up as a series.
#4. Posted:
ip
  • Fairy Master
Status: Offline
Joined: Dec 30, 201211Year Member
Posts: 3,778
Reputation Power: 3016
Status: Offline
Joined: Dec 30, 201211Year Member
Posts: 3,778
Reputation Power: 3016
Nice post man! This should help out a lot of people.
#5. Posted:
wayzoken
  • New Member
Status: Offline
Joined: Dec 30, 201112Year Member
Posts: 17
Reputation Power: 0
Status: Offline
Joined: Dec 30, 201112Year Member
Posts: 17
Reputation Power: 0
Dude thanks for the tutorial.
I would like to do a "send cmd dvar" for cod ghost
#6. Posted:
ip
  • Winter 2020
Status: Offline
Joined: Dec 30, 201211Year Member
Posts: 3,778
Reputation Power: 3016
Status: Offline
Joined: Dec 30, 201211Year Member
Posts: 3,778
Reputation Power: 3016
wayzoken wrote Dude thanks for the tutorial.
I would like to do a "send cmd dvar" for cod ghost
What do you mean? Like a custom dvar?
#7. Posted:
wayzoken
  • New Member
Status: Offline
Joined: Dec 30, 201112Year Member
Posts: 17
Reputation Power: 0
Status: Offline
Joined: Dec 30, 201112Year Member
Posts: 17
Reputation Power: 0
Jtag.Call(0x824b84e8, new object[] { -1, 0, "q \"" + this.textBoxX1.Text + "\"" });


but work with XRPC.dll

Connecting:
Calling (This example calls SV_GameSendServerCommand):
//Format: Jtag.Call(uint address, arguments):

Jtag.Call(0x82254940, 0, 0, "g \"XRPC\"");

Notification Messages:
//Format: Jtag.Notify("Message"); < Automatically converts to a wide chars!

Jtag.Notify(XRPC.XNotifyLogo.DOUBLE_SIDED_HAMMER, "XRPC CONNECTED!");
Jump to:
You are viewing our Forum Archives. To view or take place in current topics click here.