Problem bei pattern search

04/29/2014 14:45 EthnicX#1
Moinsen, ich habe folgenden code im Internet für einen Pattern scan gefunden:

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);
        
}
Functions.h
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;
}
Jetzt wenn ich diesen code compilen möchte bekomme ich jedes mal diesen Fehler:
" 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.
04/29/2014 14:47 lalaker1#2
Use MultiByteToWideChar for char* to lpcwstr.
04/29/2014 21:25 ​Tension#3
Oder GetModuleHandleA.
Wenn du aber bei solchen Fehlermeldungen scheiterst solltest du eventuell die Grundlagen lernen.
04/29/2014 22:40 EthnicX#4
Ich bin momentan auch nicht daran wirklich interessiert die Programmiersprache zu lernen, ich muss allerdings ein paar Sachen versuchen da Cheat Engine nun von dem Spiel was ich hacken möchte geblockt wird.
Lieber würde ich das mit Autoit machen, das kann ich besser doch das wird auch nicht wirklich was ohne dll injection.
04/30/2014 06:57 Delinquenz#5
Quote:
Ich bin momentan auch nicht daran wirklich interessiert die Programmiersprache zu lernen
Dann frag wen, ob er dir das für Geld macht. Wenn du daran nicht interessiert bist, dann lass es.
04/30/2014 15:49 EthnicX#6
Quote:
Originally Posted by Delinquenz View Post
Dann frag wen, ob er dir das für Geld macht. Wenn du daran nicht interessiert bist, dann lass es.
[Only registered and activated users can see links. Click Here To Register...] ;)