Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Subclassing einer fremden Application, warum funzt das net ? (https://www.delphipraxis.net/11550-subclassing-einer-fremden-application-warum-funzt-das-net.html)

Motzi 9. Nov 2003 13:38

Re: Subclassing einer fremden Application, warum funzt das n
 
Du kannst auf die WndProc von Fenstern aus anderen Prozessen von deinem Prozessraum aus nicht zugreifen (nicht einmal lesen)! Aber selbst wenn du sie ändern könntest würde dir das nicht viel bringen, da deine neue WndProc in dem Adressraum deines Progs liegt, aber die Adresse deiner WndProc im Adressraum des anderen Prozesses nicht gültig ist! -> du musst den Code irgendwie in den anderen Adressraum bekommen - Stichwort: Inject-Dlls - ist aber ein recht heikles und kompliziertes Thema!

stoxx 9. Nov 2003 13:40

Re: Subclassing einer fremden Application, warum funzt das n
 
[quote="Chewie"]IM PSDK klingt es so, als würde es unter Win9x gehen:

Zitat:

Zitat von PSDK
GWL_WNDPROC
Sets a new address for the window procedure.

Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.

Für mich bedeutet das, dass das Subclassen fremder Fenster bei NTff nicht geht, wohl aber bei Win9x.

Hallo Chewie,

Du könntest Recht haben.

denn der Aufruf

OldWinProc := SetWindowLong(hWnd,GWL_WNDPROC,integer(@NewWinProc ));

liefert schon Null zurück.

ob man die Prozesse mit AttachThreadInput irgndwie verbinden kann ?

stoxx 9. Nov 2003 13:43

Re: Subclassing einer fremden Application, warum funzt das n
 
Zitat:

Geht schon, du musst aber Deinen Code (also zumindest die neue WndProc) in den Addressraum Deiner Zielanwendung injizieren.

hihi .. ich glaub das übersteigt im Moment meine Kenntnisse ..
hast Du sowas schonmal gemacht ? .. oder war das nur eine Idee wie es gehen könnte und Du das nur irgendwo gehört hast ?

Luckie 9. Nov 2003 13:47

Re: Subclassing einer fremden Application, warum funzt das n
 
http://www.luckie-online.de/tutorials/assarbad/
Das Hook-Tutorial, da geht es auch um IPC und Inject DLL's.

negaH 9. Nov 2003 14:06

Re: Subclassing einer fremden Application, warum funzt das n
 
Es müsste auch über shared Speicher funktionieren. Man alloziert also einen Speicherbereich oberhalb $80000000, also mit CreateFileMapping(). Dann kopiert man seinen Fensterprocedure code da rein. Und arbeitet mit SetWindowLong(). Ob nun NT abbrüft ob SetWindowLong() die entsprechenden Privilegien benötigt weis ich aber nicht.

Gruß Hagen

Chewie 9. Nov 2003 14:19

Re: Subclassing einer fremden Application, warum funzt das n
 
Zitat:

Zitat von negaH
Ob nun NT abbrüft ob SetWindowLong() die entsprechenden Privilegien benötigt weis ich aber nicht.

Meiner Ansicht nach, ja:
Zitat:

Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.
Es geht also (zunächst) gar nicht darum, ob der fremde Prozess jetzt auf die neue WndProc zugreifen kann oder nicht, sondern darum, ob man das Attribut "Fensterprozedur" eines Fenster ändern kann - und laut dieser Aussage darf man das nicht.

Bleibt halt: Aufruf von SetWindowLong via DLL-Inject in dem fremden Prozess rein und die WndProc in eine MMF auslagern, damit beide Prozesse Zugriff drauf haben.

jbg 9. Nov 2003 14:25

Re: Subclassing einer fremden Application, warum funzt das n
 
Zitat:

Zitat von negaH
Man alloziert also einen Speicherbereich oberhalb $80000000, also mit CreateFileMapping(). Dann kopiert man seinen Fensterprocedure code da rein.

Klingt einfach. Es fehlt aber eine entscheidende Kleinigkeit: Wo kommt die Delphi RTL her, die von der injezierten WndProc aufgerufen wird?

Eine gute Lektüre zu dem Thema gibt es hier

stoxx 9. Nov 2003 14:30

Re: Subclassing einer fremden Application, warum funzt das n
 
Hallo halli, dies ist ein ernsthaftes Sicherheitsloch. Ich bin zwar nicht stoxx, aber ist ja auch egal ;) ... er hat mich gebeten hier mal zu antworten und offensichtlich den Link inklusive der SessionID reinkopiert. Jetzt schreibe ich als er. Und jetzt ratet mal wer ich bin ;)

Wärbunk: http://assarbad.info

Vielleicht solltet ihr (i.e. Daniel und Gerome) das nochmal überprüfen ;)

Bis zur Antwort aus meinem Kontext verbleibe ich ... Assa

Assarbad 9. Nov 2003 14:36

Re: Subclassing einer fremden Application, warum funzt das n
 
Jaja, "cannot change" ist uns als DLL ja pupegal, da wir ja zu JEDEM Prozess gehören in dem wir laufen. Außerdem wissen wir schonmal, daß der Zielprozeß ein Fenster besitzt. Wie bringen wie also unsere DLL in den fremden Prozeß? Na? Dreimal dürft ihr raten!

Ein Fensterhook, na klar ... und schwupp ist unsere DLL in jeder Anwendung drin die ein Fenster hat.

Naja und der Rest ist bekanntlich Formsache. Also, nicht rumlamentieren ... weitermachen ;) *g*

@stoxx, nix für ungut. Sorry für das schreiben in deinem Kontext. Das ging offensichtlich, weil du mir einen Link inklusive aktiver SessionID geschickt hast. Habe die Mods bereits unterrichtet.

Zusammengefaßt: Hagen schlug vor, die Fensterproc in den Bereich zu legen, in dem auch MMFs liegen.
@Hagen: Deine Idee ist tatsächlich nicht so abwegig. Aber wie bringst du das dem Delphi-Linker bei?

@jbg: Mit dem Zeugs von madshi wäre ich vorsichtig ... :-/ ... zumindest vor einiger Zeit funktionierte das nicht so, daß ich es in einem Programm in einer Produktivumgebung nutzen würde!

toms 9. Nov 2003 14:45

Re: Subclassing einer fremden Application, warum funzt das n
 
Hier mal ein paar Links um eine DLL zu injecten:

Inject DLL by Aphex (works under 95/98/NT/2K/XP) + Beispiel 1, Beispiel 2

Inject DLL using Madshi components by Kaiser

Elirt 1.01
(VirtualAllocEx, VirtualFreeExe, OpenThread and CreateRemoteThread for Windows 95,98,ME,NT,2000,XP,2003)

Inject DLL by Rezmond


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Seite 2 von 7     12 34     Letzte »    

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