Hellolo!
As there is loads and loads of people asking how to make hacks or how to learn C++, I decided to make a tutorial on how to start making hacks.
Also, English is not my main language, so sorry if something is misspelled.
What you will need:
A brain
Visual Studio or some other
IDE.
Will to learn.
Chapter 1: Getting started
You can't make a hack without knowing the basics. For learning the basics I recommend
bucky/thenewboston's tutorials at youtube..
When you've learned the basics, you're pretty much ready to make a triggerbot.
Challenges/ideas to sharpen your skills:
Small programs:
Challenge 1:1
Make a program that takes first name, last name, and birth year, month, date and stores it to a .txt file.
Challenge 1:2
Same program as above but if the file already exists it greets the user with first name, last name and prints out how old they are and wishes them happy birthday if it is the user's birthday.
Challenge 1:3
Same program as above but with a whole family.
Challenge 1:4
Same program but stores more info as favorite sports and so on (chosen by user, so you ask them if they have anything they want to say about them selves.)
Hint(s): fstream
Bigger programs:
Challenge 1:1
Make a 'bot' that answers the users questions and asks them.
Hint(s): If/else, switch
Challenge 1:2
Make it store info if the user says wrong answer or something similar.
Challenge 1:3 (This one is very hard)
Make it remember stuff, learn, like a human.
NOTE: The best way of learning is through trial and error, so be sure to experiment.
Chapter 2: Making a triggerbot, reading memory.
ProcMem files is in the attachments
Making a triggerbot is veeeeeeeeeery easy when you know the basics and understand memory reading.
You're probably scratching your head and thinking
Wtf is memory reading? How do I read memory?
Basically, it's reading information from a process/program. In this tutorial, we will be reading info about the entity(player) in our crosshair and info about our own player, which will become a triggerbot.
You may be thinking,
what do I need to read memory?
The easiest way would be ProcMem(Process Memory). It's a class made by Fleep(I think?) that makes memory reading alot easier for beginners, as you save time by having all memory reading functions you need done. This is attached to the thread as a .rar file!
First, we start by creating our main.cpp file and adding ProcMem.cpp and ProcMem.h from the downloaded .rar file. You do this in visual studio by right clicking source files -> Add -> Existing item and choosing ProcMem.cpp. Then you do the same but in Header Files with ProcMem.h.
Then we need to initialize ProcMem in our main.cpp file so we can use the functions from it:
Code:
#include "ProcMem.h" // Memory reading
ProcMem Mem; // Shortcut
To actually read process memory, we need to choose a process. In this tutorial, it is going to be csgo.
Code:
Mem.Process("csgo.exe"); // Choosing the process
Now we can read memory, but reading stuff as EntityBase, PlayerBase and so on we need the Client.dll from csgo.
Code:
DWORD ClientDLL = Mem.Module("client.dll"); //Module we are reading memory from
Now we have initialized everything we need related to memory reading. Now, to the boring part, offsets.
Offsets is basically where the info we need to read is located, so if we are going to read PlayerBase, we need the PlayerBase offset.
I'm not going to cover how to get them through cheat engine, so we are going to use a offset dumper. That is basically a program that gets the offsets for us. These can usually be found in a thread on another forum, just google on
Global Offensive Structs/Offsets. Here is the ones you need: (Updated 12-08-2014)
Code:
// Needs to be updated when counter strike is updated.
const DWORD playerBase = 0xA68A14;
const DWORD entityBase = 0x4A0B0C4;
const DWORD crosshairOffset = 0x23F8;
// Does not change on updated, in other words, no need to update these!
const DWORD teamOffset = 0xF0;
const DWORD healthOffset = 0xFC;
const DWORD EntLoopDist = 0x10;
We are finally done initializing everything we need for a simple triggerbot!
Now, to the actual memory reading.
To get our own player's info, we read ClientDLL (The module in csgo that contains the info we need) + PlayerBase.
Code:
// our player
DWORD LocalPlayer = Mem.Read<DWORD>(ClientDLL + PlayerBase);
// our player's team, so we can compare it to the player in our crosshair and shoot if its not our own player's team.
int LocalTeam = Mem.Read<int>(LocalPlayer + teamOffset);
// our player's crosshair ID, it is used for reading what is in our crosshair
int CrossHairID = Mem.Read<int>(LocalPlayer + CrosshairOffset);
Now that we got the needed info for our player, we need to create our Triggerbot function. Name it anything you want, I will name mine Trigger.
Now we got to read the memory needed inside our triggerbot function.
Code:
void Trigger()
{
DWORD EnemyInCH = Mem.Read<DWORD>(ClientDLL + EntityBase + ((CrossHairID - 1) * EntLoopDist)); // CH = Crosshair.
int EnemyHealth = Mem.Read<int>(EnemyInCH + healthOffset); // Enemy in crosshair's
int EnemyTeam = Mem.Read<int>(EnemyInCH + teamOffset); // Enemy in crosshair's team, we need this to compare it to our own player's team)
}
To not shoot at friends, we need to make sure the enemy team is not the same local team.
We can do this like this:
Code:
if (LocalTeam != EnemyTeam)
{
// shoot
}
But it is going to shoot at dead enemies. To prevent this, we can check if EnemyHealth is bigger than 0.
Code:
if (EnemyHealth > 0)
{
// shoot
}
To make the code less messy, we will check the team and health in the same if statement.
Code:
if (LocalTeam != EnemyTeam && EnemyHealth > 0)
{
// Shoot
}
Now we got a prefect triggerbot. but it does not shoot. As this is going to be a memory reading only triggerbot, we are going to simulate a mouse press instead of forcing it through writing memory. We are going to use mouse_event. If you want to, you can check out the
mouse_event"]mouse_event page on MSDN[/URL] and try to understand it. You should be able to figure it out if you actually watched the tutorial I linked earlier, but anyways, here's the finished Trigger function code:
Code:
void Trigger()
{
DWORD EnemyInCH = Mem.Read<DWORD>(ClientDLL + EntityBase + ((CrossHairID - 1) * EntLoopDist)); // CH = Crosshair.
int EnemyHealth = Mem.Read<int>(EnemyInCH + healthOffset); // Enemy in crosshair's
int EnemyTeam = Mem.Read<int>(EnemyInCH + teamOffset); // Enemy in crosshair's team, we need this to compare it to our own player's team)
if (LocalTeam != EnemyTeam && EnemyHealth > 0)
{
// Here you can add a delay before shooting, to make it look legit. This is done using Sleep()
mouse_event(MOUSEEVENTF_LEFTDOWN, NULL, NULL, NULL, NULL);
// use Sleep() here for shooting several shots with an ak for example. Not usable with pisto
mouse_event(MOUSEEVENTF_LEFTUP, NULL, NULL, NULL, NULL);
// use Sleep() here for a 'cooldown' between shots.
}
now you need to add the function in your main() in a loop.
Code:
int main()
{
while(true)
{
Trigger();
// Add a Sleep() here for less cpu usage.
}
}
Now you have a working triggerbot!
It is probably detected, but anyways.
Have fun with it!