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 Hook auslösen! (https://www.delphipraxis.net/14448-hook-ausloesen.html)

SleepyMaster 9. Jan 2004 15:35


Hook auslösen!
 
Hi ihrs!

Kennt jemand ne lösung um ein Programm (das kein Fensterhandel hat) z.b.: services.exe dazu zubringen ein Hook-event von einem bereits laufenem Hook für IRGENDEINE Hook-Art auszulösen???

Als z.B.: services.exe dazu zu bringen einen Tastendruck/eine Mausbewegung zu simulieren oder was auch immer!

Delphi-Quellcode:
{
WH_CALLWNDPROC
WH_CALLWNDPROCRET
WH_CBT
WH_DEBUG
WH_FOREGROUNDIDLE
WH_GETMESSAGE
WH_JOURNALPLAYBACK
WH_JOURNALRECORD
WH_KEYBOARD
WH_KEYBOARD_LL
WH_MOUSE
WH_MOUSE_LL [NT]
WH_MSGFILTER
WH_SYSMSGFILTER
WH_SHELL
}
Vielen Dank schon mal!

Assarbad 9. Jan 2004 16:06

Re: Hook auslösen!
 
Häh? Hook auslösen? Man kann Hooks nicht auslösen. Hooks sind (simplifiziert) Callbacks die vom System Rückmeldungen über bestimmte Ereignisse bekommen. Es bleibt also eigentlich nur mal wieder die Grundlagenfrage: Was willst du denn machen/erreichen?

SleepyMaster 9. Jan 2004 16:16

Re: Hook auslösen!
 
Ich will einfach nur erreichen das ein Prozess einen von mir gestarteten Hook "auslöst".
Warum ich das machen will will ich hier nicht sagen ;)

@Assarbad
Du wirst schon wissen warum!

Assarbad 9. Jan 2004 16:20

Re: Hook auslösen!
 
Wie gesagt, Hooks arbeiten passiv, nicht aktiv. Da mußt du schon was anderes benutzen um Code in die services.exe zu injezieren. Wie wäre es mit einer DLL? Oder eben WriteProcessMemory() oder ne MMF.

SleepyMaster 9. Jan 2004 16:27

Re: Hook auslösen!
 
Was bedeutet das sie aktiv und nicht passiv arbeiten?
Kannst du mir das bitte mal kurz erklären? :angle:

Luckie 9. Jan 2004 16:35

Re: Hook auslösen!
 
Zitat:

Zitat von SleepyMaster
Was bedeutet das sie aktiv und nicht passiv arbeiten?

Umgekehrt. Passiv heißt, sie reagieren nur auf Ereignisse, Nachrichten, können aber selbst keine auslösen.

Assarbad 9. Jan 2004 16:37

Re: Hook auslösen!
 
Das ist wie die durchaus übliche Frage: "Wie kann ich einen Tastendruck mit einem Hook simulieren" -> GEHT NICHT

SleepyMaster 9. Jan 2004 16:43

Re: Hook auslösen!
 
Sorry, aber die Nachricht muss auch nicht von dem Hook ausgelöst werden!

Wegen mir kann auch eine exe "Services.exe" dazu bringen einen Hook auszuführen!
(und es ist auch egal welchen von den vielen)

Assarbad 9. Jan 2004 16:53

Re: Hook auslösen!
 
Ja, der Witz dran ist bloß, daß du offensichtlich was in die services.exe injezieren willst.

Außerdem werden Nachrichten schließlich auch von der services.exe nur empfangen und dein Hook bekommt ebenfalls ne Benachrichtigung. Damit wärst du schon in der services.exe. Leider hat die services.exe aber kein Fenster ... und die Hooks heißen nicht umsonst FENSTER-Hooks. Willst du also in der services.exe ein Fenster aufmachen, mußt du bereits Code injezieren. Aus diesem Grunde wäre der Hook wieder sinnlos, weil du dann ja wie gesagt schon Code injeziert hättest.

SleepyMaster 9. Jan 2004 17:02

Re: Hook auslösen!
 
Zitat:

Ja, der Witz dran ist bloß, daß du offensichtlich was in die services.exe injezieren willst.
In welches Programm ist mir egal ;) es soll halt nur eins ohne Fenster sein (Da das mit Fenstern schon geht)
(Wobei services.exe aber trozdem das wohl mit perfekteste Ziel wäre)

Nur wenn alle Hookarten auf Fentsermessages basieren, dann kann ich es so leider vergessen!

Vielen Dank trozdem

Assarbad 9. Jan 2004 17:17

Re: Hook auslösen!
 
Was willst du denn exakt machen? Code in services.exe injezieren oder an SYSTEM-Rechte kommen?

SirThornberry 9. Jan 2004 17:17

Re: Hook auslösen!
 
schau dir mal
Delphi-Quellcode:
AllocateHWnd
vielleicht hilft dir das ja weiter

Assarbad 9. Jan 2004 17:22

Re: Hook auslösen!
 
Oh, ne neue Funktion, wo ist die Dokumentation dazu? Ist das eine VCL-Methode?

Nachteil, der Code muß dennoch VORHER in die services.exe! Grade um dort reinzukommen will er aber den Hook. Also beißt sich die Schlange selbst in den Schwanz ;)

SirThornberry 9. Jan 2004 17:31

Re: Hook auslösen!
 
keine ahnung ob vcl, ist in der unit classes und in der hilfe steht unter anderem dazu
Delphi-Quellcode:
Call AllocateHWnd to create a window that is not associated with a windowed control. Typically, this method is used to create non-visual windows that respond to messages but that do not appear in the user interface. For example, the TTimer component uses this method to create a window that responds to timer messages from Windows.
also siehts eher nach non-vcl aus..

Und die dll in die services.exe zu bekommen dürfte doch ni das problem sein, oda???

SleepyMaster 9. Jan 2004 19:43

Re: Hook auslösen!
 
Ich will Code in die services.exe injezieren.
(An Systemrechte kommt man auch einfacher ran)

SleepyMaster 9. Jan 2004 19:44

Re: Hook auslösen!
 
@SirThornberry
Zitat:

Und die dll in die services.exe zu bekommen dürfte doch ni das problem sein, oda???
Und wie??? :roll:

Assarbad 14. Feb 2004 19:17

Re: Hook auslösen!
 
Das hatten wir doch schon, man kann keinen Hook auslösen. Ein Hook wird vom System aufgerufen um ein Ereignis zu signalisieren. Der Hook kann maximal das Ereignis unterdrücken indem er es nicht weiterreicht. Aber erzeugen kann er kein Ereignis!

Es gibt verschiedene API-Hooking-Technologien. Da aber die services.exe zur TCB gehört, wirst du von mir kein Rezept dafür bekommen. Such halt nach APIHooks von EliCZ oder auf Microsofts-Reserch Seite, Titel fällt mir grad nicht ein.

SleepyMaster 14. Feb 2004 22:09

Re: Hook auslösen!
 
Zitat:

man kann keinen Hook auslösen.
Und was ist wenn ich
Delphi-Quellcode:
  Keybd_event(Byte('M'), 0, 0, 0);
  Keybd_event(Byte('M'), 0, KEYEVENTF_KEYUP, 0);
verwende???

Der Hook (Tastaturhoom) wird dann von dem Prozess, der zu dem das Fenster gehört, dass im Vordergrund liegt "ausgelöst" (Das Fenster erhält ja auch die Tastatureingabe).


Zu den API Hooks: blicke da nicht ganz durch, ABER prinzipiell müssen die ganzen API-Funktionen ja auch in einer dll stehen. Kann man die nicht durch eine selbstgeschriebene austauschen, die dann erst meinen Code ausführt und dann den der Original Function in der original DLL??? (So ähnlich wie wenn man nur einen Teil der MS-Gina neuschreiben will)

Funktionieren die so??? Wenn nein: Wie dann???


Kleine Nebenfrage: Was ist TCB

Assarbad 14. Feb 2004 22:48

Re: Hook auslösen!
 
Zitat:

Zitat von SleepyMaster
Der Hook (Tastaturhoom) wird dann von dem Prozess, der zu dem das Fenster gehört, dass im Vordergrund liegt "ausgelöst" (Das Fenster erhält ja auch die Tastatureingabe).

Klar, aber wie bekommst du ein Fenster im Kontext von services.exe?

Zitat:

Zitat von SleepyMaster
Zu den API Hooks: blicke da nicht ganz durch, ABER prinzipiell müssen die ganzen API-Funktionen ja auch in einer dll stehen. Kann man die nicht durch eine selbstgeschriebene austauschen, die dann erst meinen Code ausführt und dann den der Original Function in der original DLL??? (So ähnlich wie wenn man nur einen Teil der MS-Gina neuschreiben will)

Trojaner-DLLs funzen nur, wenn du alle exportieren Funktionen des Orginals kennst!

Zitat:

Zitat von SleepyMaster
Kleine Nebenfrage: Was ist TCB

Trusted Computing Base. Das System ...

SleepyMaster 15. Feb 2004 08:21

Re: Hook auslösen!
 
Ich dachte, nur dass villeicht eine andere Hookart auch ohne Fenster "ausgelöst" werden kann.

Code:
WH_CALLWNDPROC
WH_CALLWNDPROCRET
WH_CBT
WH_DEBUG
WH_FOREGROUNDIDLE
WH_GETMESSAGE
WH_JOURNALPLAYBACK
WH_JOURNALRECORD
WH_KEYBOARD
WH_KEYBOARD_LL
WH_MOUSE
WH_MOUSE_LL [NT]
WH_MSGFILTER
WH_SYSMSGFILTER
WH_SHELL
Aber irgendwie wäre es unlogisch, da dass WH ja für Window-Hook steht (oder nicht?).

Zitat:

Trojaner-DLLs funzen nur, wenn du alle exportieren Funktionen des Orginals kennst!
Das wäre ja nicht das Problem

Ich werde mal ein bisschen weiterprobieren.

Bis dahin: Vielen Dank

Assarbad 15. Feb 2004 09:55

Re: Hook auslösen!
 
Zitat:

Zitat von SleepyMaster
Aber irgendwie wäre es unlogisch, da dass WH ja für Window-Hook steht (oder nicht?).

Eben ;)

Zitat:

Zitat von SleepyMaster
Das wäre ja nicht das Problem

Oho, da biste aber ziemlich zuversichtlich. Viel Spaß beispielsweise mit der Kernel32.dll o.ä.

Eigentlich willst du doch bloß einen Prozeß im SYSTEM-Kontext ausführen, oder? Warum dann nicht einfach eine normale Methode verwenden? Es gibt immer die Rechte-Hürde, die du ohne Recht oder Exploit nicht überspringen kannst.

negaH 15. Feb 2004 10:44

Re: Hook auslösen!
 
Hooks können nur in Prozesse injeziert werden die über einen Messagequeue verfügen. Nachdem ein globaler Hook installiert wurde, wird er nicht sofort in alle Prozesse installiert. Man kann mit PostMessage(hWnd_Broadcast, wm_Null, 0, 0); nun erzwingen das jeder Messagequeue aktiv werden muß. D.h. man sollte obige PostMessage() nach dem Aufruf SetWindowsHookEx() durchführen damit alle betroffenen Prozesse die Hook-DLL laden und somit aktiv werden. Wird dies nicht gemacht kann es durchaus vorkommen das ein Prozess lange Zeit keienrlei Messages bearbeitet, und somit unsichtbar für den globalen Hook ist.

Allerdings, Hooken auf diesem Wege funktioniert nur mit Prozessen die einen Messagequeue besitzen, und Services.exe hat keinen Messagequeue. Dies stellt nämlich ein Sicherheitsrisiko dar.

Gruß Hagen

Assarbad 15. Feb 2004 15:47

Re: Hook auslösen!
 
@Hagen: Korrekt, bis auf die Tatsache, daß zumindest Kindprozesse von services.exe durchaus Messagequeues haben. Ich sage nur Norton oder McAfee AV-Produkte. Das wurde ja bei der Shatter Attack so vom Entdecker bemängelt.

negaH 15. Feb 2004 22:01

Re: Hook auslösen!
 
Kindprozesse eine Prozesses ohne Messagequeue sind nicht abhänig von Services.exe. D.h. es liegt in der Entscheidung des Entwicklers eines Dienstes ob er diesen mit oder ohne GUI codet. Man sollte natürlich Dienste immer ohne GUI entwickeln. Schon seltsam das AV Programme die Sicherheit ins System bringen sollen, solche anerkannt unsicheren Techniken benutzen.

Gruß Hagen

Assarbad 15. Feb 2004 23:44

Re: Hook auslösen!
 
Ja ja, das mit den Queues ist mir schon klar. Aber ich glaube mal, daß es hier nicht um die services.exe sondern um die Erlangung des SYSTEM-Kontext geht.

SleepyMaster 16. Feb 2004 14:27

Re: Hook auslösen!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein! Ich will wie gesagt nur Code in ein Programm ohne Messagequeue injecieren. Muss auch nicht services.exe sein, halt nur ein Programm ohne Messagequeue. Mir geht es nicht um die Systemrechte.

Zitat:

Oho, da biste aber ziemlich zuversichtlich. Viel Spaß beispielsweise mit der Kernel32.dll o.ä.
siehe Anhang
(Ich weiß zwar die ganzen Parameter nicht, aber soweit ich weiß darf man nur nichts am Stack verändern [oder man kopiert ihn bevor man damit arbeitet+ hinterher wieder zurückkopieren], damit die übergebenen Werte auch dann richtig an die original DLL weitergegeben werden)

P.S.:Hat jemand villeicht ein bisschen Beispiel Code für API-Hooking???

Assarbad 16. Feb 2004 17:00

Re: Hook auslösen!
 
Soso ... und das schreibst du dann für jede einzelne Windows-Version. Wußte garnicht, daß Delphi sowas wie Naked beherrscht. Und selbst da müßtest du noch ne eigene Jumptable bauen. Abgesehen von der WFP die dir dann ins Vorhaben spuckt.

Such mal nach Bei Google suchenDetours

SleepyMaster 16. Feb 2004 18:06

Re: Hook auslösen!
 
Wenn man die DLL in Assembler schreibt, söllte man das Problem normal doch nicht haben oder???

Was ist WFP???

Zu DETOURS: Hab nur C++-Quellcodes gefunden, kann aber leider kein C/C++

Assarbad 16. Feb 2004 19:01

Re: Hook auslösen!
 
Zitat:

Zitat von SleepyMaster
Wenn man die DLL in Assembler schreibt, söllte man das Problem normal doch nicht haben oder???

Wenn man eine Jumptable zur echten kernel32.dll hinbekommt, die früh genug geladen wird.

Zitat:

Zitat von SleepyMaster
Was ist WFP???

Windows File Protection

Zitat:

Zitat von SleepyMaster
Zu DETOURS: Hab nur C++-Quellcodes gefunden, kann aber leider kein C/C++

Not my job. Es gibt auch Delphi-Beispiele zum Thema ... -> Google


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 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