2009-12-31 2 views
10

Gibt es eine Möglichkeit, meine Delphi-Anwendung davor zu schützen, vom Windows Task-Manager (oder anderen wie Process Explorer) getötet zu werden?Wie kann ich verhindern, dass der Task-Manager mein Programm beendet?

Ich denke, Windows-Nachrichten können das tun (indem Sie einen Haken und abfangen der TerminateProcess-Nachricht).

Ich möchte ein Beispiel für diesen Schutz. Die Kaspersky Anti-Virus Suites sind so; wir können ihren Prozess im Task-Manager nicht beenden.

+14

Welchen legitimen Grund haben Sie dafür? –

+1

Ich schlage eine Alternative vor: Haben Sie ein Status-Flag, das korrektes Herunterfahren anzeigt, und wenn Sie gestartet werden, ohne dass das Herunterfahren-Flag gesetzt ist, machen Sie ein Protokoll davon (oder größer). Und dann haben Sie einen Service, der Ihren Prozess überwacht und sicherstellt, dass er läuft. Wenn der Benutzer es tötet, starten Sie es einfach erneut. Dies ist es, was wir mit einem "muss laufen" -Prozess tun, mit dem sich der Benutzer herumschlagen kann. – mj2008

+7

Ich habe einen Vorschlag: Bitte tu das nicht. –

Antwort

11

AV Programme wie Kaspersky verwenden wahrscheinlich einen Treiber und verwenden Hook, um eine Beendigung zu verhindern. In Ihrer Situation würde ich raten, eine ACL für den Prozess zu setzen, dies verhindert die Beendigung mit Task-Manager oder Cmdline-Tools (wenn der Benutzer nicht die Debug-Berechtigung hat). Natürlich kann der Benutzer immer ein Werkzeug wie Process Explorer verwenden, den Prozess übernehmen, neue ACL setzen und beenden.

Wenn der Benutzer kein Administrator ist, würde es ausreichen, den Prozess in einem anderen Benutzerkontext auszuführen (z. B. Starten von einem Dienst).

Einstellung eines Prozesses ACL ist sehr einfach mit der Jedi Windows Security Library, wie diese sample zeigt.

+1

oaky Remko, Diese Bibliothek befriedigt mich, die im Beispiel gezeigt wird, konnte auf meine Bedürfnisse reagieren, weil ich nur etwas "un" -killable von Neulingen wollen (uses & taskmanager !!) – djiga4me

+1

Wenn Remko ist die Antwort, die Sie mögen , sollten Sie es als die akzeptierte Antwort markieren. – Josh

+0

@JoshEinstein Jetzt *** *** das ist zivilisiert. +1 für den Kommentar * und * Ihre Antwort. –

14

Wie Kornel sagt, gibt es OS-Level-Schutz von Prozessen von Benutzern isoliert. Aber im Allgemeinen gibt es keine Möglichkeit, den Prozess durch einen Benutzer mit der entsprechenden Berechtigung zu beenden. Und ein Benutzer hat die Berechtigung, Prozesse zu beenden, die als dieser Benutzer ausgeführt werden.

Auch wenn Sie es als SYSTEM ausführen wollten, konnten Sie diesen Prozess nicht zum Interagieren mit dem angemeldeten Benutzer verwenden. Sie müssten es als Dienst ausführen und es würde keine GUI haben. Sie könnten andere Ansätze versuchen, wie zum Beispiel das Laden einer DLL in einen Prozess wie Explorer.exe, die Benutzer nicht beenden, weil sie nicht wollen, aber das ist nur missbräuchlich.

Es wäre eine sehr schlechte Situation für Endbenutzer, wenn Entwickler nur Anwendungen schreiben könnten, die nicht beendet werden konnten. Wenn es sich um eine interne Anwendung handelt, überprüfen Sie möglicherweise Server Fault, um festzustellen, ob es mit Gruppenrichtlinien möglich ist.

-1

Wenn Sie ein NT-Service-Projekt erstellen, können Service-Prozesse nicht mit Process Manager beendet werden, sondern werden vom internen Service-Manager gesteuert.

5

Das ist eine sehr schlechte Idee. Wenn Ihr Programm auf dem Computer eines anderen Computers ausgeführt wird, befindet es sich auf seinem Grundstück, nicht bei Ihnen, und muss sich selbst als Gast in seinem Haus verhalten. Das bedeutet, dass Sie sich nicht so verhalten, als wären Sie der Besitzer des Besitzers, und Sie sagen dem Eigentümer des Computers nicht, was er nicht mit seinem eigenen Eigentum tun kann, wie zum Beispiel eine Aufgabe zu töten, die er nicht ausführen möchte. Wenn Sie das tun, ist Ihr Programm nicht besser als Malware und wird wahrscheinlich wie Malware behandelt.

+3

-1: Der Computer kann nicht ihr Eigentum sein. z.B. Helpdesks, bei denen Manager die Betreiber überwachen müssen, insbesondere wenn sie Zugriff auf sensible Daten haben. OS geht es nicht um Ethik, es geht um Programmierfragen –

+1

@Andy: In einer solchen Situation gibt es geeignete Richtlinien-Bearbeitungs-Tools für das Management, um diese Situationen zu behandeln. Und wenn Sie denken, dass Ethik irgendwie von der Programmierung getrennt werden kann, sollten Sie niemals einen Compiler erneut berühren. Ich möchte nicht riskieren, dass etwas, das du geschrieben hast, auf meinem Rechner landet. –

+0

warum nicht im Detail zu beschreiben? OP gab bereits sein Wort, dass es nicht um Malware geht (in Kommentaren) –

3

Ich denke, dass Sie eine falsche Frage stellen.

Sie versuchen zu lösen "was ist, wenn die Verbindung mitten in Chat mit Server beendet wird" Problem in der falschen Art und Weise. Die Antwort ist nicht zu "Prozessabbruch zu verweigern", sondern zu "vorhersehen Verbindungsprobleme und schreiben Fehler-Fallback-Code"!

Warum? Ursache, offensichtlich, Verbindungsabbruch kann auf Netzwerkprobleme zurückzuführen sein (Sie können Ihren Benutzern nicht erlauben, den Computer vom Netzwerk zu trennen) und nicht die Beendigung des Clients!

Why can't you trap TerminateProcess?

Und wenn Sie über Anwendung besorgt sind abgestürzt - nur Application Restart & Recovery API verwenden.

0

Der einfachste Weg: Sie könnten einfach starten 2 Prozesse und lassen Sie sie "aufeinander" sehen.
Wenn einer von ihnen geschlossen wurde, lassen Sie den anderen Prozess es neu starten. Es wird verhindern, dass Anfänger (wie Sie sagten) diesen Prozess beenden.

Sorry, aber ich denke, dass Ihre "Server/Client-Anwendung" Trojaner/Backdoor Fähigkeiten hat. "Client app senden einige nützliche Daten", "unkillable Prozess" (in Ihren Kommentaren) scheinen Tooooo für mich verdächtig.

Verwandte Themen