Autor |
Beitrag |
Xeron
      
Beiträge: 41
WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
|
Verfasst: Mi 30.12.09 20:40
Hallo, erstmal Wilkommen hier.
Ich stell mich mal ganz kurz vor und dann komm ich ganz schnell zu meiner Frage
Also, ich heiße Markus, komme aus Dresden, bin 16 Jahre alt und Programmiere mit Delphi seit 3 Jahren (selbststudium  )
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
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
Ich hoffe ihr könnt mir helfen
mfg
Markus
|
|
Astat
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: Mi 30.12.09 21:30
Xeron hat folgendes geschrieben : | ...Meines Wissen muss der Code zwischen das begin und end.
Meine Idee:
|
de.wikibooks.org/wik...:_DLL-Programmierung
lg. Astat
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 31.12.09 00:05
|
|
Astat
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: 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
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: 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
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: 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
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: 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
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: 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 
      
Beiträge: 41
WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
|
Verfasst: 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
      
Beiträge: 75
Erhaltene Danke: 1
Windows 2000
D6, D7, D2007, Lazarus
|
Verfasst: 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.
Einloggen, um Attachments anzusehen!
|
|
Muellermilchtrinker
Hält's aus hier
Beiträge: 7
|
Verfasst: 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.
|
|
|