NtCreateProcessEx
-
Hi Zusammen,
ich versuche gerade verzweifelst NtCreateProcessEx umzuleiten.
Ich würde mir nämlich gerne ein Tool basteln, das mir jedes Mal Bescheid gibt, wenn ein neuer Prozess ausgeführt werden soll und mich fragt, ob ich den Prozess auch wirklich ausführen will (->'Trojanerabsicherung'). Soll so aussehen:
2 Komponenten:
---------------------------------
1. Treiber, der mir die Addresse von NtCreateProcessEx in der SSDT ersetzt und somit die Ausführung erst einmal auf meine eigene Funktion umleitet.
Meine Funktion führt dann so lange eine Schleife aus, bis vom Usermode über DeviceIoControl entweder ein 'OK' oder ein 'CANCEL' in Form von einem Io-Control Code empfangen wird. Dann erst wird die Schleife verlassen und-im Falle eines 'OK' die echte NtCreateProcessEx ausgeführt, die den Prozess dann startet, oder
-ein schlichtes STATUS_UNSUCCESSFUL zurückgegeben2. Das User-Mode Programm, das eine MessageBox anzeigt wenn ein Prozess gestartet wird mit 'JA' und 'NEIN' und dann je nach Beantwortung einen Io-Control Code 'OK' oder 'CANCEL' an den Treiber sendet.
---------------------------------
Mein Problem liegt in der Realisierung der Schleife.
Ich habe eine globale Variable namens 'Blocken' in meinem Treiber erstellt. Die Schleife in meiner Umleitungsfunktion wird solange ausgeführt, wie 'Blocken == 0'.
Wenn ich jetzt mit meinem User-Mode Programm an den Treiber hinconnecte und einen Io-Control Code namens 'CANCEL' oder 'OK' sende, so setzt meine IRP_MJ_DEVICE_CONTROL-Funktion die variable 'Blocken = 1'.
Daraufhin sollte die Schleife in meiner Umleitungsfunktion abbrechen. (die aber !aufpassen! in einem anderen Thread läuft)
Funktioniert aber leider nicht. Das Problem ist warscheinlich die Synchronisation der Threads. Brauche ich da einen Spinlock oder so etwas ?
Nicht dass 'Blocken' am Ende niemals 1 wird, weil die Schleife dauernd den Wert abfragt und dadurch diese Operation verhindert.Oder liegt es an etwas ganz anderem...?
Greetings, Xzi-bit