Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicher überschreiben mit Inline ASM (https://www.delphipraxis.net/128874-speicher-ueberschreiben-mit-inline-asm.html)

JnZn558 8. Feb 2009 01:53


Speicher überschreiben mit Inline ASM
 
Ich weiss nicht, ob das richtig hierrein gehört!
Ich möchte gern eine Speicherstelle von einem laufenden Spiel mit Inline ASM überschreiben, bzw ASM durch eigene code ersetzen, so wie Memory hacking tools das möglich macht wie z.B. Game Engine oder Tsearch. Inline ASM kennt ich schon, nur ich weiss nicht so genau wie es gehen soll.

Namenloser 8. Feb 2009 03:10

Re: Speicher überschreiben mit Inline ASM
 
Mit Inline-Assembler hat das nicht direkt was zu tun, denn die Befehle sollen ja nicht in deinem Programm, sonderm im Zielprogramm ausgeführt werden. Daher musst du sie irgendwie als Datenstrom speichern, z.B. in einem Byte-Array, als Ressource, oder als Datei, die du zur Laufzeit lädst. Was das Überschreiben des Speichers anbelangt, kann ich dir nicht helfen. Eigentlich sollte das nach meinem Verständnis heutzutage auch gar nicht mehr möglich sein, da unter NT jeder Prozess seinen eigenen virtuellen Adressraum hat. Was wohl geht, ist Speicher in einem anderen Prozess zu alloziieren - aber überschreiben? Nicht, dass ich wüsste. Ich bin aber auch kein Experte - Was mir noch einfallen würde, wäre, sich irgendwie als Debugger einzuklinken, denn beim Debugger von Delphi ist es ja auch möglich, Werte im laufenden Programm abzuändern.
Es gibt sicher andere im Forum, die sich da besser auskennen. Allerdings ist die Frage, ob sie dich bei deinen eher zweifelhaften Absichten unterstützen wollen.

mr_emre_d 8. Feb 2009 03:23

Re: Speicher überschreiben mit Inline ASM
 
Falls du einer Anwendung eine Extra Funktion hinzufügen willst, probiers mit DLL-Injection;
Falls du aber aufs ändern vom COde bist müsstest du
1. Speicher im Ziel-Prozess allozieren
2. Deinen Code ins Speicher schreibem
3. Orginale Code umbiegen (jmp zu deinen Code)
4. Richtig handhaben (mit rückwärtsjumps usw ..)

MfG

JnZn558 8. Feb 2009 15:42

Re: Speicher überschreiben mit Inline ASM
 
Zitat:

Zitat von mr_emre_d
Falls du einer Anwendung eine Extra Funktion hinzufügen willst, probiers mit DLL-Injection;
Falls du aber aufs ändern vom COde bist müsstest du
1. Speicher im Ziel-Prozess allozieren
2. Deinen Code ins Speicher schreibem
3. Orginale Code umbiegen (jmp zu deinen Code)
4. Richtig handhaben (mit rückwärtsjumps usw ..)

MfG

das ist mir bewusst, nur wie stelle ich das mit inline asmbler an, denn ich hab den codeausschnitt von game engine und das ist genau in asm.

wie man den game prozess ausfindig macht, weiss ich schon, mit API "findwindows", nun kenne ich das bis jetzt, dass ich immer bytesweise in hex mit writememory mache, aber ich kenne nicht alle asm befehl in hexzahlen, ausserdem ist es schwerer. deshalb möchte ich das gern in asm machen.

Cyf 8. Feb 2009 16:34

Re: Speicher überschreiben mit Inline ASM
 
Wenn du den Prozess-Speicher direkt überschreibst, wird die alte Funktionalität nicht mehr gewährleistet sein. Wenn du so vorgehst, kannst du deine neue Funktion doch einfach in deine Exe einkompilieren und dann kopieren (dazu müsstest du aber auch die virtuelle Adresse im Prozess kennen). Die gängige Methode wäre aber eine DLL-Injection und das starten eines Threads im anderen Prozess, um den Speicher zu manipulieren.

Namenloser 8. Feb 2009 20:34

Re: Speicher überschreiben mit Inline ASM
 
Was machst du eigentlich, wenn der Code, den du patchen willst, gerade ausgeführt wird?

Cyf 8. Feb 2009 21:31

Re: Speicher überschreiben mit Inline ASM
 
Er könnte eine Endlosschleife davorpatchen, dann eine Weile warten und alles andere dahinter patchen und zuletzt die Schleife beheben, dass ist allerdings sehr unsauber (zumal wohl nicht bekannt ist, wann der Codeblock sicher verlassen wurde) und die Variante mit der DLL ist eindeutig die bessere Lösung. Bei Veränderung des Codes ist auch zu beachten, dass der Code durchaus auch nochmal durchlaufen werden kann, falls sich der Beginn noch in der Prefetch befindet.

Dax 8. Feb 2009 21:51

Re: Speicher überschreiben mit Inline ASM
 
DLL-Injection löst aber das grundlegende Problem nicht, nicht zu wissen, ob der Opfercode gerade ausgeführt wird. Das kann man eigentlich nur tun, wenn man den anderen Prozess stoppt (sollte man können, wenn man schon Threads starten/Speicher verändern kann) und alle Threads inspiziert. Solange einer einen R/EIP in den Zielcode hat.. Das Prinzip dürfte bekannt sein.

mr_emre_d 2. Mai 2009 05:08

Re: Speicher überschreiben mit Inline ASM
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal das Thema wieder neu aufgegriffen (aus Langeweile :D)

Im Anhang befindet sich ein Codesnippet - das leider als Trojaner erkannt wird / aber keins ist (Source mit dabei) - welches einfach eine Funktion in Notepad einintegriert.

MfG

mkinzler 2. Mai 2009 07:18

Re: Speicher überschreiben mit Inline ASM
 
da wird die Heuristik zuschlagen. Ich nehme an, dass gerade der Vorgang der Codeinjection den Scanner zum Anschlagen bewegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz