Originally Posted by
Brandon
In Java, you have reflection. You can reflect the fields of the client and retrieve player data, player tile, model vertices, item id's, etc.. This is possible because Java uses an intermediate language (Byte-Code).. It's not compiled to assembly so its reversible and easier to read. When you reflect the field, the JVM will give you the value of said field.. You don't have to find the memory location and pointers and stuff. You say: "FindClass('Player').. getField(playerClass, 'name').. and voila, you have the player's name..
You can launch the same jar file thousands of times, and the fields will be at the same location (in some class file in the jar). Each time the JVM will retrieve the exact value you want. In Java, you want to call one of the functions, you can do so with ease (very few lines of code).
Then we have languages like C and C++ which compiles to Assembly.. harder to read and understand and cannot be reversed back into its original form except by doing it manually.. However, the programs allocate memory, write to registers, etc.. You can read this memory to figure out what is on screen, the ID's of items, etc. You are essentially finding all the memory locations and pointers and values yourself. However, every time the application launches, the location of the stuff we want will be different (at some offset from the main-entry-point/base-address of the application). You need to find that offset and read the memory at that offset to get the value of whatever it is you're looking for (ItemID, Money-Amount, Model Vertices, etc.. You want the player's name? You need to open that process, find the address of the player structure relative to the base-address/main-entry point of the program, then find the player name offset relative to the player structure offset which you previously found. Then you need to read that address and voila you have the player's name.
If you want to call a function, you'd have to write the arguments to the process by allocating memory for them in the process, create a remote-thread in the process that calls the function at the address specified using the arguments you allocated, free the arguments, destroy the thread, get the return value of the function.
OSRS = Java.
RS3/NXT = C++.