Frage zum Virtuellen Adressraum in Windows



  • Hallo, wenn ich z.b. eine exe Datei (z.b. Windows Taschenrechner) öffne dann läd der Windows Pe Loader doch diese Datei in einen bestimmten Adressraum.

    Z.b.
    Festplatte:
    Offset 0x1 Erstes Byte der Windows Taschenrechner Anwendung
    Offset 0x2 Zweites Byte der Windows Taschenrechner Anwendung
    Offset 0x3 Letzdes Byte der Windows Taschenrechner Anwendung

    Jetzt öffne ich den Taschenrechner:

    Der Pe Loader ließt alles von der Festplatte von Offset 0x1 bis 0x3 und packt
    diese ganzen Daten in den Virtuelle Adressraum (Arbeitsspeicher ist das so richtig? )

    Virtueller Adressraum:

    0x1234 Erstes Byte der Windows Taschenrechner Anwendung
    0x1235 Zweites Byte der Windows Taschenrechner Anwendung
    0x1236 Letzdes Byte der Windows Taschenrechner Anwendung

    Jetzt läuft die Anwendung so vor sich hin ich kann fröhlich rumrechnen.

    Ist es möglich herauszufinden an welcher Adress im Virtuellen Adressraum nun mein Programm läuft und ist es möglich auf diesen Virtuellen Adressraum zuzugreifen?

    So das ich z.b. im Virtuellen Adressraum rum pfuschen kann so das ich meinetwegen eine 3 in das Eingabefeld des Windows Taschenrechners schreiben kann.

    Ich hoffe ich hab mich verständlich ausdrücken können. :xmas1: :xmas2:



  • denke das könnte dir weiterhelfen
    Speicherzugriff Teil 1
    Speicherzugriff Teil 2

    [EDIT]
    und für das PE format im allgemeinen kucks du
    PE-Format



  • Sry hab mich nicht richtig ausgedrückt. Das mit Read und WriteProcessMemory das kenn ich, ich wollte eigentlich er folgendes machen:

    Während der Windows Taschenrechner läuft, will ich bestimmte Maschienenbefehle umändern.

    z.b.

    Offset 0x4 mov eax,1 <-- Daraus will ich z.b. machen mov eax,2
    Diese änderung will ich aber nur innerhalb des Virtuellen Adressraum machen.
    Damit meine ich wenn das Programm beendet wird dann enthält es den gleichen Code wie wo es gestartet wurde.

    Im Prinzip will ich einen Patcher machen der bestimmte Befehle eines Programmes im Virtuellen Adressraum ändert.



  • writeprocessmemory wenns ein anderer prozess ist, anders geht es aus sicherheitsgruenden nicht

    greetz KN4CK3R



  • na du kannst die adresse von der funktion ändern und auf eine andere adresse umleiten. Somit kannst du dann in der funktion rummpfuschen und werte ändern.
    anschliesend verweist du dann wieder auf die alte funktionsadresse mit den geänderten werten, damit dein programm nicht abstürzt.

    ist das 1 x 1 des cheat schreibens 😉



  • Ja das dass geht glaube ich gerne. ^^ Aber wie geht es?
    Ich habe eben etwas von Detours gelesen damit soll es wohl möglich sein.

    Aber jetzt die Frage: Wie geht das ohne Detours?

    Mich würde halt interessieren wie das intern so funktioniert und wie man das umsetzen kann ohne eine fertig Lib zu verwenden.

    Verwenden Debugger (z.b. OllyDbg) auch dafür Detours? Bei OllyDbg kann man ja auch ein Programm Schritt für Schritt ausführen. Wäre echtmal interessant zu wissen wie das abläuft.

    Ich stelle mir so so vor:

    offset:
    0x1 mov eax,1 <-- Speichere den Befehl in einer Variable im Virtuellen Adressraum, ersetze den Code an Offset 0x1 durch den Code eines Breakpoints, wenn auf Step im Debugger geklickt wird ersetze den Breakpoint Code durch den Originalen Code jetzt wird der Original Code ausgeführt.

    So Stelle ich mir das in der Theorie vor. Aber wie geht das in der Praxis?



  • kuck dir einfach mal folgende tutorials an,
    ich hab das zwar schon hintermir, aber der bereich ist einfach zu groß
    ums genauer zu erklären.
    im grunde funzt es wie oben schon beschrieben und es gibt nicht einen goldenen weg sondern viele wege die zum ziehl führen.

    Unknown cheats
    Lade eine Dll aus dem Speicher

    wenn du mir ne PM schickst, mit deiner e-mail adresse, dann kann ich dir ein tutorial zuschicken (in englisch) das befasst sich mit StructuredExceptionHandling and Detours-library und befast sich unter anderem mit Olly-Debug

    [EDIT]
    da es hier ja keine PM gibt, hab ich dir schnell den link zu SEH nochmal rausgesucht. allerdings must du dich da anmelden sonst kannst du das tut nicht downloaden
    Multiplayer Cheats



  • Wenn du einzelne Zeilen ändern willst und die neue Zeile genauso viele bytes hast, kannst du das ganz einfach mit WriteProcessMemory machen.

    Sonst gäbe es noch CodeCaves und wenn ganz viel geändert werden muss, detours. Ich hatte zu diesem Thema mehrere Video Tutorials gemacht falls du die dir reinziehen willst.

    http://www.vivid-abstractions.net/category/programming/tutorials/

    Scroll ganz runter und ab da arbeite dich nach oben. 😉



  • Danke an alle für die Links ich werd mich da mal durcharbeiten.



  • @Patrickssj6

    saubere arbeit, 👍
    allerdings erkennt man das dein bildschirm wohl etwas breiter ist als 1280 x 1024

    macht das ganze mühsam zu verfolgen.... 🕶



  • @rT!f@Ct schrieb:

    @Patrickssj6

    saubere arbeit, 👍
    allerdings erkennt man das dein bildschirm wohl etwas breiter ist als 1280 x 1024

    macht das ganze mühsam zu verfolgen.... 🕶

    Meine VM meinst du 😃 Danke!


Anmelden zum Antworten