Main.cpp
Code:
#include <StdAfx.h>
#include <Windows.h>
#include <iostream>
#include "Functions.h"
using namespace std;
//Define all Here, its easier.
char BytesToPatch[] = "\x90\x90"; //What we are replacing with, for example \x90\ = NOP.
char ProcessName[] = "TheCodenZ.exe"; //Processname
char BytePattern[] = "\xFF\x0E\x8D\x74\x24\x24\xE8\x00\x00\x00\x00\x5F\x5E\xB0\x01\x5B\x8B\xE5\x5D\xC2\x04\x00"; //Our Pattern
char ByteMask[] = "xxxxxxx????xxxxxxxxxxx"; //Our Mask
int Position = 0; //0 means first.
int NoOfBytes = 2;
//Our Main Function
void InitiatePatch()
{
DWORD Bytes = FindPattern(ProcessName, BytePattern, ByteMask);
Bytes+= Position;
WriteToMemory(Bytes, BytesToPatch, NoOfBytes);
}
Code:
#include <Psapi.h>
//Get all module related info, this will include the base DLL.
//and the size of the module
MODULEINFO GetModuleInfo( char *szModule ) //Hier steckt der Fehler
{
MODULEINFO modinfo = {0};
HMODULE hModule = GetModuleHandle(szModule);
if(hModule == 0)
return modinfo;
GetModuleInformation(GetCurrentProcess(), hModule, &modinfo, sizeof(MODULEINFO));
return modinfo;
}
void WriteToMemory(uintptr_t addressToWrite, char* valueToWrite, int byteNum)
{
//used to change our file access type, stores the old
//access type and restores it after memory is written
unsigned long OldProtection;
//give that address read and write permissions and store the old permissions at oldProtection
VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);
//write the memory into the program and overwrite previous value
memcpy( (LPVOID)addressToWrite, valueToWrite, byteNum);
//reset the permissions of the address back to oldProtection after writting memory
VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}
DWORD FindPattern(char *module, char *pattern, char *mask)
{
//Get all module related information
MODULEINFO mInfo = GetModuleInfo(module);
//Assign our base and module size
//Having the values right is ESSENTIAL, this makes sure
//that we don't scan unwanted memory and leading our game to crash
DWORD base = (DWORD)mInfo.lpBaseOfDll;
DWORD size = (DWORD)mInfo.SizeOfImage;
//Get length for our mask, this will allow us to loop through our array
DWORD patternLength = (DWORD)strlen(mask);
for(DWORD i = 0; i < size - patternLength; i++)
{
bool found = true;
for(DWORD j = 0; j < patternLength; j++)
{
//if we have a ? in our mask then we have true by default,
//or if the bytes match then we keep searching until finding it or not
found &= mask[j] == '?' || pattern[j] == *(char*)(base + i + j);
}
//found = true, our entire pattern was found
//return the memory addy so we can write to it
if(found)
{
return base + i;
}
}
return NULL;
}
" error C2664: 'GetModuleHandleW': Konvertierung des Parameters 1 von 'char *' in 'LPCWSTR' nicht möglich"
Ich bin jetzt kein Profi, aber ich frage mich wie kann es sein das ein Code der bei jedem anderen zu compilen geht, nur bei mir nicht funktoniert.






