#include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <tchar.h> #include <vector> #include <stdlib.h> using namespace std; DWORD GetModuleBaseAddress(TCHAR* lpszModuleName, DWORD pID) { DWORD dwModuleBaseAddress = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID); // make snapshot of all modules within process MODULEENTRY32 ModuleEntry32 = { 0 }; ModuleEntry32.dwSize = sizeof(MODULEENTRY32); if (Module32First(hSnapshot, &ModuleEntry32)) //store first Module in ModuleEntry32 { do { if (_tcscmp(ModuleEntry32.szModule, lpszModuleName) == 0) // if Found Module matches Module we look for -> done! { dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr; break; } } while (Module32Next(hSnapshot, &ModuleEntry32)); // go through Module entries in Snapshot and store in ModuleEntry32 } CloseHandle(hSnapshot); return dwModuleBaseAddress; } DWORD GetPointerAddress(HWND hwnd, DWORD gameBaseAddr, DWORD address, vector<DWORD> offsets) { DWORD pID = NULL; // Game process ID GetWindowThreadProcessId(hwnd, &pID); HANDLE phandle = NULL; phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); if (phandle == INVALID_HANDLE_VALUE || phandle == NULL); DWORD offset_null = NULL; ReadProcessMemory(phandle, (LPVOID*)(gameBaseAddr + address), &offset_null, sizeof(offset_null), 0); DWORD pointeraddress = offset_null; // the address we need for (int i = 0; i < offsets.size() - 1; i++) // we dont want to change the last offset value so we do -1 { ReadProcessMemory(phandle, (LPVOID*)(pointeraddress + offsets.at(i)), &pointeraddress, sizeof(pointeraddress), 0); } return pointeraddress += offsets.at(offsets.size() - 1); // adding the last offset } int Main() { HWND hwnd_AC = FindWindowA(NULL, "AssaultCube"); if (hwnd_AC != FALSE); DWORD pID = NULL; GetWindowThreadProcessId(hwnd_AC, &pID); HANDLE phandle = NULL; phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); if (phandle == INVALID_HANDLE_VALUE || phandle == NULL); char gamemodule1[] = "ac_client.exe"; DWORD gamebaseaddress1 = GetModuleBaseAddress(_T(gamemodule1), pID); //souls DWORD ammoAddr = 0x000FAB48; vector<DWORD> ammoOffsets{ 0x22C, 0xEC, 0x390, 0x3C8}; DWORD ammoPtrAddr = GetPointerAddress(hwnd_AC, gamebaseaddress1, ammoAddr, ammoOffsets); while (true) { int ammo = 6969; WriteProcessMemory(phandle, (LPVOID*)(ammoPtrAddr), &ammo, 4, 0); } }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}