Autor Beitrag
Xeron
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
BeitragVerfasst: 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 :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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Mi 30.12.09 21:30 
user profile iconXeron hat folgendes geschrieben Zum zitierten Posting springen:
...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



BeitragVerfasst: Do 31.12.09 00:05 
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Do 31.12.09 01:27 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
assarbad.net/en/stuf...orials/dll_tutorial/


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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Do 31.12.09 03:12 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Do 31.12.09 03:56 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

WinXP Home, Vista Home Premium 64Bit, Win7 Home Premium
Delphi 3 Prof, Delphi 7 Personal, Delphi 2010 Prof., AutoIt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Do 31.12.09 15:46 
user profile iconXeron hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: 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.