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 WH_MOUSE_LL, WH_KEYBOARD_LL austricksen! (https://www.delphipraxis.net/129721-wh_mouse_ll-wh_keyboard_ll-austricksen.html)

Hedge 24. Feb 2009 14:19


WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
Hallo ist es möglich ohne einen Treiber dafür zu programmieren bei den folgendenen Hooks einen Mausklick bzw. Tastaturanschlag zu simulieren: WH_MOUSE_LL, WH_KEYBOARD_LL (oder einen Journalhook)?

Natürlich könnte man auch die Callback-Funktion auslösen die im Falle eines Mausklicks oder Tastenanschlags ausgelöst wird. Wie kann man das verhindern (erschweren?) oder ermitteln wenn das geschehen ist?

Hedge 25. Feb 2009 07:45

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
ok ein Kumpel meinte, dass man das kaum verhindern kann, dass Jemand die Funktion sich sucht und sie selbst auslöst, aber kann man ermitteln von wo ein Funktionsaufruf getätigt wurde?

Wenn er aus einem fremden Prozess stammt, dann müsste man das doch rauskriegen können oder?

Selbst dann könnte ja derjenige die Adresse mit dieser Überprüfung einfach überspringen, könnte man dann dagegen noch etwas tun?

Ich weiß dass es keine Sicherheit gibt, aber ich will den bösen Buben das Handwerk nur erschweren.
Das Programm soll dann auch nicht abstürzen, derjenige wird erst Tage oder Wochen später merken, dass er ertappt wurde.

himitsu 25. Feb 2009 08:03

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
von einem Fremdprozeß aus wird man eine interne Funktion wohl nicht direkt anspringen können, dafür wird er schon deinen Prozeß verändern müssen (evtl. Code einschleusen)

Wenn du weißt von wo aus deine Funktion aufgerufen wird, könntest du den Stack prüfen.
(z.B. wohin zurückgesprungen wird, nachdem deine Funktion abgerbeitet wurde)

Hedge 25. Feb 2009 09:21

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
Lässt sich Code einschleusen mit Exe-Cryptern wie Thermida verhindern?
Ich weiß ja mittlerweile, dass es relativ einfach geht Thermida zu umgehen und es da oft schon vorgefertigte Plugins für Olly und co. gibt, also wie kann ich das einschleusen erschweren?

Ja, ich weiß von wo die Funktion aufgerufen wird (vom Hook-Objekt), aber wie prüfe ich wohin zurückgesprunge wird?
Habe gerade danach gesucht, aber nichts passendes gefunden, 1-2 Stichwörter wären also sehr gut.

Und letztendlich noch:
Kann man irgendwas auf User-Ebene machen um Mausklicks etc. von einem Programm zu verursachen, die dann von einem systemweiten Hook erkannt werden? Bisher sind meine Erfahrungen so, dass keine API-Funktion dazu in der Lage ist.

himitsu 25. Feb 2009 09:33

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
man schleüßt ja meinst den Code in das laufende Programm ein
und Exe-Crypter verschlüsseln nur die Exe, aber das laufende Programm muß ja entschlüsselt sein, sonst läuft es nicht.
Und selbst wenn, bestellt man sich bei Windows etwas Speicher, copiert seinen Code dort rein und läßt ihn ausführen.

Du müßtest also irgendwie den Remote-Zugriff anderer Programme verhindern.

Hedge 25. Feb 2009 09:40

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
also verhindern ist nicht so gut, weil die Leute dann so lange rumspielen wie sie es doch hinkriegen.
Erkenne wäre hilfreicher, weil mein Programm ab und zu ein Script auf nem Server aufrufen muss. Die erkannten Leute würden dann geflagged sein und ich könnt mir überlegen was ich mit denen anstelle :)

Aber was hilft einem sowas zu erkennen...
Alle Methoden die ich kenne wie als einfaches Beispiel IsDebuggerPresent von Luckie (hier) können mit mehr oder weniger Geschick umgegangen werden.

Wenn ein User zum 3. Mal gekicked wurde, dann wird er schon auf die Idee kommen, dass ich da was gemacht habe und suchen.

Hast du also eine gute Idee das relativ schwer zu machen?

himitsu 25. Feb 2009 10:15

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
Sagen wir es mal so, ich hab aufgehört was dagegen zu machen, da es für alles (irgendwann) Wege gibt dieses zum umgehn.

"Luckie's", nja eigentlich mehr Olli's/Windows's IsDebuggerPresent kann man leicht umbauen und in verschiedenen Varianten mehrfach im Code verstecken, aber mit "etwas" arbeit ließe sich dieses dennoch finden und umgehn.

in einem Programm hatte ich das mal (so zum Üben) an vielen Stellen in Code versteckt und, damit man diese Stellen nicht gleich findet, den Wert erstmal irgendwo abgelegt (auch an verschiedenen Stellen) oder irgendwo mit eingerechnet, und dieses dann erst später ausgewertet und entsprechend behandelt.

Hedge 25. Feb 2009 11:03

Re: WH_MOUSE_LL, WH_KEYBOARD_LL austricksen!
 
OK, das wird dann auch der beste Weg sein die Sache zu behandeln.

Ich werd dann einige zusätzliche Daten zum Userverhalten (nichts dramatisches also keine Windows-Keys oder Liste der installierten Programme) übertragen müssen (natürlich werden ich die User ungefähr wissen lassen um was es sich handelt, da ich nicht mit gezinkten Karten spiele) um vernünftig inhaltlich zu checken ob das was der User macht mit rechten Dingen zugeht.

Was mich aber noch interessieren würde ist wie ich nun den Stack überprüfen kann?


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