![]() |
DLL Injection & Zugreifen auf Edit
Hey,
ich habe jetzt in eine fremde Anwendung eine DLL injeziert, nun möchte ich gerne das Edit dieser Anwendung auslesen. Nur finde ich weder in hook noch dll tutorials etwas brauchbares. Danke, Robert |
Re: DLL Injection & Zugreifen auf Edit
Ich habe nun schon msdn abgesucht, auch nichts gefunden. Mehr als nen Tutorial wie ich die DLL injecte finde ich nirgends, weiterführende Lektüre is einfach nicht auffindbar.
Keiner ne Idee? Robert |
Re: DLL Injection & Zugreifen auf Edit
Du willst ein Editcontrol auslesen? Schonmal FindWindow probiert?
|
Re: DLL Injection & Zugreifen auf Edit
Schau mal hier:
![]() Ist zwar C++ aber vielleicht hilft das ja weiter. Auf CodeProject habe ich schon öfters Artikel zum Thema "DLL Injection" gefunden. Einfach mal dort die Suche bemühen :) |
Re: DLL Injection & Zugreifen auf Edit
Ich habe gerade das kleine programm winspy + source gefunden.
Nun sieht es für mich so aus als ob eine DLL Injection zum auslesen des Textes garnicht nötig ist, denn Winspy injeziert nur um ein Edit auszulesen was ein Passwort beinhaltet. Nur wird bei winspy das ganze mit der Maus bewerkstelligt - also es gibt da schon so schöne Funktionen die gleich das Handle zum passenden Fenster unter der Maus besorgen. Mein Ziel war es aber das ganze ohne Maus zu machen, sondern nur die Target EXE anzugeben. Da Winspy in C++ geschrieben ist seh ich aber bei dem ganzen nicht so 100% durch, also es besteht immer noch hilfebedarf :cry: |
Re: DLL Injection & Zugreifen auf Edit
|
Re: DLL Injection & Zugreifen auf Edit
Dein Programm zeigt mir an das die Komponente der Classe "Afx:400000:20" ist,
dies ist ja nun kein Edit oder so, kann ich so eine Komponente trotzdem auslesen? Vom aussehen sieht die Komponente aus wie ein Memo. Robert |
Re: DLL Injection & Zugreifen auf Edit
Das kommt drauf an. Wenn es eine Subklasse ("Derivat") von EDIT ist, kannst du es auf gleichem Wege auslesen. Ist ja nicht so, daß WM_GETTEXT (und die entsprechende Funktion) nicht auch für andere Fensterklassen als EDIT funktionieren würde. Die Fensterklasse muß halt nur diese Nachricht unterstützen ...
Nachdem im Sommer 2002 EDA mit Source in der c't war, schossen irgendwie gleichartige Delphitools wie Pilze aus dem Boden ... :gruebel: :mrgreen: ![]() Nachtrag: Aussehen ist nicht immer relevant. Beispielsweise sehen viele der Widgets in Firefox so aus, wie man sie von Windows gewohnt ist, dennoch haben die eine ganz andere Methode zum Zeichnen und die EDITs sind z.B. keine. Wenn das Fenster aber schon direkt ein eigenes Handle hat und du anhand der Umrandung feststellen kannst, daß nur dieses vermeintliche Memo mit dem Klassennamen gemeint ist, hast du gute Chancen. Versuche es also. Folgende beide Funktionen sind aus EDA 2.7
Delphi-Quellcode:
Desweiteren gibt es etwas zu beachten bei Windows 9x/Me wenn man den Klassennamen ermitteln will:
function GetTextFromWndW(hwnd: HWND): WideString;
(* Functionality: This function gets the text associated with the given window. [GENERIC] *) var l: integer; pwc: PWideChar; begin // Get length of text ... could cause buffer overflow if not error checked!!! l := SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0); if l > 0 then begin // Allocate memory l := l + 2; pwc := GetMemory(l * sizeof(pwc^)); if Assigned(pwc) then try // Fill allocated memory with zeroes ZeroMemory(pwc, l * sizeof(pwc^)); // Get text (max len = l-1 characters) SendMessageW(hwnd, WM_GETTEXT, l - 1, Integer(pwc)); { For the problems concerning InternalGetWindowText(), see its declaration! InternalGetWindowText(hwnd, pwc, l); GetWindowText(hwnd, pwc, l) also does not work, because it can only retrieve the text of your own application. Not that of another process! } // Set return value SetString(result, pwc, lstrlenW(pwc)); finally // Free allocated memory FreeMemory(pwc); end; end; end; function GetTextFromWndA(hwnd: HWND): AnsiString; (* Functionality: This function gets the text associated with the given window. [GENERIC] *) var l: integer; pc: PAnsiChar; begin // Get length of text ... could cause buffer overflow if not error checked!!! l := SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0); if l > 0 then begin // Allocate memory l := l + 2; pc := GetMemory(l); if Assigned(pc) then try // Fill allocated memory with zeroes ZeroMemory(pc, l); // Get text (max len = l) SendMessageA(hwnd, WM_GETTEXT, l - 1, Integer(pc)); // Set return value SetString(result, pc, lstrlenA(pc)); finally // Free allocated memory FreeMemory(pc); end; end; end;
Delphi-Quellcode:
function GetClassNameFromWndW(hwnd: HWND): WideString;
(* Functionality: This function fills a string with the classname of the window given as the parameter. [GENERIC] *) var pwc: PWideChar; const maxbufsize = 32767 * sizeof(WideChar); //Win9x does not like buffer size above 32k-1 - I also reported this to MS //after 8 month I got no feedback yet ... I guess this is MS's policy 2002-10-31 begin // Default return value result := emptystring; // Allocate memory pwc := GetMemory(maxbufsize); // If successful ... if Assigned(pwc) then try // Fill with zeroes ZeroMemory(pwc, maxbufsize); // If Window still exists ... if IsWindow(hwnd) then // Get its class name and write it into PC if GetClassnameW(hwnd, pwc, maxbufsize) > 0 then // Copy PC as return value SetString(Result, pwc, lstrlenW(pwc)); finally // Free allocated memory FreeMemory(pwc); end; end; function GetClassNameFromWndA(hwnd: HWND): AnsiString; (* Functionality: This function fills a string with the classname of the window given as the parameter. [GENERIC] *) var pc: PAnsiChar; const maxbufsize = 32767; //Win9x does not like buffer size above 32k-1 - I also reported this to MS //after 8 month I got no feedback yet ... I guess this is MS's policy 2002-10-31 begin // Default return value result := emptystring; // Allocate memory pc := GetMemory(maxbufsize); // If successful ... if Assigned(pc) then try // Fill with zeroes ZeroMemory(pc, maxbufsize); // If Window still exists ... if IsWindow(hwnd) then // Get its class name and write it into PC if GetClassname(hwnd, pc, maxbufsize) > 0 then // Copy PC as return value SetString(Result, pc, lstrlen(pc)); finally // Free allocated memory FreeMemory(pc); end; end; |
Re: DLL Injection & Zugreifen auf Edit
Erstmal danke Olli, der Source hat sehr nützliche Funktionen zum auslesen von Texten.
Nuja, ok. EDA nutzt ja ein Mouse Hook - ich will aber ohne das ich aktiv am pc werden muss den Text eines Edits in einer Anwendung auslesen. Welchen Hook muss ich dafür nehmen? Ich habe da an WH_CALLWNDPROC gedacht. Und wie gehe ich dann weiter vor? Muss ich dann Filtern welche Daten an mein Edit geschickt werden und diese dann auslesen? Irgendwo sehe ich noch nicht den roten Faden beim Thema Hooks. Oder brauch ich garkeinen Hook für meine Anwendung? :gruebel: |
Re: DLL Injection & Zugreifen auf Edit
Zitat:
Wenn du mit der Maus außerhalb des EDA-Fensters auf irgendwas zeigst, läuft das unter Mauscapturing ;) Zitat:
Mit Vista könnte das allerdings schon Geschichte sein ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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