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 Programmsperre programmieren (https://www.delphipraxis.net/85530-programmsperre-programmieren.html)

Codewalker 1. Feb 2007 09:29


Programmsperre programmieren
 
Hallo zusammen.

Ich soll eine Art Programmsperre programmieren und benötige dafür ein paar Tipps: Das Programm soll als Dienst oder Tool (noch nicht ganz klar) immer im Hintergrund laufen. Jegliche Programmaufrufe sollen abgefangen werden und das entsprechende Programm soll ermittelt werden. Von dem Programm wird ein MD5-Hash gebildet und mit einer Blacklist abgeglichen. Wenn das Programm (z.B. Hackertools, etc.) in der Liste ist, soll der Programmaufruf geblockt werden, ansonsten soll das Programm ganz normal gestartet werden.

Wie kann ich das machen. Gibt es da in der DP schon passende Beispiele?

Danke und Grüße

Codewalker

Luckie 1. Feb 2007 09:38

Re: Programmsperre programmieren
 
Eigentlich müsste es dazu ausreichen NTCreateProcess zu hooken.

Codewalker 1. Feb 2007 09:48

Re: Programmsperre programmieren
 
Ich hab mich noch nie wirklich mit Hooks auf Funktionen beschäftigt (nur mit Mousehooks). Wie mach ich das denn konkret? Hast du das vielleicht ein Beispiel zu?

Luckie 1. Feb 2007 09:57

Re: Programmsperre programmieren
 
Guck mal hier bei toms: http://www.michael-puff.de/dirindex....elphi/Importe/

Codewalker 1. Feb 2007 10:31

Re: Programmsperre programmieren
 
Das sieht sehr gut aus. Danke für den Tipp. Ich werde mich damit mal in Ruhe beschäftigen....

Olli 1. Feb 2007 10:47

Re: Programmsperre programmieren
 
Bitte implementier' es als Treiber. Alles andere ist relativ unsicher.

Wenn ich Zeit finde, kann ich mich breitschlagen lassen da schnell was zusammenzutippen (dann ab W2K).

Codewalker 1. Feb 2007 12:07

Re: Programmsperre programmieren
 
Dann ist Delphi aber doch nicht mehr dafür geeignet, oder? Soweit ich bisher weiß, muss ich doch dann C++ mit speziellem Compiler/Linker verwenden und das ist alles andere als trivial. Warum meinst du denn, gibt das Probleme?

Olli 1. Feb 2007 13:27

Re: Programmsperre programmieren
 
Ganz einfach, weil es mehr als einen Weg gibt den entsprechenden System-Service aus dem Usermode aufzurufen. Du wirst also ganz simpel nicht alles abfangen. Wie gesagt, den Treiber kann ich dir vermutlich relativ zuegig schreiben.

Codewalker 1. Feb 2007 14:23

Re: Programmsperre programmieren
 
Zitat:

Zitat von Olli
Wie gesagt, den Treiber kann ich dir vermutlich relativ zuegig schreiben.

Das wäre natürlich super. Was genau soll der denn machen und was kann ich mit einem Programm regeln (bzgl. Einstellungen und ähnlichem). Ich würd das halt gern selbst managen können, etc.

Olli 1. Feb 2007 18:27

Re: Programmsperre programmieren
 
Zitat:

Zitat von Codewalker
Zitat:

Zitat von Olli
Wie gesagt, den Treiber kann ich dir vermutlich relativ zuegig schreiben.

Das wäre natürlich super. Was genau soll der denn machen und was kann ich mit einem Programm regeln (bzgl. Einstellungen und ähnlichem). Ich würd das halt gern selbst managen können, etc.

Wäre das nicht eigentlich der Teil den du mir sagen müßtest? Das größte Problem wird vermutlich die Kommunikation zwischen UM und KM ... ansonsten sehe ich keine großen Hürden.

Codewalker 2. Feb 2007 07:24

Re: Programmsperre programmieren
 
Zitat:

Zitat von "Olli
Wäre das nicht eigentlich der Teil den du mir sagen müßtest?

hmm.. stibimmt :mrgreen:

Eigentlich müsste ich nur mitbekommen können (weiß nicht, welche Möglichkeiten es zur Kommunikation zwischen UM und KM gibt), wann ein Programm gestartet wird und die gesamte Befehlszeile inkl. Parameter erhalten.
Das Testen würde in einem Tool oder Dienst ablaufen. Anschließend müsste ich nur an einen Treiber einen Bool geben könne, ob er den Befehl ausführen soll oder nicht. Alternativ ginge auch, dass ich den Befehl vom Programm erneut ausführe mit einem Trick (Flag, oder so. Bin da auch für Vorschläge offen), so dass keine erneute Prüfung durchgeführt wird, sondern das Programm direkt gestartet wird.

Ich hoffe das war verständlich und ich würd mich freuen, wenn du mir sagen kannst, ob das möglich ist und wo es Probleme geben könnte.

Olli 2. Feb 2007 07:29

Re: Programmsperre programmieren
 
Zitat:

Zitat von Codewalker
Eigentlich müsste ich nur mitbekommen können (weiß nicht, welche Möglichkeiten es zur Kommunikation zwischen UM und KM gibt), wann ein Programm gestartet wird und die gesamte Befehlszeile inkl. Parameter erhalten.

Gut, also die Befehlszeile holst du dir lieber im Usermode. Ansonsten gibt es da Events, Inverted Calls, MMFs ... was auch immer.

Zitat:

Zitat von Codewalker
Das Testen würde in einem Tool oder Dienst ablaufen. Anschließend müsste ich nur an einen Treiber einen Bool geben könne, ob er den Befehl ausführen soll oder nicht. Alternativ ginge auch, dass ich den Befehl vom Programm erneut ausführe mit einem Trick (Flag, oder so. Bin da auch für Vorschläge offen), so dass keine erneute Prüfung durchgeführt wird, sondern das Programm direkt gestartet wird.

Hmm, also müßten bestimmte Prozessoe von vornherein ausgenommen sein von der Sperre, richtig?

Zitat:

Zitat von Codewalker
Ich hoffe das war verständlich und ich würd mich freuen, wenn du mir sagen kannst, ob das möglich ist und wo es Probleme geben könnte.

Jupp, wird es vermutlich geben, weil man irgendsowas wie einen vertrauenswürdigen Prozeß haben muß. Abgesehen davon hängt es davon ab wie lange deine Tests dauern. Was sind denn das für Tests, wenn ich fragen darf?

Übrigens, wenn das hier auf eine Sandbox hinausläuft, darf ich dir aufgrund meines Arbeitsvertrags leider nicht helfen.

Codewalker 2. Feb 2007 07:59

Re: Programmsperre programmieren
 
Zitat:

Zitat von Olli
Übrigens, wenn das hier auf eine Sandbox hinausläuft, darf ich dir aufgrund meines Arbeitsvertrags leider nicht helfen.

Nein, eine Sandbox soll das nicht werden. Ich glaube dann müsste ich mir auch deutlich(!) mehr Wissen über Kernel und KM anlesen. Das ganze hat 2 Ziele:
1. Eine Art "Kindesicherung", um gezielt Programme beispielsweise per Passwort zu blocken oder Zeitsperren einzubauen (Nein, du spielst WoW nicht abends nach 23 Uhr :mrgreen: ).
2. Für einen Freund der noch ein Internetcafé hat und bestimmte Programme nicht erlauben möchte.


Zitat:

Zitat von Olli
Gut, also die Befehlszeile holst du dir lieber im Usermode.

Okay, aber wie würde ich denn da dran kommen? (Ich würde das dann über einen Hook machen wie oben beschrieben, aber nur lesend ohne etwas zu verändern. Wie würdest du das denn machen?

Zitat:

Zitat von Olli
Ansonsten gibt es da Events, Inverted Calls, MMFs ... was auch immer.

Mir solls egal sein, Haupsache ich komme irgendwie dran.

Zitat:

Zitat von Olli
Abgesehen davon hängt es davon ab wie lange deine Tests dauern. Was sind denn das für Tests, wenn ich fragen darf?.

Ich hab doch gar nichts von Tests erzählt, oder? :gruebel:


Grundsätzlich hast du Recht, dass ein Treiber die bessere Variante ist und ich finde es klasse, dass du mir da helfen würdest. Allerdings hast du natürlich sehr viel Wissen über Treiber und Kernelmode und ich (leide fast) nichts, so dass ich da wenig mit Vorgaben dienen kann. Ich würde mich da über Vorschläge von Dir, wie ich das machen soll, sehr freuen. Ich kann dann eher mit Ideen und Basteleien im UserMode dienen (naja, Delphi halt :zwinker: )

Catbytes 2. Feb 2007 08:21

Re: Programmsperre programmieren
 
Zitat:

Zitat von Codewalker
Eigentlich müsste ich nur mitbekommen können (weiß nicht, welche Möglichkeiten es zur Kommunikation zwischen UM und KM gibt), wann ein Programm gestartet wird und die gesamte Befehlszeile inkl. Parameter erhalten.

Und dann benenne ich das Programm um - und dann?

Aus Hack.exe wird Lieb.exe
Aus wow.exe wird word.exe

Wäre es nicht besser den internen Programmnamen zu verwenden? Bedenke: Deine Kinder sind kreativer, als Dir lieb ist :mrgreen:

Codewalker 2. Feb 2007 08:24

Re: Programmsperre programmieren
 
Das habe ich (hoffentlich) gelöst, indem ich auch noch den MD5-Hash dazu nehme (s.o.)

Daniel G 2. Feb 2007 08:27

Re: Programmsperre programmieren
 
Würdest du das Programm veröffentlichen? Bin grad' auf der Suche nach sowas... Leider gibt's das so gut wie nichts im kostenfreien Rahmen.

Codewalker 2. Feb 2007 08:30

Re: Programmsperre programmieren
 
klar. Ich bekomme schon so viel Hilfe (solange Olli dann auch zustimmt) poste ich das hier sehr gern. :dp:


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