2. Requirements
A few things you will need for this guide:
General knowledge of computers
Half a brain
Cheat Engine
[Link]
C#
[Link]
Shynd's BlackMagic lib
[Link]
3. Getting Started
We'll start with some general information about memory. There are two types of memory (in WoW), serverside, and clientside, however serverside functions are still in the memory clientside, but changing the values will have a client side only effect.
Serverside data is memory that can be read, but cannot directly be changed on the servers, including (but not limited to), level, health, race, class, stats, gold, and many more. You can still change the data in the memory, but it will only be clientside. This is the reason there are no working level hacks, stat hacks, or any of those.
And then there is clientside. This is the data that doesn't have serverside checks. This includes things like camera position, time, and many others. This data can be both read and written to, however, because of World of Warcraft's anti-cheat system, Warden, some memory cannot be written to without you, the hacker, being disconnected, or even banned, which is why we're going to be reading and writing from a trial account... just in case
Just a couple more definitions you should know. Static addresses, non-static addresses, and pointers.
Static addresses are addresses that you can use, which will have the same function every time you open a program.
Non-static addresses are memory that are located at different addresses when the base address' value changes (see the pointers definition for more details), whether it be when you open up WoW, log out, or whenever it was made to change. This means that when the base address' value is changed, the non-static address you are using will have an entirely different function, or won't effect WoW by changing it.
Pointers are a programming language data type whose value refers directly to (or "points to") another value stored elsewhere in the computer memory using its address. Simple enough?
4. Using Cheat Engine
In this guide I will refer to some names, use this picture if you don't know which button, textbox or dropdown box I am talking about.
Red box: The 'Open Process' button.
Blue box: The 'First Scan' button.
Green box: The 'Next Scan' button.
Orange box: The 'Value' textbox.
Pink box: The 'Value Type' dropdown box.
5. Our First Memory Editing Program
I know what you're thinking, "finally, we get to make a program"... unfortunately, we don't.
Joking! Let's get to it.
Open up C# (make sure you run it as administrator if you're running Vista or Windows 7). Create a new "Console Application" project, call it whatever you want, I called mine "My First Memory Editor". Firstly, we want to add references to the BlackMagic library. In the menu bar at the top of the window, click Project -> Add Reference -> Browse tab. Browse to where you extracted the BlackMagic files, select them both, and click OK. Now, before the namespace, type "using Magic;". This will tell C# that we will be using the BlackMagic library. It should now look somewhat like this:
For this first example, we're going to be reading from a static address, our name, so open up Cheat Engine, and we can get started.
Once cheat engine is open, click the Open Process button. Find Wow.exe in the list, and double-click it. Next, change the Value Type dropdown box to Text, and in the Value textbox, write your character's name, in my case, "Jadd" (take note that it is case-sensitive!), and click the First Scan button. You'll come up with a whole bunch of results, so how do we know which ones are static, and which ones aren't? Easy, Cheat Engine does all the work for us. All results that are green are static, and all results that are black are non-static.
I've got one result, 0x00C923F8. This is the address we need.
Now go back into C#. In the "static void Main" section, we're going to write this:
Code:
BlackMagic WoW = new BlackMagic();
WoW.OpenProcessAndThread(SProcess.GetProcessFromProcessName("Wow.exe"));
string Name = WoW.ReadASCIIString(0x00C923F8, 12);
Console.WriteLine("Character Name: " + Name);
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
This code is pretty self explanitary. Open WoW, log into any character, and run the program by clicking, in the menu bar at the top of the window, Debug -> Start Debugging.
The Result:
Ta-da! You've made your first memory reading program!
6. End Notes
Congrats, you made it to the end of the guide! Somewhere in the near future I'll edit this post and give some examples of non-static addresses and how to find them, but for now I really can't be bothered.
Thanks for reading! Hopefully you now have a better understanding of how memory reading and writing works. Good luck with the programs guys!
This guide was made by Jadd of MMOwned. I am in no way responsible for any banned accounts.
Hope that helped Xel ;D