[TuT]BlackPitchPL - Multi Level pointer and reclass

Swift Games Accounts
  • This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.
  • ► You must register to download attachments!
May 24, 2012

I want to show you how easy we can make some dll hack.

Tools we need :

1 . Game to Hack :p
2. Re Class - Drunken Cheat ( you can find it on UC_Forum)
3. CheatEngine
4. A bit of c++ knowledge .
5. Brain and some VisualStudio or other program to dbg or release our dll

First step :

For our DLL hack we need to find Base address and offset ( this tutorial is only about multilvl pointers and reclass so if u don't know how to get base just fallow Fleep tutorial). I assume that you found your base in CE (CheatEngine) so you can see if it's point's to correct value and it's correct itself.

Second Step:

Now we open reclass ( DrunkenCheat) and attach to process (this tutorial also don't include how to use this program just watch any tutorial on You2b). After you done this create new class and name it like PlayerInfo and give this class address that you found in CE but not the final address. What i mean is that if your base is

Base = 12121212
Ofs1 = 0x10 Ofs2 = 0x20 Ofs3 = 0x30 OfsHealth = 0x40 

//So your class base address is Base+ofs1+ofs2+ofs3 dont add last one
Now just name all data you want include in class and generate class ( copy it or save it).

Third step:

Now we have all data that we need to create simple DLL hack
(Credit: DrunkenCheat Fleep unknowcheat's)

so let's make some new project ( i use VisualStudio 2012) take empty project .

#include <Windows.h>
#include "Class.h"

            if(GetAsyncKeyState(VK_F5)&1) //If F5 is pressed
                Player->Health = 100; // We don't use Write process memory function coz it make game buggy simple way is to use class
             if(GetAsyncKeyState(VK_F6)&1) //If F5 is pressed
                Player->Speed = 100000.f;

    return true;

bool WINAPI DllMain(HMODULE hModule, DWORD Reason,LPVOID lpReserved)
    return true;
now lets move to Header and make one ( i name it class) Copy our reclass class to this file
#include <Windows.h>

class PlayerInfo;
class PlayerInfo
char _0x0000[128];
    float Z_pos; //0x0080 
    float X_Pos; //0x0084 
    float Y_Pos; //0x0088 
char _0x008C[848];
    float Jump; //0x03DC 
char _0x03E0[44];
    __int8 Health; //0x040C 
char _0x040D[1527];
    float Speed; //0x0A04 
char _0x0A08[252];
    __int8 EQ_0; //0x0B04 Only Visual
char _0x0B05[3];
    __int8 EQ_1; //0x0B08 Only Visual
char _0x0B09[3];
    __int8 EQ_2; //0x0B0C Only Visual
char _0x0B0D[3];
    __int8 EQ_3; //0x0B10 Only Visual

extern PlayerInfo * Player;
And for the last one move to source and add new file cpp

#include "Class.h"

DWORD BaseAddress = {0x10C923C0}; // Static Base
DWORD hackOffsets[] = { 0x10, 0x4C, 0x30}; //3 LEVEL pointer

//This function is from Fleep source
DWORD FindDmaAddy(int PointerLevel, DWORD Offsets[], DWORD BaseAddress)
    //DEFINES OUR ADDRESS to write to 
    //if statements are crucial to make sure that the address is valid to write 
    //otherwise we crash. Address will not be valid when things like map changes or game loads are happening
    DWORD Ptr = *(DWORD*)(BaseAddress); //Base Address
    if(Ptr == 0) return NULL;//prevent crash

    //this is done to allow us to have pointers up to many levels e.g.10 
    for(int i = 0; i < PointerLevel; i ++)
        //if it = PointerLevel-1 then it reached the last element of the array
        //therefore check if that address plus the offset is valid and leave the loop
        if(i == PointerLevel-1)
            //!!make sure the last address doesnt have the asterisk on DWORD otherwise incoming crash
            Ptr = (DWORD)(Ptr+Offsets[i]);  //Add the final offset to the pointer
            if(Ptr == 0) return NULL;//prevent crash
            //we here return early because when it hits the last element 
            //we want to leave the loop, specially adapted for offsets of 1
            return Ptr;
            //if its just a normal offset then add it to the address
            Ptr = *(DWORD*)(Ptr+Offsets[i]); //Add the offsets
            if(Ptr == 0) return NULL;//prevent crash
    return Ptr;

DWORD FinalAddy = FindDmaAddy(3,hackOffsets,BaseAddress);// Lets get Final Address 
PlayerInfo *Player = *(PlayerInfo**)FinalAddy;// Get our class this address
And all is done. Now you can easy navigate and change player options as simple as Player->WhatYouWantToChange = I Want This :)
i think it's nice and easy to use in Menu DLL hack so all code is clean and understandable.

HOPE I HELP ALL PEOPLE WHO HAVE PROBLEM With Multi Levle Pointer's ( with how to code it in c++)

IF YOU FOUND ANY BUG ERROR IN THIS tut just PM ME OR LET me know ill edit this post
Jul 5, 2012
polska warszawa
good job BlackPitchPL!!!
podoba mi sie twoja praca wypróbuje. a mozna tego użyc do kazdej gry rozumiem?? chociaż zeby podmienić wartosc zdrowia w danej postaci??


Legacy Donator
Oct 29, 2012
Nice tut Black! I like to read through tutorials even when I know the topic to pick up on something I didn't previously know. Always good to expand knowledge. Thanks for the tut!