Code:
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include <cstring>
using namespace std;
class MemoryReader
{
private:
HANDLE hProcessSnap;
HANDLE hProcess;
bool ProcessIsOpen;
HANDLE hToken; // access token handle
public:
PROCESSENTRY32 pe32;
public:
bool GetProcessbyexe(string exestring)
{
pe32.dwSize = sizeof( PROCESSENTRY32 );
if(!Process32First(hProcessSnap, &pe32))
{
return 0;
}
while(Process32Next( hProcessSnap, &pe32 ))
{
if (exestring.compare(pe32.szExeFile)==0)
{
return true;
}
}return false;
};
bool SetPrivilege(
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
// receives LUID of privilege
if ( !LookupPrivilegeValue(NULL,lpszPrivilege,&luid ) )
{
cout<<"LookupPrivilegeValue error: %un"<< GetLastError()<<"n";
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, &hToken)) return false;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
cout<<"AdjustTokenPrivileges error: %un"<<GetLastError()<<"n";
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
cout<<"The token does not have the specified privilege. n";
return FALSE;
}
return TRUE;
};
bool Open(void)
{
hProcess=OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_TERMINATE, 0,pe32.th32ProcessID);
if (!(hProcess==0))
{
ProcessIsOpen=true;
return true;
}
else
{
return false;
}
};
bool Close(void)
{
if(!(CloseHandle(hProcess)))
{
return false;
}
else
{
ProcessIsOpen=false;
return true;
}
};
int ReadInteger(int Adress)
{
if (ProcessIsOpen)
{
int buffer;
if (ReadProcessMemory(hProcess,(LPVOID)Adress,(LPVOID)&buffer,4,0))
{
return buffer;
}
else
{
cout<<"reading failed"<<endl;
return 0;
}
}
else return 0;
};
bool WriteInteger(int Adress, int value)
{
if(ProcessIsOpen)
{
if(WriteProcessMemory(hProcess,(LPVOID)Adress,(LPVOID)&value, 4, 0))
{
return true;
}
else
{
DWORD oldprotect;
if(VirtualProtectEx(hProcess, (LPVOID) Adress, sizeof(value), PAGE_READWRITE, &oldprotect))
{
if(WriteProcessMemory(hProcess, (LPVOID) Adress, (LPVOID) &value, sizeof(value), 0))
{
VirtualProtectEx(hProcess, (LPVOID) Adress, sizeof(value), oldprotect, &oldprotect);
return true;
}
}
}
return false;
}
else cout<<"Process not Open"<<endl;
return false;
};
float ReadFloat(int Adress)
{
if(ProcessIsOpen)
{
float buffer;
if(ReadProcessMemory(hProcess, (LPVOID) Adress, (LPVOID) &buffer, sizeof(buffer), 0)) return buffer;
else cout<<"reading failed"<<endl;
return 0;
}
else cout<<"Process not Open"<<endl;
return 0;
};
bool WriteFloat(int Adress, float value)
{
if(ProcessIsOpen)
{
if(WriteProcessMemory(hProcess, (LPVOID) Adress, (LPVOID) &value, sizeof(value), 0))
{
return true;
}
else
{
DWORD oldprotect;
if(VirtualProtectEx(hProcess, (LPVOID) Adress, sizeof(value), PAGE_READWRITE, &oldprotect))
{
if(WriteProcessMemory(hProcess, (LPVOID) Adress, (LPVOID) &value, sizeof(value), 0))
{
VirtualProtectEx(hProcess, (LPVOID) Adress, sizeof(value), oldprotect, &oldprotect);
return true;
}
}
}
return false;
}
else cout<<"Process not Open"<<endl;
return false;
};
MemoryReader(void)
{
this->hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
this->ProcessIsOpen=false;
};
};
I fixed some stuff and added some functions to handle the Write/ReadProcessMemory functions.