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 AnwendungJetzt ö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 AnwendungJetzt 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 Speicherwenn 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.
-
saubere arbeit,
allerdings erkennt man das dein bildschirm wohl etwas breiter ist als 1280 x 1024macht das ganze mühsam zu verfolgen....
-
@rT!f@Ct schrieb:
saubere arbeit,
allerdings erkennt man das dein bildschirm wohl etwas breiter ist als 1280 x 1024macht das ganze mühsam zu verfolgen....
Meine VM meinst du
Danke!