[QUESTION] Reversing classes/structs?

Posts 112 of 12 · Page 1 of 1
[QUESTION] Reversing classes/structs?
Hi
I've recently come into quotes I don't understand, could somebody help me?

Things I've run into and would like to know what they mean(and how they work)
As in: A game uses a struct/class player object
This object describes the player's:
1.location (x,y,z)
2.health
3.stamina
4.number of bullets
5.number of granades
etc...

I've seen various examples of these structs (which appeard to be coded from scratch) being used to modify amost everything modefiable (aka: using these structs to change stamina, or obtaining the current health, teleporting by modefying the x,y,z's aimbot's and more)

So my question is how do these things work, Examples of structs I've seen:

By Gellin:
Code:
377B0858 // Local Pointer for CA NA

class Main;
class Info;
class Stats;
class WepInfo;
class Something;

class Main
{
public:
	Info* goToInfoClass; //0000
};

class Info
{
public:
	char unknown0[8];
	__int32 Unknown1; //0008
	__int32 iCurrentHealth; //000C
	char unknown2[4];
	__int32 iMaxHealth; //0014
        char unknown3[4];
	WepInfo* goToWepInfo;//001C
	Something* goToSomething; //0020
	char unknown4[348];
	float fStamina; //0180
	char unknown5[8];
	__int32 iWeaponSlotInUse; //018C
	float fCameraSomething; //0190
	float fCameraSomething2; //0194
	float fCameraSomething3; //0198
	char unknown6[32];
	Stats* goToStats; //01BC
};

class WepInfo
{
public:
	__int32 iBackPackABulletsLeft; //0000
	__int32 i2ndaryBulletsLeft; //0004
	__int32 Unknown0; //0008
	__int32 iGrenadesLeft; //000C
	__int32 iBackPackBBulletsLeft; //0010
};

class Stats
{
public:
	char unknown0[16];
	char szLocalNameChangesInKill[16]; //0010
	char unknown1[12];
	__int32 iKills; //002C
	__int32 iDeaths; //0030
	char unknown2[44];
	__int32 iHeadShots; //0060
};

class Something
{
public:
	BYTE bIsAlive; //0000
};
Another example:

Code:
		0x3776FBC4

class Main
{
	public:
		LocalInfo* gotoNextClass; //0000
};

class LocalInfo
{
	public:
		char unknown0[44];
		__int32 iAction; //002C
		__int32 1Alive2Dead; //0030
		char unknown1[248];
		MoreInfo* gotoNextClass2; //012C
		char unknown2[744];
		float Stamina; //0418
};

class MoreInfo
{
	public:
		char unknown0[200];
		float fLocalX; //00C8
		float fLocalY; //00CC
		float fLocalZ; //00D0
};
Then the next thing I see is this:

Code:
LocalInfo *pLocal = *(LocalInfo**)0x3776FBC4;
*note* that I do understand (or think I do, correct me if I'm wrong) what this person is doing:
He creates an LocalInfo object (pLocal / pointer to localinfo) in free store (pointer) Which he than points (using the address) to the real struct used by the game
Then he would be able to modify his in-game stats doing this:

Code:
pLocal->Stamina = somebignumber
Am I correct???
And what would this (0x3776FBC4) address be?
Is it an address to some master class wich holds all other things together?
How was the coder able to create the struct he then uses to modify his in-game stats?
Exactly how does this code work?
Would this code still work if I for example remove a member from one of these objects (Problems with using a default constructer (is that what is used))??

Game: CaEu
Game's engine: LilithTech jupiter engine

-SCHiM
I don't get the question
Quote Originally Posted by fukojr2 View Post
I don't get the question
is this statement correct:
*note* that I do understand (or think I do, correct me if I'm wrong) what this person is doing:
He creates an LocalInfo object (pLocal / pointer to localinfo) in free store (pointer) Which he than points (using the address) to the real struct used by the game
Then he would be able to modify his in-game stats doing this:
And the other questions:

And what would this (0x3776FBC4) address be?
How would I obtain it??
Is it an address to some master class wich holds all other things together?
How was the coder able to create the struct he then uses to modify his in-game stats?
Exactly how does this code work?
Would this code still work if I for example remove a member from one of these objects (Problems with using a default copy constructor(is that what is used))??
I'm pretty sure there is a much easier way 'cause my way takes ages, sort of.

Say you have this structure.

[php]
struct Character {
int x,y,z;
int HP;
};
[/php]

You can easily get the HP address right? Right..

After you get it, use CE and do a pointer scan for that address, cause structures basically use pointers to access members. Now get the size of the structure and subtract the amount of bytes from the start of the structure to the HP. In this case The structure size is 16 and the HP starts at the 12th byte. Now in your massive list of addresses from the pointer scan, just check every address that has 0xFFFFFFFF + 12 ( change to hex ).

The address you have is the base address for the structure/class.

That is probably the most inefficient method possible cause you have to try tons of addresses.... Mass trial and error..

OH SHIT, I didn't read properly. Completely irrelevant...
I'm studying this bit of reversing right now.
Don't believe 100% of what I say because there's always a chance that I'm wrong.
Code:
0x3776FBC4
I believe this is the pointer of the class. So usually it'll be PlayerPointer, PlayerBase, ClientBase, or anything relating to the structure concerning the client. (This may be wrong and there may be a lot more to this. I am not sure since I've only covered ESP which is done by the structure and class of client and player).

As for the
He creates an LocalInfo object (pLocal / pointer to localinfo) in free store (pointer) Which he than points (using the address) to the real struct used by the game
Then he would be able to modify his in-game stats doing this:
In a nutshell, I like to think of it as grabbing a handful of jelly beans out of a large bag and laying them out in an organized fashion on the table.(AKA Class and Struct). Then you decide what you want to eat. (This is what you chose to modify).
StructBuild/Reclass

You stuff in the addy, hit add x a few times, then play around with types untill you notice something you think to recognize
Quote Originally Posted by Hell_Demon View Post
StructBuild/Reclass

You stuff in the addy, hit add x a few times, then play around with types untill you notice something you think to recognize
Could you explain it some more?
Like how I can recognice the right address

Reclass as in the program reclass or is that which I'm trying to do named reclassing?
Quote Originally Posted by schim View Post
Could you explain it some more?
Like how I can recognice the right address

Reclass as in the program reclass or is that which I'm trying to do named reclassing?
its the name of a program.

Can someone upload it? I can't seem to find Reclass.
Reclass/Structbuild attached
ReClass.rarattachment deleted · 67 downloads before removal
It works!!!! hahaha! it doesn't d/c !!! THANK YOU!!!
my version did d/c wasn't able to use it...
(then again, could you please explain that what you were talking about earlyer??)
Just point it to an addy you want the struct of(e.g. if u know playerinfo is at 0x1333337 just point it to that), then hit the add 10 or add 64 thingie a few times and start changing types trying to find out what stff does. then just give em a name, save, and tell it to generate C++ code.
Quote Originally Posted by Hell_Demon View Post
0x1333337
looooooooooool good 1/yea
Posts 112 of 12 · Page 1 of 1

Post a Reply

Similar Threads

Tags for this Thread

None

Need help?