Home of Gamehacking - Archiv

Normale Version: [C++] WritePointer Funktion
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey,
hier meine Funktion um von einer BaseAdresse aus mit beliebig vielen Offsets in eine Adresse zu schreiben.

C Code
//////////////////////////////////////////////////////////////////////////
//WritePointer
//This function will write a specific value to a multilevel pointer with x offsets.
//
//////////////////////////////////////////////////////////////////////////
int WritePointer(LPCWSTR szProcessName, LPCWSTR szModuleName, DWORD dwAddressOffset, DWORD dwOffsets[], int nOffsets, BYTE szCode[], int nCode)
{
 //First offset has to be zero
 HANDLE hProcess; //Process handle.
 int iCounter = 0;
 DWORD BytesRead, BaseAddress, lpAddress, dwOldProtect; 

 
 hProcess = GetProcessHandle(szProcessName);
 if (hProcess == 0 )
 {
 MessageBox(NULL, _T("Couldn't get process handle!"), szErrorTitle, NULL);
 return 0;
 }
 BaseAddress = GetModuleBaseAddress(szProcessName, szModuleName); //Get the base address of the specific module.
 if (BaseAddress == 0)
 {
 MessageBox(NULL, _T("Couldn't get module base address!"), szErrorTitle, NULL);
 return 0;
 }

 lpAddress = (DWORD)BaseAddress + dwAddressOffset; //Calculate real address.


 while (iCounter != nOffsets) //mod the code here!
 {
 lpAddress = lpAddress + dwOffsets[iCounter];
 if (ReadProcessMemory(hProcess, (LPVOID)lpAddress, &BytesRead, nCode, 0) == 0)
 {
 MessageBox(NULL, _T("ReadProcessMemory failed!"), szErrorTitle, NULL);
 return 0;
 }
 else
 {
 lpAddress = BytesRead;
 iCounter++;
 }
 }

 lpAddress = lpAddress + dwOffsets[iCounter];

 if ((WriteProcessMemory(hProcess, (LPVOID)lpAddress, (LPCVOID)szCode, nCode, 0)) == 0)
 {
 //Oh noes, WPM error.
 MessageBox(NULL, _T("Failed to write to process memory.."), szErrorTitle, NULL);
 return 0;
 }
 else //Everything went fine.
 {
 Beep(0x1000,200); //Activated sound.
 return 1;
 }
 return 0;
}