Learn c++ first, its a very good language for hacking, all its memory management lets YOU handle your own programs memory.
If you want to do just external programs (.exe's)
Offsets/Addresses: A address, the "start" of where you begin RPM, offsets are locations beyond the starting point.
Address: LocalPlayer, EntityList, EnginePtr, RadarBase etc.
Offset: m_iHealth, m_iTeamNum
If you want to find NetVars (They're offsets for health/team/angles etc) you can download a program called ollydbg, attach to CS:GO
click on the "E" letter which stands for Executable Modules, modules are client.dll, engine.dll and all the other ones there, but for now
choose "client.dll", double click it right click on the text section where you can see some asm, and search for all strings.
Inside there you can see all the strings inside client.dll, if you go to certain strings like m_iTeamNum double click it you can see the offset.
ps I'm pretty bad myself at this reversing stuff, but I'm getting better, so I did my best.
Internal:
Internal you can start hooking, you can also work the same way you do externally if you want to do that.
If you want to have a console you can just do AllocConsole and use freeopen to enable input for it.
when internal you are INSIDE the process, meaning you can get a pointer to everything by just creating a new pointer
and making it equal to something.
Simple internal code(Sort of pseudo I guess):
Code:
clientdll = (DWORD)GetModuleHandle(L"client.dll"); // We get a module handle, cast it to a DWORD, L stands for literal string.
DWORD *localPlayer = (DWORD*)(clientdll + LocalPlayerOffset); // Cast it to a DWORD* since our variable is defined that way.
// but if we are not ingame, and we try to dereference this pointer the game will crash, thats you can use
// something like isBadReadPtr(localPlayer, sizeof(localPlayer)), I usually do something like
// #define isGood(x) !IsBadReadPtr(x, sizeof(x))
// which is good enough.
// if you for example wanna change your attack state (After you have checked if localPlayer is ok):
int *Attack = (int*)(*localPlayer + AttackOffset); // Dereference localPlayer, cast it to a int pointer.
Now we can just dereference Attack ptr and directly change our attack:
*Attack = 5;
Sleep(5);
*Attack = 5;
//Do that in a while looop and you'll constantly shoot.