WriteProcessMemory geht nicht



  • edit: ups thread lesen hilft manchmal



  • n3wbie schrieb:

    Kenne ich nicht. Die eigentlich interessante frage ist, mit welchem Hintergrund möchtest du dich damit beschäftigen. Was ist das Problem, welches du zu lösen versuchst. Wenn du das tatsächlich musst, dann hast du mit großer Wahrscheinlichkeit etwas falsch gemacht. Ich bin da recht unwissend, aber so weit ich weiß, gibt es nie einen guten Grund in fremdem Speicher rumzupfuschen und oft geht das glaube ich so wie so nicht. Vielleicht kann uns Skym0sh0 da auch noch ein wenig aufklären.

    Naja, für z.B. Cheats wird das gebraucht...



  • Skym0sh0 schrieb:

    n3wbie schrieb:

    Kenne ich nicht. Die eigentlich interessante frage ist, mit welchem Hintergrund möchtest du dich damit beschäftigen. Was ist das Problem, welches du zu lösen versuchst. Wenn du das tatsächlich musst, dann hast du mit großer Wahrscheinlichkeit etwas falsch gemacht. Ich bin da recht unwissend, aber so weit ich weiß, gibt es nie einen guten Grund in fremdem Speicher rumzupfuschen und oft geht das glaube ich so wie so nicht. Vielleicht kann uns Skym0sh0 da auch noch ein wenig aufklären.

    Naja, für z.B. Cheats wird das gebraucht...

    Wobei die auch lieber per DLL Injection.



  • n3wbie schrieb:

    So weit ich weiß, und da könnte ich durchaus falsch liegen 🤡 , reicht es eigentlich sogar nur den Virtual Memory zu erwähnen. Denn das ist ja der Berührungspunkt.
    Nun bin ich ja Java-Entwickler, und bin von tatsächlichen Adressen weit weg. Wenn es da etwas erwähnenswertes für mich gäbe, was über den Wiki-Artikel hinaus geht, würde ich mich freuen, wenn du sowohl mich als auch HumaneExistenz1 daran teilhaben lässt 🙂

    Wichtig ist es schon manchmal zu wissen, dass virtueller Speicher selber noch keinen Hardwareplatz verbraucht und man sich bei einem 64 bit Programm richtig viel davon reservieren kann. Ich habe mich vor kurzem mit Memory mapped files beschaeftigt und es ist schon faszinierend, dass man sich einfach so Gigabytegrosse Dateien in den virtuellen Speicher mappen, dort wie auf einem gewoehnlichen Byte-Array drin herumlesen und -schreiben kann, das Betriebssystem diese aber erst bei Bedarf beim Zugriff automatisch nachlaedt und das ganze gegenueber eines normalen read-Befehls auch noch schneller ist, weil man direkt auf den Buffer des Betriebssystems zugreift und es nicht erst in den eigenen Speicher kopiert werden muss. Im Grunde wundert es mich, dass die klassische Variante mit einem buffered-reader noch so sehr verbreitet ist.



  • Leute, wenn es um cheats gehen würde, würde ich das nicht hier fragen sondern in einem hackerforum. Mir geht es einfach um die Tatsache dass ich den Wert nicht überbeschreiben kann, sprich die adresse nach dem wiederherstellen im rechner wieder mit dem orginal überschrieben wird.



  • HumaneExistenz schrieb:

    Leute, wenn es um cheats gehen würde, würde ich das nicht hier fragen sondern in einem hackerforum. Mir geht es einfach um die Tatsache dass ich den Wert nicht überbeschreiben kann, sprich die adresse nach dem wiederherstellen im rechner wieder mit dem orginal überschrieben wird.

    Das Problem ist aber, dass man WriteProcessMemory in der Praxis kaum braucht und es das in der Theorie sogar gar nicht geben sollte. Da ist ein Prozess naemlich eine abgeschlossene Einheit mit eigenem Speicherbereich und das Betriebssystem stellt sicher, dass die Prozesse sich gegenseitig nicht beeinflussen und keine Schaeden anrichten.
    Wenn Prozesse untereinander kommunizieren muessen, dann verwendet man Dateien, Pipes oder auch gemeinsame Speicherbereiche, muss dabei aber vorsichtig sein, dass beide Prozesse die Daten auch vernuenftig verarbeiten.
    Mit WriteProcessMemory und der entsprechenden read-Funktion greifst du aber aktiv in einen anderen Prozess ein, was bei diesem per Design gar nicht vorgesehen ist. Das ist eigentlich nur bei Cheats und fuer Debugger wirklich noetig.
    Entsprechend haben hier auch nur wenige Leute sich damit ueberhaupt beschaeftigt und ich glaube, dass du das auch gar nicht brauchen wirst, es sei denn du hast vor, einen Cheat zu schreiben.



  • HumaneExistenz schrieb:

    Leute, wenn es um cheats gehen würde, würde ich das nicht hier fragen sondern in einem hackerforum.

    Nein, würdest du nicht. Das hier ist eines der wenigen Foren in denen sowohl Hilfsbereitschaft als auch Kompetenz recht hoch angesiedelt sind.
    Die meisten "Hackerforen" sind nicht die Bytes wert, auf denen sie gespeichert sind.

    Mir geht es einfach um die Tatsache dass ich den Wert nicht überbeschreiben kann, sprich die adresse nach dem wiederherstellen im rechner wieder mit dem orginal überschrieben wird.

    Fummel für den Anfang mal in einenen Programmen herum. Zb.

    #include <iostream>
    #include <thread>
    
    int main() {
        int var = 1;
        while(true) {
            std::cout << &var << " has value " << var << std::endl;
            std::this_thread::sleep_for(std::chrono::milliseconds(250));
        }
    }
    

    Da hast du schön die Adresse des Werts, kannst reinschreiben/lesen und bekommst direkt Feedback.
    Dann kannst du dein eigenes Programm verkomplizieren um mehr damit spielen zu können.

    Damit wir dir sagen können was passiert wenn du irgendwo im Speicher des Taschenrechners herumschreibst müssten wir das Programm mindestens debuggen.
    Wird hier keiner machen.
    Kannst aber du. Hängt dich mit Ollydbg ran, setz einen Memory Breakpoint auf deine Adresse und schau wer wie damit arbeitet.

    Der Anfang ist schwer.



  • HumaneExistenz schrieb:

    Der Speicher wird zwar überschrieben, weil ich aus dieser Adresse ja wieder auslese, zeigt er mir den Wert an den ich haben will, aber sobald ich auf MR zum wiederherstellen drücke, kommt der alte wert den ich gespeichert habe. Kann mir da bitte jemand helfen?

    Woher kennst du die Adresse überhaupt? Und woher weißt du, dass der Wert nicht mehrfach im Programm vorkommt und du nicht die falsche Stelle erwischt hast?

    Ansonsten seh ich auch nicht wirklich ein, wozu man sowas brauchen könnte. Außer eben für Cheats oder Trainer. Und daran wäre nichts falsch, ich hab kein Problem damit, Cheats zu schreiben oder zu benutzen, da muss man sich nicht gleich an ein Hacker Forum wenden 😉 Nur gibt es abgesehen davon einfach praktisch überhaupt keine sinnvolle Anwendungsmöglichkeiten für Read-/WriteProcessMemory.



  • Mechanics schrieb:

    Nur gibt es abgesehen davon einfach praktisch überhaupt keine sinnvolle Anwendungsmöglichkeiten für Read-/WriteProcessMemory.

    Für Debugging essentiell. Und etwas in fremden Prozessen fummeln ist ganz nett.
    Aber da wie gesagt eher DLL Injection.
    Zb 3D-Recorder hooken gerne die GL/D3D API um den Bildinhalt direkt beim Rendern abzugreifen.



  • Ja eben, geht mit Dll Injection einfacher/sauberer. Und für die Kommunikation mit dem eigenen Host kann man dann auch wieder einen anderen IPC Mechanismus verwenden.



  • Mit Cheat-Engine kannste nen Pointer-Scan machen, da kriegst du nen Pfad vom statischen Speicher. Wenn du dem folgst, kannst du dir die Adresse immer bestimmen.
    Und R/WPM ist ganz nett, wenn der Prozess DLL-Injection versucht zu erkennen/verhindern.


Anmelden zum Antworten