AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hook für Windows 7 64 Bit?

Ein Thema von Yakumo500 · begonnen am 24. Apr 2010 · letzter Beitrag vom 9. Mai 2010
Antwort Antwort
Seite 1 von 3  1 23      
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#1

Hook für Windows 7 64 Bit?

  Alt 24. Apr 2010, 14:04
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#2

Re: Hook für Windows 7 64 Bit?

  Alt 24. Apr 2010, 14:43
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 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#3

Re: Hook für Windows 7 64 Bit?

  Alt 24. Apr 2010, 17:42
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.
Angehängte Dateien
Dateityp: zip ualltest_353.zip (828,4 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#4

Re: Hook für Windows 7 64 Bit?

  Alt 25. Apr 2010, 19:10
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.
Angehängte Dateien
Dateityp: zip uallcollection_for_lazarus_780.zip (303,1 KB, 38x aufgerufen)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

Re: Hook für Windows 7 64 Bit?

  Alt 25. Apr 2010, 19:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Hook für Windows 7 64 Bit?

  Alt 25. Apr 2010, 19:53
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#7

Re: Hook für Windows 7 64 Bit?

  Alt 30. Apr 2010, 16:19
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?
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

Re: Hook für Windows 7 64 Bit?

  Alt 30. Apr 2010, 16:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Hook für Windows 7 64 Bit?

  Alt 30. Apr 2010, 16:45
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
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#10

Re: Hook für Windows 7 64 Bit?

  Alt 30. Apr 2010, 16:47
@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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
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