![]() |
Hook
Hallo,
Ich möchte mich mit Hooks beschäftigen und einfach etwas dazulernen und nun habe ich aus einem Video diesen Code programmiert und eine "DDetours-Library" hinzugefügt.
Code:
Hier verhindere ich das verlassen eines Prozesses, aber wie kann ich nun Tastendrücke, Mausdrücke oder ähnliches verhindern?
var
HookedExitProcess: function(Cardinal: integer) : PVOID; stdcall = nil; function myExitProcess(Cardinal: integer) : PVOID; stdcall; begin Result:= nil; end; procedure TForm1.HookExitProcessClick(Sender: TObject); begin if not Assigned (HookedExitProcess) then begin @HookedExitProcess:= Interceptcreate(@ExitProcess, @myExitProcess); end; end; procedure TForm1.CallExitProcessClick(Sender: TObject); begin ExitProcess(0); end; procedure TForm1.UnhookExitProcessClick(Sender: TObject); begin if Assigned (HookedExitProcess) then begin Interceptremove(@HookedExitProcess); HookedExitProcess:=nil; end; end; MFG derseitzer |
AW: Hook
Zitat:
![]() Aber auch diese Hooks haben ihre Grenzen. Wenn du ganz sichergehen willst, nimmst du Filtertreiber. Aber da kommste nicht mehr drum herum auch C zu lernen. Und selbst solche Treiber haben ihre Achillesfersen im Vergleich zu Hardwarelösungen. Am sichersten ist es die Tastatur und Maus vom Rechner zu trennen (Scherz! :zwinker:). |
Dieses Thema wurde am "16. Oct 2017, 20:21 Uhr" von "Daniel" aus dem Forum "Programmieren allgemein" in das Forum "Win32/Win64 API (native code)" verschoben.
|
AW: Hook
..."aber wie kann ich nun Tastendrücke, Mausdrücke oder ähnliches verhindern?"...
-> billigeste und einfachste Lösung: - kaufe den billigsten 2..fach USB Umschalter oder 2..fach KVM Switch mit "TASTEN" - kaufe ne billige 2+ Relaisplatine mit dokumentierer USB Ansteuerung - schalte elektrisch jeweils den Relaiskontakt mit je 2Drähten parallel zu den Umschalttasten (ja da muss man das Umschalter Gehäuse meist per kaputtmachen;) dazu mal öffnen) - Programmiere in deiner App "Relais1 für 1sec ein" zum Tastatur+Maus "zuschalten" - Programmiere in deiner App "Relais2 für 1sec ein" zum Tastatur+Maus "abschalten" => das ist so einfachse Software, billig und nahezu 100% Manipulationssicher, da eine sogenannte "AirGapLösung" :) |
AW: Hook
@assarbad ich dachte alles was C kann kann delphi auch das wird hier doch immer so hoch angeprießen :D
@mensch72 sehr nett aber ich möchte trotzdem mal so einen Fensterhook programmieren aus Interesse eher weniger des zweckes wegen :) |
AW: Hook
Programmiertechnisch stimmt das auch. Nur für Windowstreiber benötigst du Tools von Microsoft und die verstehen kein Delphi. :?
Hinzukommen die fehlenden Header Übersetzungen. Kann man zwar auch übersetzen, nur wird da ausgiebig Gebrauch von C Sprachfeatures gemacht, die sich nicht so einfach nach Delphi übersetzen lassen. Es geht zwar, siehe NicoDe, aber es ist umständlich, unpraktisch und macht eigentlich keinen Sinn. |
AW: Hook
Zitat:
Zitat:
Microsoft hatte beim DDK (Driver Development Kit, später in WDK: Windows Driver Kit umbenannt) bis zu den Versionen für Windows 2000 keine Toolchain (Compiler, Linker etc) beigelegt. Einspringen sollte damals die aktuelle Version von Visual C++. Das war umständlich. Mit dem DDK für XP änderte sich das und die Toolchain lag bei. Microsoft riet auch explizit davon ab die Toolchain von irgendeiner Visual C++ Version zu benutzen, sondern empfahl jene im DDK/WDK. Die entsprechenden Werkzeuge, die sich an das damalige Buildsystem für Windows anlehnten, waren aber umständlich. Dies führte zu Brückenlösungen wie ![]() ![]() ![]() ![]() Es gab viele Rezepte bzgl. der Nutzung anderer Toolchains: Nico's Variante für Delphi darf hier ruhig erwähnt werden, aber auch welche unter Nutzung von GCC mit MinGW oder des Visual C++ Compilers. Alle diese Rezepte verkannten aber die speziellen Herausforderungen und richteten sich explizit gegen den Rat von Microsoft zum Thema Treiber. So gilt im Kernelmode eine Beschränkung des Stacks pro Thread. 12 KiB für "normale" Threads und knappe 64 KiB für GDI-Threads.
Code:
Typische Bugcheck-Codes im Fall des Überlaufs wären PANIC_STACK_SWITCH und UNEXPECTED_KERNEL_MODE_TRAP. Das passiert, wenn ein beliebiger Treiber zuviel Stack frißt. Und bei Filtertreibern, welche übereinander sitzen und dann als Stapel auf einem PDO aufsetzen, kann man sich denken, daß 12 KiB ziemlich knapp sind, wenn ein halbes Dutzend Filtertreiber im System nicht allzu ungewöhnlich sind und man als Treiberentwickler jederzeit mit Stacknotstand rechnen muß. Die Toolchains im den DDKs/WDKs bringen dazu spezielle Werkzeuge mit um mittels statischer Code-Analyse zu ermitteln wieviel Stack die Funktionen im eigenen Treiber fressen (Array auf dem Stack ist ja durchaus Usus für Usermode-Entwickler). Genau genommen war das DDK/WDK bis vor einiger Zeit die billigste Variante um an statische Analysewerkzeuge für Windows-C/C++-Entwicklung zu kommen. Es gibt noch weitere spezielle Werkzeuge die ebenfalls ausschließlich im DDK/WDK zu finden sind, weshalb es höchst unsinnig wäre hier krampfhaft zu versuchen an den vorhandenen Mitteln vorbei eine Lösung für ein eigentlich nicht vorhandenes Problem zu finden.
KERNEL_LARGE_STACK_COMMIT equ 03000H
KERNEL_LARGE_STACK_SIZE equ 0F000H KERNEL_STACK_SIZE equ 03000H DOUBLE_FAULT_STACK_SIZE equ 03000H Und jetzt erkennt man auch was Luckie mit folgender Aussage gemeint haben könnte: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 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