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 für Windows 7 64 Bit? (https://www.delphipraxis.net/150705-hook-fuer-windows-7-64-bit.html)

Yakumo500 24. Apr 2010 14:04


Hook für Windows 7 64 Bit?
 
Hallo,
Ich habe mich mal an das Thema Hooks rangewagt und bin auf uallHook.pas gestoßen.
Leider musste ich feststellen, dass die Beispiele nur unter Windows XP 32 Bit laufen aber nicht unter Windows 7 64 Bit.
Jetzt habe ich hier gelesen, dass ich einen extra Hook für 64 Bit Systeme schreiben muss in Lazarus.
Leider lässt sich uallHook nicht unter Lazarus kompilieren.
Wie kann ich trotzdem einen Hook schreiben, der sowohl auf 32 wie auf 64 Bit Systemen funktioniert?

himitsu 24. Apr 2010 14:43

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Leider lässt sich uallHook nicht unter Lazarus kompilieren.
Ich glaube uall wurde nur für Delphi entwickelt,
aber wenn du nicht verrätst was da nun nicht geht, können wir auch nichts machen.

Zitat:

Zitat von Yakumo500
Wie kann ich trotzdem einen Hook schreiben, der sowohl auf 32 wie auf 64 Bit Systemen funktioniert?

Garnicht.

Denn um einen 32-Bit-Prozess zu hooken brauchst du einen 32-Bit-Hook
und um einen 64-Bit-Prozess zu hooken brauchst du einen 64-Bit-Hook.
Und man kann eine Anwendung/DLL nunmal nur für 32 oder 64 Bit compilieren.

Yakumo500 24. Apr 2010 17:42

Re: Hook für Windows 7 64 Bit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe jetzt doch versucht uallHook wenigstens in Lazarus kompilierbar zu machen. In dem angehängten Archiv unter dem Pfad uallTest\Test.dll\ sind jetzt die "übersetzten" Dateien (Achtung viele Warnungen beim kompilieren unter Lazarus).

Außerdem bekomme ich beim kompilieren der DLL in Lazarus einen Fehler: DLLProc ist nicht definiert.

Yakumo500 25. Apr 2010 19:10

Re: Hook für Windows 7 64 Bit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab mich jetzt den ganzen Sonntag dran gesetzt und eine Lösung gefunden:
Mit dem angehängten Code kann man unter Lazarus eine DLL erstellen, die durch Delphi gehookt werden kann.
Folglich sollte es möglich sein eine 64 Bit DLL in Lazarus zu erstellen und mit Delphi in ein 64 Bit System zu hooken.
Leider hab ich es noch nicht unter einem 64 Bit System ausprobiert. Ein Beispiel mit einer MessageBox liegt bei.

Delphi-Laie 25. Apr 2010 19:46

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
Also ich hab mich jetzt den ganzen Sonntag dran gesetzt und eine Lösung gefunden:
Mit dem angehängten Code kann man unter Lazarus eine DLL erstellen, die durch Delphi gehookt werden kann.
Folglich sollte es möglich sein eine 64 Bit DLL in Lazarus zu erstellen und mit Delphi in ein 64 Bit System zu hooken.

Meine Erfahrungen dazu:

1. Mit Delphi lassen sich doch derzeit nur 32-Bit-Programme erzeugen?! Also, mit einem 32-Bit-Hostprogramm funktioniert der Aufruf eines Hooks einer mit Lazarus erstellten 64-Bit-DLL nicht. Sofern ich mich recht entsinne, gab es sogar die Fehlermeldung, daß der Einsprungpunkt nicht gefunden wurde. Fazit: Auf diese Weise scheint eine völlige Inkompatibilität zwischen 32 und 64 Bit zu herrschen. Das (ver)wundert mich aber insofern, als daß auch andere 32-Bit-Programme auf Windows 64 Bit laufen und dabei natürlich auch die betriebsprogrammeigenen DLLs, konkret deren Funktionen (be)nutzen.

2. Mit einem mit Lazarus erstellten 64-Bit-Hostprogramm klappt die Kommunikation beider Dateien, zumindest grundsätzlich, und man kann sich tatsächlich eines installierten Hookes erfreuen.

Bernhard Geyer 25. Apr 2010 19:53

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Delphi-Laie
Fazit: Auf diese Weise scheinr eine völlige Inkompatibilität zwischen 32 und 64 Bit zu herrschen. Das (ver)wundert mich aber insofern, als daß auch andere 32-Bit-Programme auf Windows 64 Bit laufen und dabei natürlich auch die betriebsprogrammeigenen DLLs, konkret deren Funktionen (be)nutzen.

Das ist keine Inkompatiblität sondern sondern es ist nicht vorgesehen das ein 32-Bit Prozess eine 64-Bit DLL läd und umgekehrt. Das dies für Windows kein Problem darstellt (32-Bit Exe unter Win64) liegt daran das die 32-Bit Prozesse in einem besonderen Windows-Subsystem laufen in dem MS alle nötigen Arbeiten (in vielen Mannjahren Entwicklung) durchgeführt hat. Jedoch will MS nicht den gleichen Weg wie beim Wechsel von Win16->Win32 anbieten da es diese nicht für nötig sieht und vermutlich einige Probleme von damals vermeiden.

Yakumo500 30. Apr 2010 16:19

Re: Hook für Windows 7 64 Bit?
 
Lazarus hat ein Problem beim auflisten der Prozesse also funktionieren oben angehängte Dateien nicht!
Ich habe mich jetzt dazu entschlossen in C++ abgesehen von der x32 DLL (Delphi) eine x64 DLL zu schreiben und einen x64 Injector. Mein Hauptprogramm (Delphi) soll dann prüfen ob das System ein 64 Bit System ist; wenn ja dann wird zusätzlich noch der x64 Injector gestartet. Das Hauptprogramm kümmert sich dann über das hooken der 32 Bit Prozesse, der Injector um die 64 Bit Prozesse.

Jetzt habe ich aber 2 Fragen:
- Wie stelle ich fest ob ein 32 Bit oder ein 64 Bit Betriebssystem läuft?
- Wie stelle ich fest ob ein Prozess 32 Bit oder 64 Bit ist?

Delphi-Laie 30. Apr 2010 16:40

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
Lazarus hat ein Problem beim auflisten der Prozesse also funktionieren oben angehängte Dateien nicht!

Große Klasse, daß ich das lese!

Ich bemerkte nämlich ähnliches und meldete das vor etlichen Wochen bereits hier im Lazarus-Bugtrucker. Anfänglich reagierte man, doch seit geraumer Zeit ist dort leider Funkstille. Das Gefühl des Deinteresses, ja des Unglaubens der Gegenseite beschleicht mich mithin zunehmend.

Zum Glück kann ich für mein Programm auch den Modulschnappschuß verwenden.

Darf ich Sie/Dich fragen, welche Windows-64-Bit-Version bei Ihnen/Dir davon betroffen ist? Ich nutze zur Zeit nur XP, Windows 6.1 (das angebliche 7) soll bald folgen (solche Alphasoftware wie Vista kommt mir nimmmer auf die Festplatte).

Vielleicht - nur so als vorsichtige Anregung - könnten Sie / könntest Du ebenfalls einen Bugreport eröffnen, ggf. mit anderen, weiteren Informationen?! Das würde den Druck erhöhen. Oder wenigstens in meinem Report einen zusätzlichen Kommentar abgeben?! Optimal wäre natürlich, ein eigenes Programm (das aus dieser Diskussion?) dort (in einem eigenen Bericht) hochzuladen, das verbessert die Beweislage ungemein.

Was mich irritiert(e), ist, daß

- die Prozeßenumeration mit einem 32-Bit-Lazarus-Compilat unter Windows 64 Bit funktioniert und
- eigentlich nur DLL-Funktionen aufgerufen werden.

Alternativ gibt es noch die unelegante („unlässige“) Prozeßenumeration über psapi, die die ursprünliche der NTx-Windows-Baureihe ist und eigentlich bis heute in den Versionen als Altlast auch mitgeschleppt werden müßte.

jfheins 30. Apr 2010 16:45

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
- Wie stelle ich fest ob ein 32 Bit oder ein 64 Bit Betriebssystem läuft?
- Wie stelle ich fest ob ein Prozess 32 Bit oder 64 Bit ist?

http://www.delphipraxis.net/internal...t.php?t=139967

Yakumo500 30. Apr 2010 16:47

Re: Hook für Windows 7 64 Bit?
 
@Delphi-Laie:
1. Du/Sie können mich ruhig duzen.
2. Ich bin schon über deine / Ihre Berichte gestoßen aber leider kenne ich mich jetzt auch nicht so übermäßig mit dem Thema aus; ich habe nur die uallHook so umgeschrieben, dass der Kompiler nicht mehr motzt.

@jfheins:
Danke das sollte mein Problem lösen.

Delphi-Laie 30. Apr 2010 17:25

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
2. Ich bin schon über deine / Ihre Berichte gestoßen aber leider kenne ich mich jetzt auch nicht so übermäßig mit dem Thema aus; ich habe nur die uallHook so umgeschrieben, dass der Kompiler nicht mehr motzt.

Viel mehr ist nach meiner Erfahrung auch nicht zu tun, denn ob 32- oder 64-Bit-Compilate vorliegen, ist ja schließlich eine (zunächst interne) Angelegenheit des Compilers. Nur sehr wenig bis gar kein Quellcode ist davon betroffen (vorsichtige laienhafte Einschätzung).

Aber die Windowsversion mit den 64 Bit darf ich noch erfahren, bitte?!

Yakumo500 30. Apr 2010 18:17

Re: Hook für Windows 7 64 Bit?
 
Also ich habe das bei meinem Bruder getestet. Er hat Vista 64 Bit.

Delphi-Laie 30. Apr 2010 18:24

Re: Hook für Windows 7 64 Bit?
 
Danke!

Dann könnte das also ein windowsversionsübergreifendes und mithin doch Lazarusinternes Problem sein, was ich ohnehin vermute bis vielleicht ahne.

Windows 6.1 („7“) wird irgendwann in den nächsten 1-2 Wochen bei mir folgen, vielleicht schließt sich dann die Schlinge (sozusagen).

Yakumo500 30. Apr 2010 18:43

Re: Hook für Windows 7 64 Bit?
 
Wenn du eine kleine Exe in Lazarus schreibst und hier postest kann ich es einem Freund zum testen geben, der Windows 7 bereits hat.

Delphi-Laie 30. Apr 2010 19:11

Re: Hook für Windows 7 64 Bit?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Yakumo500
Wenn du eine kleine Exe in Lazarus schreibst und hier postest kann ich es einem Freund zum testen geben, der Windows 7 bereits hat.

Mit diesem Wunsche hielt ich mich bisher zurück, um dem Forum nicht unnötig auf die Nerven zu gehen. Aber wenn ich so nett gefragt/gebeten werde?! Luckie möge es mir verzeihen, daß ich jetzt sein Programm von anno dazumal auf die Schnelle hier hochlade, aber es ist im Lazarus-Bugtrucker (dort mit seiner Erlaubnis) ohnehin schon öffentlich. Also, ob der Prozeßschnappschuß funktioniert, ist am Editfeld „Anwendung“ erkennbar (bleibt das leer, dann stimmt logischerweise etwas nicht); als Vergleich auch noch meine Version, die den Modulschnappschuß zur Ermittlung des Exe-Dateinamens verwendet; beide Programme zudem als 32- und 64-Bit-Compilat. Erstaunlicherweise scheint das 32-Bit-Compilat mit Modulschnappschuß auch nicht ganz koscher zu sein, das erkennt bzw. gibt zurück unter Windows 64 Bit nur den eigenen Programmnamen.

Tausend Dank für die Gefälligkeit und Aufmerksamkeit und im voraus für die Mühe!

Delphi-Laie 6. Mai 2010 11:55

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
Wenn du eine kleine Exe in Lazarus schreibst und hier postest kann ich es einem Freund zum testen geben, der Windows 7 bereits hat.

Was ist daraus nun geworden? Ich sehe nämlich, daß meine Uploads einmal heruntergeladen wurden.

Ist aber vermutlich inzwischen egal, denn nunmehr bin ich „stolzer“ Besitzer einer Windows-7-64-Bit-Installation. Und? Es kam, wie es kommen mußte: Die Probleme sowohl mit dem Prozeß- also auch mit dem Modulschnappschuß (und entprechenden nachfolgenden Prozeß- bzw. Modulenumerationen) sind genau die gleichen! Ich schrieb das auch gleich in den Bugtrucker, der leider bis heute nicht einmal ein „acknowledged“ oder gar ein „confirmed“ für meine Fehlermitteilung übrighatte. Daß die Fehlerbehebung deutlich länger dauert (vermutlich ein subtiler Fehler), sehe ich ein, aber so fühle ich mich natürlich irgendwie ein bißchen allein im Regen stehengelassen.

Yakumo500 6. Mai 2010 20:23

Re: Hook für Windows 7 64 Bit?
 
Sorry,
ich hab meinen Freund erst gestern erreicht und wir wollten das dann am Wochenende testen.
Aber du bist uns zuvor gekommen :lol:

Delphi-Laie 6. Mai 2010 20:32

Re: Hook für Windows 7 64 Bit?
 
Zitat:

Zitat von Yakumo500
Sorry,
ich hab meinen Freund erst gestern erreicht und wir wollten das dann am Wochenende testen.
Aber du bist uns zuvor gekommen :lol:

Verifikation ist auch was wert, auch wenn ich mir inzwischen ziemlich sicher bin, eine eine Schwachstelle Lazarus' aufgespürt zu haben, denn es lief auf XP & 6.1 bzw. 7 mit 64 Bit nicht koscher (allerdings beide auf demselben Computer, aber das dürfte unerheblich sein). Also, ich wäre erfreut, auch hier noch eine Rückmeldung zu erhalten. Vielen Dank im voraus!

eagle616 8. Mai 2010 18:45

Re: Hook für Windows 7 64 Bit?
 
Hi,

ich als der besagte Freund habe deine Programme mal auf Windows 7 Home Premium 64 bit getestet.
Ich schreibe also jewils was im Anwendungs-Edit stand.

Modulschnappschuss:
32 Bit: Windows Fenster werden nicht als explorer.exe angezeigt; Third Party Fenster schon.
64 Bit: Alle Fenster werden angezeigt.

Prozessschnappschuss:
32 Bit: Alle Fenster werden angezeigt.
64 Bit: Nichts wird angezeigt.

ich hoffe das hilft und falls noch Fragen oder Tests vorhanden sind stehe ich gerne bereit.
Ich kann auch Screenshots machen falls euch das mehr sagt.

mfg

Patrick

Delphi-Laie 8. Mai 2010 20:21

Re: Hook für Windows 7 64 Bit?
 
Hallo Patrick, vielen Dank!

Inzwischen tat sich einiges:

1. Parallel zu meinem Windows XP 64 Bit installierte ich auch Windows 6.1 („7“ - ich bringe es einfach nicht übers Herz, diese nächste mikroweiche Halblüge unkritisch bzw. unkommentiert zu übernehmen) 64 Bit, habe aber auf beiden, wie eigentlich erwartet, identische Ergebnisse.

2. Im Lazarus-Bugtrucker wurde ich auf ein Pendant zu tlhelp32 - tlhelp64 - aufmerksam gemacht, das in einem anderen Fehlerreport gespeichert ist. Damit ist mein Problem eigentlich behoben, nur das, worauf ich im Verlaufe des Bugreportes stieß, noch nicht: Der Modulschnappschuß im 32-Bit-Kompilat funktioniert unter Windows 64 Bit nur eingeschränkt: Nur der Name des eigenen Programmes wird zurückgeliefert, nicht jedoch fremder Programme.

Zitat:

Zitat von eagle616
Modulschnappschuss:
32 Bit: Windows Fenster werden nicht als explorer.exe angezeigt; Third Party Fenster schon.

Hm, bei mir ist es anders (so, wie weiter oben in diesem Beitrag beschrieben). Merkwürdig....

Vielen Dank und freundlicher Gruß

Delphi-Laie

Sharky 9. Mai 2010 08:39

Re: Hook für Windows 7 64 Bit?
 
Hat das ganze denn noch etwas mit der ursprünglichen Frage zu tun?

himitsu 9. Mai 2010 09:01

Re: Hook für Windows 7 64 Bit?
 
Bin gestern über 2 Beiträge im Emba-CodeCental gestolpert, welche aktuell eventuell für Delphi und 64 Bit interessant sein könnten:

http://cc.embarcadero.com/Item/27554 - 64bit Windows Explorer shell extension library
http://cc.embarcadero.com/Item/27667 - Delphi32 to 64-bit bridge


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