![]() |
Re: Subclassing einer fremden Application, warum funzt das n
Aahhhhhhhhhhhhhhhhh :evil:
Nochmal ... auch wenn das alles hübsch und schön ist, nämlich hübsch doof und schön dämlich ;) ... warum wollt ihr immer mit dem Kopf durch die Wand? Die ganzen tollen API-Hooks laufen nur, wenn man auch entsprechende Privs auf dem System hat. Das Debug-Priv ist meist Minimum. Oder man läßt sich einmalig irgendwelchen Code vom Admin im System implantieren ... aber mal ehrlich: Fensterhooks bieten genau das was stoxx will. Sie ermöglichen es einer DLL im Kontext eines beliebigen Prozesses mit Fenster zu laufen und den Rest (Subclassing) bekommt man noch gratis drauf. Aber vielleicht denke ich auch nur falsch, wenn ein 50-Zeiler das erledigen kann und ich doch einen so schönen 500-Zeiler nehmen könnte ... nehmen wir doch einfach den 500-Zeiler. Vielleicht schaffen wir dann auch die gleiche relative Fehlerquote. Absolut wären das dann immerhin 10mal soviele Fehler. Als Nachtrag: Hagens Idee finde ich noch am charmantesten. Allerdings ist mir nicht bekannt, daß dies auch nur annähernd mit Delphi realisierbar ist. In C sind das nur ein paar kleine Kommandos an den Linker und die Section der PE ist shared ... |
Re: Subclassing einer fremden Application, warum funzt das n
@toms: Also die Sachen von Aphex fand ich schon immer ganz nett, aber dieses "Rootkit" (
![]() Ich kann gar nicht soviel fressen wie ich kotzen möchte ...: Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Subclassing einer fremden Application, warum funzt das n
Zitat:
|
Re: Subclassing einer fremden Application, warum funzt das n
*g* Irrtum ... der Code ist schließlich in den Units enthalten ;)
Aber ich verstehe schon was du meinst ;) so gesehen möchte ich noch auf ![]() BTW: Ich hatte ja garnicht behauptet, daß du es benutzt. Wollte nur auf die Unzulänglichkeiten aufmerksam machen. |
Re: Subclassing einer fremden Application, warum funzt das n
Hi zusammen !
Zitat:
geht denn das nun oder nicht ? wenn ja, wie ? :-) hmmm .. irgendwie seh ich noch nicht so recht den zusammenhang .. |
Re: Subclassing einer fremden Application, warum funzt das n
Also stoxx ... wie oben schon erwähnt. Warum willst du mit dem Kopf durch die Wand?
Du hast bereits einen Hook. Jetzt darf dieser Hook nur nicht mehr Filtern, sondern muß eben nur durchlassen. Als nächstes schreibst du die Subclassing-Routine und fügst die in den Prozess ein, in dem sie sein soll. Voila, es ist angerichtet. |
Re: Subclassing einer fremden Application, warum funzt das n
Hallo zusammen,
also mir gefällt die Idee mit dem injecten einer DLL recht gut. Vielen Dank nochmal an alle ! @Assa .. das mit dem Hook gefällt mir irgendwie nicht, wäre ja dann doppelt gemoppelt. Einmal gehen alle Messages durch den Hook und zum zweiten mal in der eigenen neuen Wndproc. Jetzt aber nochmal konkrekt die Frage. Ich möchte zwei fremde Applicationen subclassen. Ich habe jetzt eine DLL (in meinem Programmverzeichnis) In diese wird die neue wndprog mit setWindowLong umgeleitet Dann Injecte ich sie den zwei Prozessen. Ist die vorgehensweise richtig ? Aber wie kann ich die beiden "Daten" der zweimal geladenen Dll unterschieden jetzt ? Habe noch keine konkrete vorstellung von dem ganzen. |
Re: Subclassing einer fremden Application, warum funzt das n
Zitat:
Also, man würde in das MMF eine Datenstruktur ablegen wie
Delphi-Quellcode:
Nun wird das MMF erzeugt und obige Datenstruktur an erster Position initialisiert. Dahinter steht der Code der nur auf diese PHookData zugreift.
type
PHookData = ^THookData; THookData = packed record AssemblerHook: array[] of Byte; LoadLibrary: function(FileName: PChar): hModule; stdcall; GetProcAddress: function(Lib: hModule; Name: PChar): Pointer; stdcall; Name: array[0..MAX_PATH -1] of Char; OtherData: Integer; .. usw. usw. // Code: array[0..0] of Byte; end; Der Code könnte so aussehen:
Delphi-Quellcode:
In den ersten Bytes von HookData steht dynamischer Code
function MyWndProc(..., HookData: PHookData): Integer; stdcall;
var Module: hModule; begin Lib := HookData.LoadLibrary(HookData.Name); ... HookData.FreeLibrary(Lib); end;
Delphi-Quellcode:
D.h. im MMF steht als erstes eine HookData Struktur, danach unser PASCAL Code.
asm
POP ECX // hole Return Address CALL @@1 // ermittle HookData Address @@1: POP EAX // EAX = @@@1 SUB EAX,3 // EAX = @POP ECX = HookData PUSH EAX // erster Param unserer WindowProc PUSH ECX // return address ADD EAX,SizeOf THookData // Sprung zu WindowProc(HookData, ....) JMP EAX end; Wir initialisieren das MMF, setzten AssemblerHook auf obigen Assembler, initialisieren die Importe und kopieren unseren PASCAL Code an Code. Danach ist die Adresse des MMFs die Adresse unserer neuen WindowProc(). Gruß Hagen |
Re: Subclassing einer fremden Application, warum funzt das n
Übrigens, diese Technik kann in jeden beliebigen Prozess Code injezieren. D.h. das MMF kann auch dem Ziel-Prozess zugeordnet werden, oder besser noch einfach nur global für alle Prozesse gültig sein.
Nimmt man nun die Remote Thread funktionen und setzt deren Thread funktion auf eine so wie oben erzeugt "Funktion" dann könnte diese Funktion das Fenster subclassen IM Zielprozess. Somit wäre es nicht nötig eine Debug/Hook DLL zu injezieren. Gruß Hagen |
Re: Subclassing einer fremden Application, warum funzt das n
@Hagen: Ali G. wuerde sagen RESTECP ;)
IMO eine sehr elegante Methode. Ich dachte urspruenglich, du woelltest eine Shared Section in der PE erzeugen, was bekanntlich auch moeglich ist. Nur eben nicht in Delphi. Stell das doch bitte mal in die Codelib @stoxx: Nimm Hagens Methode. Eleganter als ein Hook ist sie allemal (zumindest auf der NT-Plattform). Allerdings ist Fenster-Hooking als Methode zum Injezieren von DLLs in fremde Prozesse durchaus anerkannt. Also keinerlei Grund dies abzulehnen. Gruss, Oliver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz