Konstanter Speicherplatz
-
Und wie baue ich das jetzt in meinen Code ein?
Einfach reinpasten geht nichtOK . . . hat sich erledigt. Das musste man bei den Einstellungen machen.
Aber gibt es eine Möglichkeit das in den Code einzubetten?
-
Das soll ja auch nicht in deinen Code. Das ist ein Compilerflag. Du musst eben deine Zielanwendung entsprechend kompilieren...
-
Also gibt es keine Möglichkeit das direkt im Code festzulegen?
-
Wieso willst du das unbedingt im Code festlegen wenn du es einfach in den Einstellungen einstellen kannst?
-
Na weil mich sowas interessiert und ich eigentlich interessiert daran bin alles möglichst unabhängig von irgendwas zu machen
-
-
3P!CF41L schrieb:
... wenn das dazugehörige Opferprogramm immer an die selbe Stelle speichert
Du willst also eigentlich von einem fremden Programm (fertiges Binary ohne Source) Werte auslesen oder wie?
-
Genau...sone Art Trainer soll das mal werden
Dazu muss ich auch noch wissen, wie ich aus dem kompletten RAM werte auslesen kann.
bzw, wie kann man denn rauskriegen wo ein Programm "xyz" die variable "var1" speichert?
-
Mit einem Debugger:
http://www.hex-rays.com/products/ida/index.shtml
http://www.ollydbg.de/
http://en.wikipedia.org/wiki/SoftICE
-
Reverse Engineering !
Wenn du zb soetwas hast:
struct A { int a; int b; }; struct B { float c; A* d; int e; } B* globalB = new B;
Und du bist an dem Wert b in der Klasse A interessiert, dann kann es sein dass du zuerst die Addresse von globalB finden musst, 4 addieren + dereferenzieren, auf das Ergebnis nochmal 4 addieren und wieder dereferenzieren musst.
Ein Beispiel was so aussehen könnte: Ein Spiel, globalB ist ein Zeiger der immer auf den den aktuellen Spieler zeigt, B ist eine Struktur die Spieler hält und in A stehen Informationen über den Status des Spielers, zb HP.
-
Ist es nicht so, dass das seit Windows 7 nicht mehr möglich ist?
-
Was soll nicht mehr möglich sein? Wenn man eine statische Adresse findet, nimmt man einfach die moduleBase + offset, und findet so immer den selben Wert.
Findet man überhaupt keinen statischen Bezug, muss man sich an entsprechenden Stellen im Code "einklinken".Versuchs mal mit http://www.cheatengine.org
-
Das Problem ist die ASLR...
-
dot schrieb:
Das Problem ist die ASLR...
Das ist doch kein Problem. Es wird doch nur die Startadresse zufällig gewählt. Und die kann man abfragen. Der Offset zur eigentlichen Adresse bleibt gleich.
-
MisterX schrieb:
dot schrieb:
Das Problem ist die ASLR...
Das ist doch kein Problem. Es wird doch nur die Startadresse zufällig gewählt. Und die kann man abfragen. Der Offset zur eigentlichen Adresse bleibt gleich.
Ja, aber das ist eben etwas, was man berücksichtigen muss...
-
dot schrieb:
MisterX schrieb:
dot schrieb:
Das Problem ist die ASLR...
Das ist doch kein Problem. Es wird doch nur die Startadresse zufällig gewählt. Und die kann man abfragen. Der Offset zur eigentlichen Adresse bleibt gleich.
Ja, aber das ist eben etwas, was man berücksichtigen muss...
Stimmt, aber das ist sein geringstes Problem glaube ich Vor allem weil 90% der Programme immer bei 0x400000 anfangen.
BaseAddress + Offset zeigt auf nen Pointer.
Pointer dereferenzieren + Offset zeigt auf den Wert den du willst.Danach kannst du dich richten.
-
dot schrieb:
Das Problem ist die ASLR...
Die man sowohl systemweit als auch in der Executable selbst abstellen kann. System weit würde per Registry gehen, ist aber ein Sicherheitsproblem. Den Flag in der Exe entfernen ist kein Problem, einfach nen PE-Editor nehmen.
Obwohl es wirklich nicht zuviel verlange ist, am Anfang die Module-Liste mit den tlhelp32 Funktionen zu lesen, sich die Addresse des Hauptmodules zu merken und darauf Offsets zu addieren.
-
Ja, das ist alles richtig. Das ändert aber nix dran dass das Problem des Threaderstellers die ASLR ist/war. Und genau das hab ich gesagt
-
Nachdem ich nach ein paar Tutorials geguckt habe bin ich auch auf ein brauchbares gestoßen. Ich scheitere aber nach wenigen Zeilen. Der Tutor^^ verwendet einen Dateityp namens "Window" und bei mir gibts den nicht. . .In welcher header-Datei findet man den denn?
-
Das solltest du den Tutor fragen...