Wie verstecke ich einen Prozess im Task-Manager in C #?
Habe ich eine Anforderung, um zu verbergen, einen Prozess im Task-Manager. Es ist für Intranet-Szenario. So, alles ist legitim. 🙂
Bitte fühlen Sie sich frei zu teilen-code, den Sie haben (vorzugsweise in C#) oder irgendwelche anderen Techniken oder Probleme mit dieser Strecke.
Update1: die Meisten Benutzer haben admin-Rechte, um zu laufen, einige ältere apps. Also, der Vorschlag war, es zu verbergen, die im task-manager. Wenn es andere Ansätze, um zu verhindern, dass Benutzer von der Tötung der Prozess, das wäre toll.
Update2: Entfernen der Referenz zu rootkit. Irgendwie hat dieser post Aussehen negativ.
InformationsquelleAutor der Frage Gulzar Nazim | 2008-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen unterstützten Weg um dies zu erreichen. Der Prozess-Liste gelesen werden können auf jede Berechtigungsstufe. Wenn Sie hoffen, um zu verbergen, ein Prozess von noch Administratoren, dann ist das doppelt nicht unterstützt.
Zu bekommen dies funktioniert, müssen Sie schreiben ein kernel-Modus-rootkit zum abfangen von aufrufen zu NtQuerySystemInformationso dass die SystemProcessInformation info-Klasse schlägt fehl, um Ihre versteckten Prozess.
Abfangen von Systemaufrufen ist sehr schwer zu tun, sicher, und die 64-bit-Windows-Kernel gehen aus dem Weg zu verhindern, dass dies möglich war: der Versuch, ändern Sie die syscall Tabelle, Ergebnisse in einem Augenblick blauen Bildschirm. Es wird sehr schwierig sein, auf diesen Plattformen
Hier ist ein Beispiel für ein rootkit, das versucht, etwas ähnliches zu tun (und hat mehrere schwerwiegende Probleme).
InformationsquelleAutor der Antwort Chris Smith
Versuchen Sie nicht, um ihn zu stoppen, getötet zu werden - du wirst doch nicht um es zu verwalten. Stattdessen machen es regelmäßig zu Hause anrufen, um einen webservice. Wenn der webservice bemerkt ein client "gehen silent" es kann die ping-Maschine zu sehen, wenn es nur ein reboot Problem, und senden Sie eine E-Mail an einen manager (oder wer auch immer) zu disziplinieren, wer hat getötet der Prozess.
InformationsquelleAutor der Antwort Jon Skeet
Wenn Sie verhindern möchten, dass Benutzer von der Tötung der Prozess von der task-manager, können Sie nur verwenden Sie eine Sicherheitsbeschreibung für den Prozess zu verweigern, zu beenden, den Zugang zu jeder. Administratoren, technisch kann immer noch töten, den Prozess durch die übernahme der Prozess-und zurücksetzen der DACL, aber es gibt keine Schnittstelle, um entweder diese Dinge aus dem Task-Manager. Process Explorer kann eine Schnittstelle aber.
Wenn ein Prozess gestartet wird, verwenden Sie SetKernelObjectSecurity mit
DACL_SECURITY_INFORMATION
mit dem aktuellen Prozess zu behandeln. Legen Sie eine DACL mit null-ACLs. Dies wird deny all " - Zugang für jeden, einschließlich diejenigen, die versuchen, bis zum Ende Ihres Prozesses mit dem task-manager.Hier ist ein Beispiel, dass auch änderungen der Prozess-Besitzer:
Leider, es scheint nicht wirksam zu sein. Ich kann immer noch schließen Sie den Prozess (obwohl Sie nicht als Benutzer mit eingeschränkten rechten). Vielleicht ist der Task-Manager ist die Eigenverantwortung aufrufen oder einige andere Privileg, den Prozess zu beenden? Ich glaube mich zu erinnern diese arbeiten, die in früheren Versionen von Windows (ich wurde getestet, 2003), aber ich könnte falsch sein.
InformationsquelleAutor der Antwort Chris Smith
Ich hoffe, dass Sie nicht in der Lage wäre.
Update: angesichts der Szenario, ich denke, dass Sie wahrscheinlich am besten aus, läuft es unter einem anderen admin-Konto. Das kann helfen, aufmerksam auf die Tatsache, dass Sie nicht töten sollen den Prozess.
InformationsquelleAutor der Antwort Marcin
Alternativ könnten Sie schreiben, eine kleine "checker" - Dienstprogramm, das überprüft, ob die app läuft, wenn es nicht automatisch startet. Dann fügen Sie code, um die app zu überprüfen, für den "checker" - Dienstprogramm, das die gleichen. Auf diese Weise, wenn man gekündigt ist, dann die andere fängt es wieder auf. Ich habe mir scheinen die Viren tun dies, und es scheint zu funktionieren ziemlich effektiv.
InformationsquelleAutor der Antwort Chris Pietschmann
Wenn Sie einfach brauchen, um zu verschleiern, den Prozess und nicht verbergen vollständig, können Sie es umbenennen winlogon.exe oder svchost.exe und es wird wahrscheinlich ignoriert werden, indem der Benutzer. Aber wie Sergio schon erwähnt, dass "Sicherheit durch Verschleierung" und es hat einen schlechten Ruf für einen Grund.
Verhindern, dass Benutzer aus der Tötung ein Prozess ist eine weitere Schwierigkeit, wenn Sie die richtige Berechtigungen. Die einzige Methode die ich kenne haben mehrere Prozesse, die beobachten sich gegenseitig und starten Sie alle überwachten Prozess, der getötet wird. Wieder, dies ist hinunter ein schattiger Weg.
InformationsquelleAutor der Antwort Ben Hoffstein
Gibt es keine einfache oder unterstützte Weg, dies zu tun. Auch wenn Sie schrieb ein rootkit, es zu tun, dann könnte sehr leicht kaputt zu bekommen von einem zukünftigen update, das gemacht wurde, dass Loch zu Stopfen. Ich würde überdenken, ob das ist etwas, was Sie wollen.
InformationsquelleAutor der Antwort StubbornMule
Als oben genannten Personen, ist die beste Methode 2 Aufgaben, die überwachung jedes andere,
Ich verstehe Sie nicht wollen, um Verschwendung von CPU, so dass der beste Weg ist, um ein event etablieren, zwischen den Aufgaben, die ausgelöst wird, wenn man schließt.
Ich bin mir nicht ganz sicher, wie die Haken, aber dann brauchen Sie sich nicht mit einer while-Schleife, die nicht Abfall CPU.
InformationsquelleAutor der Antwort eitama
Einen Treiber schreiben - Sie können ObRegisterCallbacks zu registrieren process-Objekt Zugriff auf Benachrichtigung. Zurück STATUS_ACCESS_DENIED wenn DesiredAccess enthält Zugriffsrechte, die Ihnen nicht gefällt, wie Beendigung des Prozesses oder schreiben auf Speicher verarbeiten.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff558692(v=vs. 85).aspx
InformationsquelleAutor der Antwort Uriel G.
Nicht sicher, warum dies nicht vorgeschlagen worden, aber heres meine erste Antwort auf dieser Seite.
statt dass der Nutzer vor der Tötung eines Prozesses. (Erfordert rootkit hook.)
Sie können einfach deaktivieren Sie den task-manager verwendet werden, die mit einem registry-Eingang.
InformationsquelleAutor der Antwort Cacoon
Haben, die Sie bei uns schriftlich einen service? Diese Weise der Dienst als " lokales system, und die Anwendung läuft unter dem user-Kontext, und der service kann dafür sorgen, dass die Dinge noch getan werden, als benötigt werden, und die Anwendung ist nur eine Schnittstelle zu diesem Dienst. Töten würde die Anwendung nur der Benutzer nicht zu sehen, Mitteilungen, system-tray-icon, etc, aber der service ist immer noch seine Arbeit verrichtet.
InformationsquelleAutor der Antwort Rick
Viele Menschen könnten wissen, wie es zu tun, aber eben nicht hier posten. Es ist sehr gefährlich, post, schädlichen code auf dem internet. Wer weiß, könnten Sie in Gefahr sein. Bitten Sie einige computer-Ingenieur. Ich gebe Ihnen die Struktur des Programms, obwohl.
Nur injizieren Sie Ihr Programm mit der dll in explorer.exe.
Ihrem Prozess nicht nur show, weil es ist nicht als Programm, sondern wird, lief in einem Programm (explorer.exe). Der Benutzer will einfach nicht sehen, selbst wenn er mit jeder Art von task-manager.
InformationsquelleAutor der Antwort ABCDWHAT
Was Sie gerade bitten Sie den Benutzer, nicht den Prozess zu beenden ? Wie viel Zeit werden Sie damit verbringen, es zu tun, für ein Verhalten, das eindeutig kindisch von den Angestellten in der gleichen Firma.
InformationsquelleAutor der Antwort pmlarocque
Sah ich @Chris Smith Antwort, und ich beschloss, es zu konvertieren, um C#.
Hier ist der code, übernommen aus hierfür eine einfache Windows forms-Anwendung:
C# - Variante:
Es nach dem ausführen als eingeschränkter Benutzer, kann ich nicht töten, es aus der task-manager, nur als administrator.
Ich verließ die
X
- Taste, um in der Lage sein, um es zu schließen, ohne ein admin, aber es ist auch möglich, um es zu entfernen.Das Ergebnis:
Powershell-Variante:
InformationsquelleAutor der Antwort E235
stoppen Sie den Prozess endgültig getötet haben, das erste, was der Prozess tut, ist als "atexit ()" und habe atexit () - Funktion den Prozess zu starten
InformationsquelleAutor der Antwort user3629249
Ich weiß, diese Frage ist alt, aber ich antwortete, eine doppelte Frage vor einer Weile, dass enthält einige nette Informationen gibt, ist nicht mehr hier, so dass ich dachte, ich würde ihn verlinken. Siehe Meine Antwort auf die doppelte Frage. Auch wenn Ihr wahres Ziel ist das stoppen der Benutzer von der Tötung der Prozess dann, was weiß ich verwendet, um zu arbeiten, sehr leicht, aber es ist ein bisschen hackish und ich weiß nicht, ob das noch funktioniert, ist, einfach den Namen Ihrer Anwendung lsass.exe und task-manager wird nicht zulassen, dass selbst ein admin-user um den Prozess zu beenden. für diese Methode ist es egal, welcher user den Prozess gestartet hat, oder wo die ausführbare Datei liegt auf dem Dateisystem, es scheint windows nur überprüft, ob der Prozess benannt ist diese dann, damit Sie nicht beendet werden.
Update: ich habe gerade versucht zu tun lsass.exe trick auf windows 7 und es wurde anscheinend behoben, aber meine Vermutung ist, es funktioniert immer noch auf windows xp-und vielleicht sogar die früheren service packs der Versionen über xp. Auch wenn dies nicht mehr funktioniert, die zum Zeitpunkt des Schreibens dieses Artikels, ich dachte, ich würde es trotzdem gehören als fun fact.
InformationsquelleAutor der Antwort MitchellKrenz