Entwickler-Ecke
Dateizugriff - Dll in Delphi
Xeron - Mi 30.12.09 20:40
Titel: Dll in Delphi
Hallo, erstmal Wilkommen hier.
Ich stell mich mal ganz kurz vor und dann komm ich ganz schnell zu meiner Frage :D
Also, ich heiße Markus, komme aus Dresden, bin 16 Jahre alt und Programmiere mit Delphi seit 3 Jahren (selbststudium :D)
So, jetzt zu meiner eigentlichen Frage.
Ich habe gestern angefangen DLL´s zu programmieren (ich habs ewig nicht verstanden).
Eine DLL in Delphi einbinden geht ohne Probleme aber jetzt :roll:
1) Kann ich eine geschrieben DLL (aus Delphi) in C++ benutzen. Ich benutze zurzeit als Aufruf "stdcall".
2) Wie kann ich eine DLL in eine fremde Anwendung injecten? Als Test soll ein Dialog in eine DLL geschrieben werden und in den Editor (notepad) injectet werden.
Meines Wissen muss der Code zwischen das begin und end.
Meine Idee:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| library Project1;
uses SysUtils, Dialogs, Classes;
{$R *.res}
Procedure NewExit; begin ShowMessage ('Version: 1.0.0'); end;
begin AddExitProc (NewExit); ShowMessage ('Version: 1.0.0'); end. |
Da passiert aber leider nix. Ich will nix bösartiges damit anstellen (wie viren oder so). Es geht nur um das Verständniss.
So, das war erstmal alles :D
Ich hoffe ihr könnt mir helfen
mfg
Markus
Astat - Do 31.12.09 01:27
Hallo Luckie, das Tut wollte ich eigentlich im meinem Thread Posten habs aber nicht mehr gefunden, da in der DP die Links
nicht mehr stimmen.
lg. Astat
FinnO - Do 31.12.09 01:59
naja, injecten kannst du doch eigentlich nur, wenn die Funktion der DLL hinreichend bekannt ist, also Parameter, Rückgabetyp usw. Dann kannst du eine andere Funktion mit gleichen Parametern/Name schreiben und die DLL mit der im Projekt austauschen.
Astat - Do 31.12.09 03:12
FinnO hat folgendes geschrieben : |
| naja, injecten kannst du doch eigentlich nur, wenn die Funktion der DLL hinreichend bekannt ist, also Parameter, Rückgabetyp usw. Dann kannst du eine andere Funktion mit gleichen Parametern/Name schreiben und die DLL mit der im Projekt austauschen. |
Hallo FinnO, die Funktion zum injecten ist mit LoadLibrary ja bekannt, das reicht, denn in der DLL kann mit Processattached und oder mit "Begin end", beliebiger Code in der Fremdapplikation ausgeführt werden.
lg. Astat
FinnO - Do 31.12.09 03:19
dann hat man aber kein Kontextbasiertes Ausführen. Man muss schon die bekannte Funktion teilweise implementieren und auch dafür sorgen, dass es keine exception gibt, weil man müll zurückliefert - oder stehe ich jetzt ganz auf dem Schlauch?
Astat - Do 31.12.09 03:56
FinnO hat folgendes geschrieben : |
| dann hat man aber kein Kontextbasiertes Ausführen. Man muss schon die bekannte Funktion teilweise implementieren und auch dafür sorgen, dass es keine exception gibt, weil man müll zurückliefert - oder stehe ich jetzt ganz auf dem Schlauch? |
Hallo FinnO, wahrscheinlich "reden wir da" von zwei unterschiedlichen Dingen!?
Also ich meine hier DLL-Injection, die so abläuft.
Man hat ein DLL, diese will ich in einen Prozess injecten und den Code in der DLL ausführen.
Aufbau der zu injectenden DLL:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Library xxx;
procedure SomeCode; begin .. do work .. end;
begin SomeCode; end. |
Das Programm, dass die DLL in den "RemoteProcess" injected, muss jetzt folgendes durchführen.
Notwendige Privileges (Debug, Token) holen.
OpenProcess --> handle des RemoteProcess holen
VirtualAlloc --> im RemoteProcess Speicher allocieren
GetProcAddress für die zu ladende DLL (Path) mit LoadLibrary holen und mit
WriteProcessMemory in den RemoteProcess schreiben
CreateRemoteThread starten (Memory von GetProcAddress und von load library)
DLL wird nun vom "RemoteProcess" geladen, und automatisch "SomeCode;" ausgeführt.
Mehr ist nicht notwendig!
Sollte es erforderlich sein, mit der Dll kommunizieren zu müssen, braucht man keine "DLL Exports", sondern man muss
eine InterProzessKommunikation mit xxxHostApp implementieren.
Fertig.
lg. Astat.
Xeron - Do 31.12.09 09:08
Ok, da danke ich schonmal allen recht herzlich!
Das injecten lass ich lieber erstmal und konzentriere mich lieber auf die allgemeine Sprache/Funktionen
@Astat: Das Programm zum injecten hab ich schon. Habe die DLL auch schon erfolgreich injectet, aber es passiert wie gesagt nix.
mfg
Astat - Do 31.12.09 15:46
Xeron hat folgendes geschrieben : |
Ok, da danke ich schonmal allen recht herzlich!
Das injecten lass ich lieber erstmal und konzentriere mich lieber auf die allgemeine Sprache/Funktionen
@Astat: Das Programm zum injecten hab ich schon. Habe die DLL auch schon erfolgreich injectet, aber es passiert wie gesagt nix.
mfg |
Wenn der Injection Coder korrekt ist, sollte Deine Dll eine Msg-Box ausgeben.
Beigefügtes Attachment funktioniert unter W2k, XP bis SP3.
Muellermilchtrinker - Fr 26.11.10 20:32
Hallo,
also dieser DLL Injector funktioniert unter Windows XP. Nun will ich das jetzt unter Windows Vista sowie 7 lauffähig haben.
Mein Ziel ist es ein bestimmten Text oben in ein Spiel zu zeichnen. Durch Code Injection soll dies flimmerfrei geschehen.
Vielleicht kann mir jmd. helfen.
Im Grunde ist das ja so, dass ich meine DLL bastel, an die ich meinen Text weiter geben kann und diese zeichnet dann durch CodeInjection in mein Spiel. Ich scheitere aber daran, die DLL zu injection.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!