Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

Handle bzw. Adresse aus GetWindowLong

  Alt 8. Mär 2007, 15:53
Meine erste Frage hier im Forum

---- Problemstellung / Erklärung des Bisherigen ----

Ok. Also es ist nicht wirklich meine Frage. Denn es handlet sich um dieses Problem von KoS: "Zugriff auf Image einer externen Anwendung" (bzw. jetzt: Image/Label). Und ab Post #83 hat sich für mich eine Frage gestellt. ( Wer zum Zugriff auf Labels und Images was sagen will, bitte im anderen Thread )

Die Funktion "GetWindowLong" liefert "$FFFF0141" zurück (Also entweder irgendetwas >4Mrd oder -65215 oder etwas ganz anderes). Soweit ist es auch kein Thema. Ich habe einen RemoteThread in einem anderen Process erstellt und betreibe dort mit GetWindowLong und SetWindowLong Subclassing. Läuft alles prima (auch mit dieser Adresse).

Nur jetzt will ich die VCL dieser Anwendung durchstöbern. (KoS hat die Anwednung mit ResHack durchstöbert: Ist höchstwahrscheinlich Delphi und sieht nach VCL aus). Dazu betreibe ich ein wenig Adressrechnung um mich durch die Klassen und Records zu hangeln. Allerdings benötige ich dazu eine klar definierte Startadresse. Und dazu hat sich in Tests an Beispielprogrammen die WindowProc-Funktion des Windows auf der die Labels/Images sind, empfohlen. In den Beispielprogrammen bekam ich die Adresse auch einfach über GetWindowLong. In dem Zielprogramm allerdings nicht mehr, sondern nur $FFFF0141 und die Adressrechnung funktioniert dann nicht mehr.

---- Vermutungen / Ansätze / Ideen / Mutmaßungen ----

Also abgesehen davon, dass in dem Programm die Adressrechnung, wenn überpaupt, eh anders aussehen kann, habe ich noch folgende Gedanken:

1. Die Adresse kann nicht die WndProc sein, denn an der Stelle stehen in dem Process völlig (für mich) sinnlose Befehle. Siehe dazu Anhang im Post #83 des anderen Threads.
2. Es könnte eine relative Adresse sein. Aber dann: zu was relativ: ImageBase, EntryPoint, ThreadBaseAddress?
3. Es ist gar keine Adresse, sondern ein Handle: GWL_WNDPROC: Retrieves the address of the window procedure, or a handle representing the address of the window procedure (MSDN-Library durchsuchenGetwindowLong). Dabei frage ich mich natrülich, wie bringt man in 32 Bit die Info unter, ob es ein Handle oder eine Adresse ist, wenn doch die Adresse selbst 32 Bit breit ist? Da kann man allerdings argumentieren, dass die WndProc sich nur innerhalb der unteren 2 GB befinden kann (weil darüber ja Windows liegt) und demnach 1 Bit für die Info frei ist. Der Wert aus Getwindowlong ist also 'vorzeichenbehaftet' und negatives Vorzeichen ist ein Handle.

Und daraus folgt meine eigentliche Frage: Was mach ich mit dem Handle, wenn es denn ein Handle ist? Ist es von LocalAlloc/GlobalAlloc? Ich kann leider nix testen, da KoS ja das Programm hat. Deswegen hoffe ich auf jemanden der dasselbe Problem hat/hatte. Suchen ist irgendwie ziemlich nervig, wenn man nur "handle", "address", und "getwindowlong" hat.


Ich danke schonmal für Antworten.


PS: Code ist en masse in dem anderen Thread (wenn gewünscht kann ich auch noch den aktuell relevanten CodeTeil hier posten)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat