Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Funktionen externer Anwendungen aufrufen

  Alt 25. Okt 2007, 16:23
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat