![]() |
Funktionen externer Anwendungen aufrufen
In letzter Zeit habe ich mich etwas näher mit dem Manipulieren des Speichers fremder Anwendungen auseinandergestzt. Nun habe ich aber einen Pointer auf eine interne Funktion in einer anderen Anwendung (um genau zu sein: Es ist ein in C++ geschriebenes Spiel), welche ich mit Parametern (vermutlich einem) aufrufen möchte. Wie genau man dies in Delphi allerdings umsetzen würde ist mir hierbei absolut nicht klar. Schätzungsweiße mit Assembler (ich kann Assembler verstehen, habe es aber schon seit einigen Jahren nicht mehr verwendet). Ein Handle auf den Prozess zum Zugriff auf den Speicher habe ich natürlich schon.
Hoffe jemand kann mir hier einen Lösungshinweiß geben. :wink: -- WordsBG alias Patrick |
Re: Funktionen externer Anwendungen aufrufen
Funktioniert deine Hacker-Lösungen noch wenn der Speicherschutz bei XP/Vista aktiv ist bzw. schlagen da nicht Virenscanner an?
|
Re: Funktionen externer Anwendungen aufrufen
von deiner Anwendung kannst du die andere nicht direkt aufrufen weil die Speicheradresse in deinem Programm nicht gültig ist und wo ganz anders hinzeigt. Du musst deinen Programmcode zum aufrufen der anderen Funktion dann auch in dem anderen Prozess plazieren.
|
Re: Funktionen externer Anwendungen aufrufen
Mir fallen da spontan drei Möglichkeiten ein:
1. Mit ReadProcessMemory die gesamte Funktion ins eigene Programm transferieren. Das ist allerdings ziemlich nutzlos, falls andere Funktionen oder globale Variablen verwendet werden. Außerdem müsstest du irgendwoher wissen, wie lang die Funktion ist. Diese Methode halte ich daher nicht für praktikabel. 2. CreateRemoteThread ist mir persönlich in diesem Fall sehr sympathisch: Sofern du nur einen Parameter hast und die Aufrufkonvention stdcall ist, kannst du direkt CreateRemoteThread aufrufen und als Thread-Funktion die gewünschte angeben, das Ergebnis solltest du mit GetExitCodeThread erhalten. Wenn es doch mehr Parameter sein sollten, gibt es auch eine andere Möglichkeit:Einfach mit VirtualAllocEx ein bisschen Speicher allozieren und dort Code reinschreiben, der dann die Funktion aufruft. Ergebnis-Transfer ganz nach Wahl: Über den Exit-Code oder irgendeine Form von IPC. 3. Die absolute Hacker-Methode, die aber höchstwahrscheinlich nicht funktioniert: Die Exporttabelle des fremden Programms so ändern, dass sie die Funktion exportiert und die Anwendung dann als DLL laden, das muss dann dynamisch und in einem Thread geschehen, weil du sonst nichts tun kannst. Ich habe allerdings keine Ahnung, was die Anwendung dazu sagt, als DLL gestartet zu werden. |
Re: Funktionen externer Anwendungen aufrufen
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz