Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ALLE möglichkeiten über aus Prog. ein Prog. zu starten (https://www.delphipraxis.net/37881-alle-moeglichkeiten-ueber-aus-prog-ein-prog-zu-starten.html)

SleepyMaster 11. Jan 2005 17:22


ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Hi ihrs

ich suche wirklich alle Möglichkeiten, wie ein Programm ein Programm ein neues Programm starten kann...
  • CreateProcess
  • WinExec
  • Shellexecute

Kennt ihr noch weitere Möglichkeiten?
Oder gibt es vielleicht auch die Möglichkeit CreateProcess oder so "nachzubauen"?

Gruß SleepyMaster

arbu man 11. Jan 2005 17:52

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
In D3 gibt es noch
Delphi-Quellcode:
executefile({Datei},'',inttostr(sw_show),1)

SleepyMaster 11. Jan 2005 17:55

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
welche API-Funktion ruft das denn auf?

toms 11. Jan 2005 21:14

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Zitat:

Zitat von SleepyMaster
  • CreateProcess
  • WinExec
  • Shellexecute


ShellExecuteEx
ShellExecuteExW
ShellExecuteExA
CreateProcessA
CreateProcessW

Luckie 11. Jan 2005 23:28

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
CreateProcessAsUser (Aber nur Dienste)
CreateProcessWithLogonW (Nur ab 2000)

toms 12. Jan 2005 08:05

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
...und dann noch
CreateProcessAsUserW
CreateProcessAsUserA
SHCreateProcessAsUserW (nicht unter XP)
CreateProcessWithTokenW

dann hätten wir also:
  • WinExec (Diese Funktion gibt's nur noch aus Kompatibilitätsgründen zum 16-bit Windows)
  • CreateProcess
  • CreateProcessA(ANSI)
  • CreateProcessW (Unicode)
  • Shellexecute
  • ShellExecuteExA (ANSI)
  • ShellExecuteExW (Unicode)

  • CreateProcessAsUser
  • CreateProcessAsUserA (ANSI)
  • CreateProcessAsUserW (Unicode)
  • CreateProcessWithLogonW (Benötigt Windows XP or Windows 2000 Professional)
  • CreateProcessWithTokenW (Benötigt Windows Server 2003)

SleepyMaster 12. Jan 2005 19:56

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
ok... immer weiter so... :thumb:
Vielen Dank :love:

am interesanntesten fände ich es noch, ob es irgendwie Funktionen gibt, mit denen es Möglich ist, CreateProcess nachzubauen...

Luckie 13. Jan 2005 15:38

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Was hast du eigentlich vor?

NicoDE 13. Jan 2005 15:49

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
NtCreateProcess
ZwCreateProcess
PsCreateSystemProcess

Zitat:

Zitat von SleepyMaster
am interesanntesten fände ich es noch, ob es irgendwie Funktionen gibt, mit denen es Möglich ist, CreateProcess nachzubauen...

Jein, ein Prozess muss beim Subsystem (CSRSS) angemeldet werden (und das ist a) undokumentiert und b) nicht so einfach :)).

SleepyMaster 13. Jan 2005 21:06

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Hmm... ich werd's trozdem mal versuchen...
(hab im Moment ziemlich Stress in der Schule 6 Arbeiten diese Woche und ein größeres Projekt ist morgen abzugeben)

vielen Dank für die Info...

was ich vorhab?
Soll ein kleines Security-Tool werden... ich brauch jedoch die volle Kontrolle über jedes Programm und will verhindern, dass es das mein Security Programm manipuliert. Dazu injeciere ich bei dem Start von Windows Code in die Winlogon.exe und Hooke unter anderem alle funktionen die irgendwie einen anderen Process starten können. Sobald also Winlogon.exe ein neuen Prozess starten will, wird mein Programm informiert und sorgt dafür, dass der in die Winlogon.exe injezierte Code auch in den neuen Prozess injeziert wird und falls der wieder einen neuen Prozess erzeugt auch in diesen wieder der Code injeziert wird usw...
Jedoch muss ich verhindern, dass in der Zeit zwischen dem erstellen des Processes und dem ijezieren und dem ausführen des Codes in dem Prozess, der Prozess nicht die Möglichkeit hat dies zu verhindern oder etwas am System zu manipulieren :zwinker: - hab jedoch grade festgestellt, dass dies ganz einfach mit CREATE_SUSPENDED zu erreichen ist.

Falls euch noch weitere "LowLevel" undokomentierte Windows Funktionen einfallen bitte melden :mrgreen:

Luckie 13. Jan 2005 21:27

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Zitat:

Zitat von SleepyMaster
Dazu injeciere ich bei dem Start von Windows Code in die Winlogon.exe und Hooke unter anderem alle funktionen die irgendwie einen anderen Process starten können. Sobald also Winlogon.exe ein neuen Prozess starten will, wird mein Programm informiert und sorgt dafür, dass der in die Winlogon.exe injezierte Code auch in den neuen Prozess injeziert wird und falls der wieder einen neuen Prozess erzeugt auch in diesen wieder der Code injeziert wird usw...

Wie willst du das machen? Ein einfacher Shell-Hook auf die genannten API Funktionen sollte eigentlich reichen.

SleepyMaster 13. Jan 2005 21:42

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Shell-Hook? Wie mach ich die denn?

Wie funktionieren die?

Luckie 14. Jan 2005 00:38

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Hier gibt es einen von toms: http://www.luckie-online.de/Delphi/Importe/toms/

SleepyMaster 14. Jan 2005 11:28

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Hmmm... soweit ich sehe nutzt er nur einen Windows-Hook dazu, um Code in jedes Programm das Window-Messages empfangen kann zu bekommen. Dieser Code Hookt dann erst die API-Funktionen.
Das Problem bei dieser Methode ist jedoch, dass in alle Programme die Window-Messages nicht empfangen können auch die API-Hooks nicht reininjeziert werden. :roll:

Aber trozdem ganz netter Code... interessante Idee...

Edit: Die GetMsgProc söllte (glaub ich mal) eigendlich so aussehen:
Delphi-Quellcode:
function GetMsgProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
begin
  Result := CallNextHookEx(HookHandle, code, wparam, lparam);
end;

SleepyMaster 14. Jan 2005 16:52

Re: ALLE möglichkeiten über aus Prog. ein Prog. zu starten
 
Noch mal eine Frage: Wenn ich PspCreateProcess hooke müsste das doch eigendlich genügen, da doch wirklich ALLE Funktionen die irgendwie einen Prozess erstellen können, auf PspCreateProcess zurückgreifen. Oder seh ich das falsch?
Und wie sieht das aus mit kompatibilität? NicoDE hat in einem anderen Thread gewarnt LowLevel funktionen zu nutzen, wenn man Kompatibilität zu älteren/neueren Betriebssystemen haben will.
Was würdet ihr machen?
Wenn ich jetzt nämlich CreateProcessAsUserA/W + CreateProcessA/W + CreateProcessWithLogonA/W + CreateProcessWithTokenA/W + WinExec hooke und es dann noch eine andere Funktion gibt, die nicht indirekt auf eine dieser Funktionen zugreift, dann hat mein Programm seinen Sinn verfehlt :cry: ...
Außerdem noch die Frage: Wie sieht das mit Diensten aus? Mit welcher Funktion werden die gestartet? Und greift diese Funktion auf eine der oben genannten zurück?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz