Klasse mit Byte Array, Datenübergabe



  • Hallo zusammen,
    mein Programm soll im Speicher von anderen Programmen bestimmte Stellen patchen und da ich nicht alle Variablen einzeln definieren muss habe ich diese Klasse erstellt:

    class cPatch
    {
    public:
        cPatch(DWORD adress, BYTE* patch, BYTE* orig);
        DWORD adress;
        BYTE* patch;
        BYTE* orig;
    };
    

    Die Werte werden über den Konstruktor zugewiesen:

    cPatch::cPatch(DWORD adress, BYTE* patch, BYTE* orig)
    {
        this->adress = adress;
        this->patch = patch;
        this->orig = orig;
    }
    

    Nun ist das Problem, wie weise ich die richtigen Werte zu? Für WriteProcessMemory benutze ich ein BYTE Array der Form

    BYTE patch[2] = { 0x90, 0x90 };
    

    Das, was in den geschweiften Klammern steht, würde ich nun gerne direkt dem Konstruktor übergeben, ohne den Umweg über

    BYTE patch[2] = { 0x90, 0x90 };
    BYTE orig[2] = { 0x8B, 0xC1 };
    cPatch *newPatch = new cPatch(0x010036DC,patch,orig);
    vPatch.push_back(newPatch); //vPatch ist ein Vectorarray zur späteren Benutzung der Werte
    

    zu machen. Dieser Code lässt sich kompilieren, aber wenn ich die gespeicherten Werte per

    WriteProcessMemory(prozess,(void*)vPatch[0]->adress,vPatch[0]->patch,sizeof(vPatch[0]->patch),&buffer);
    

    in das Programm schreiben will, dann zerhackt diese Funktion das Programm und schreibt scheinbar beliebige Werte an die Speicheradresse (per Debugger nachgeprüft). Nun ist meine Frage, wie ich die Werte 1. richtig übergeben kann und dabei am meisten Tipparbeit spare (in der Form oben wäre es nämlich sogar eine Zeile mehr als normal) und 2. wie ich die gespeicherten Werte für WriteProcessMemory wieder brauchbar ausgeben kann.

    greetz KN4CK3R



  • zu 2. ReadProcessMemory

    zu 1. schon mal überprüft welche werte dir vPatch[0]->adress & vPatch[0]->patch liefern?



  • ReadProcessMemory? Auslesen will ich doch gar nichts aus dem anderen Prozess. Das mit dem Überprüfen der Werte ist ja gerade das Problem, da ich nicht genau weiß, wie ich an die wieder in ihrer Arrayform drankommen soll.

    Edit: ich mache das ganze jetzt einfach per char*, das geht genauso gut...

    greetz KN4CK3R


Log in to reply