Problem mit WriteProcessMemory



  • hi leute!
    Leider muss ich euch schonwieder nerven, und zwar weil mein Programm mal wieder mist macht!
    Alsooo:
    Ich will einen trainer schreiben, der einen Wert eines Spiels während der laufzeit so ändert, das ich unendlich leben, undendlich munition ect. habe.
    Dieses mache ich mit hilfe von WriteProcessMemory. Hier ein teil des codes:

    unsigned adresse = 0x00412502;
    int      offset  = 0x8B7C2414;
    ...
    WriteProcessMemory(hproc,(LPVOID)adresse,&offset,4,NULL);
    

    Das Problem ist, das der offset 8B7C2414, welcher ja 4 byte groß ist, nicht korrekt in die adresse 00412502 eingetragen wird. Er landet irgendwie wild verteilt in den daneben liegenden Adressen.Wenn ich nur einen byte eintragen will (z.B 90) dann klappt alles wunderbar, nur wenn es dann mehrere sein sollen, gibt es probleme. Weiß jemand wie ich das machen muss?

    Danke im Vorraus



  • Erstens, bei WriteProcessMemory übergibst du nicht die Adresse des Offset's sondern die Adresse des Wertes (Weisst du überhaupt was ein Offset ist?)
    Zweitens, die Wert-Variable muss man umkehren in 0x14247c8b oder man nimmt ein array.
    Drittens, die Frage gehört ins Winapi Forum, denn ich sehe hier keine MFC-spezifischen Fragen.



  • Hoppla! Ich habe die Opcodes mit Offset verwechselt!
    Ich denke mal das der offset ein wert einer adresse ist, beispielsweise der wert wie viel Munition man noch hat.
    Was ich jetzt ändern will, sind die Opcodes.
    Wie gesagt, wirft mein Programm da alles durcheinander.
    Wie muss ich das jetzt machen?

    Danke im Vorraus



  • einfach die Variable umdrehen, sowie ich es oben gepostet habe
    oder man nummt ein BYTE Array:

    BYTE byValue[] = {0x8b,0x7c,0x24,0x14};
    //...
    ::WriteProcessMemory(hProcess,(LPVOID)0x412502,(LPCVOID)byValue,sizeof(byValue)/sizeof(*byValue),NULL);
    


  • Jau danke klappt wunderbar 🙂
    Dein code hat aber einen kleinen fehler und zwar muss man
    sizeof(byValue) nicht durch sizeof(*byValue), sondern einfach durch 2 teilen, sonst kommt wieder schrott in den speicher, aber trotzdem danke, hast mich auf den richtigen weg gebracht 😉



  • hmm mist, irgendwie funktioniert es so doch nicht. Da ist noch irgendwo ein fehler. Er schreibt die bytes jetzt an die richtigen stellen, aber das problem das ich jetzt habe, das er den folgenden adressen irgendeinen müll zuordnet. Das liegt sicher daran, das die puffer größe von byValue nicht richtig ermittelt wird. Wie muss ich das richtig machen? Ich Probiere schon ne Stunde rum, aber finde kein ergebnis.

    Danke im Vorraus



  • Nö, warum durch 2? Du hast 4 Elemente in deinem BYTE Array, ein char ist 1 Byte groß.

    EDIT:
    dann würde ich anstelle von sizeof die Anzahl der Elemente schreiben, in deinem Fall sind es 4


Anmelden zum Antworten