Ich schreibe eine App in C# und C++/CLI, und ich habe Code, der Prozesse aussetzt. Ich möchte jedoch verhindern, dass sie durch einen anderen Prozess (z. B. den Prozess-Explorer) deaktiviert werden. Ist es möglich, ein exklusives Prozess-Handle zu erhalten oder andere Anwendungen anderweitig daran zu hindern, diesen Vorgang durchzuführen? Und wenn ja, wie?Exclusive Process Handle erhalten
Antwort
Dies ist aus dem Benutzermodus nicht möglich.
Jeder Prozess, bei dem SE_DEBUG_PRIVILEGE
im Token aktiviert ist, kann den Prozess/Thread-Handle mit allen Zugriffen öffnen (nur wenn der Prozess nicht geschützt ist).
vom Kernel-Modus können Sie eigenen Rückruf mit ObRegisterCallbacks
registrieren und Prozess/Threads offenen Versuch zu filtern. sagen Sie verweigern Griff öffnen oder entfernen PROCESS_SUSPEND_RESUME
, THREAD_SUSPEND_RESUME
und THREAD_RESUME
von DesiredAccess
in OB_PRE_CREATE_HANDLE_INFORMATION
. aber dies verhindert nicht, dass ein anderer Kernelmodus-Code-Aufruf api PsResumeProcess
exportiert wird.
im Allgemeinen Objektgriffe unterstützen teilweise exklusiven Zugriff. Suchen Sie nach OBJ_EXCLUSIVE
Flag in OBJECT_ATTRIBUTES
(Dies wird immer als 3-Parameter an alle Open/Create Objekt Aufruf übergeben - ZwOpenProcess
als auch), aber dies wird nur Arbeit , wenn die Flag gesetzt wurde, wenn das Objekt erstellt wurde. sonst haben Sie STATUS_INVALID_PARAMETER
oder wenn Handle bereits von einem anderen Prozess geöffnet wurde, haben Sie STATUS_ACCESS_DENIED
. aber weil Prozesse immer ohne Flag erstellt - Sie und kann es nicht öffnen Griff in exklusiven (ich schon nicht darüber in csrss.exe
im Zusammenhang mit der Prozesssitzung bereits bestehen öffnen Griff zu Ihrem Prozess)
Sie können Code in einen anderen zu injizieren Verarbeiten und patchen Sie die von NTDLL exportierten NtResumeProcess- und NtResumeThread-Routinen. Die exportierten Routinen führen einen Systemaufruf durch, den Sie jedoch abfangen können, bevor dieser Übergang stattfindet, und leiten die Ausführung an Ihre eigene Rückrufroutine weiter, um Filterung anzuwenden - STATUS_ACCESS_DENIED oder einen anderen geeigneten NTSTATUS-Fehlercode zurückgeben, um den Vorgang zu blockieren.
Dies verhindert jedoch nicht, dass jemand Ihren Patch mit einem manuellen Systemanruf umgehen kann. Ihre beste Wette ist ObRegisterCallbacks und Strippen PROCESS_SUSPEND_RESUME für jeden anderen Anrufer als Sie.
Die erste Methode über Laufzeit-Byte-Patching ist in Ordnung, da das Hooking im Benutzermodus keine Rolle spielt, solange es korrekt ausgeführt wird. Es gibt auch Open-Source-Bibliotheken, um dies zu erreichen, Microsoft besitzt auch eine eigene API-Hooking-Bibliothek namens MS Detours. Die ObRegisterCallbacks-Methode erfordert einen Gerätetreiber im Kernelmodus, und damit ist eine digitale Signatur erforderlich, die das Signieren im Kernelmodus unterstützt (und für die Unterstützung von Systemen, auf denen Secure Boot aktiviert ist, benötigen Sie eine Extended Validation-Signatur wird nur an wirklich registrierte Unternehmen vergeben und ist sehr viel teurer).
Viel Glück.
- 1. Erhalten Ergebnis langlebig Livecycle Process
- 2. Elasticsearch Zueinander Exclusive Ergebnisse
- 3. Wie erhalten Sie einen Hauptfenstergriff von Process in C#?
- 4. Exclusive OR in Schema
- 5. Mutually Exclusive Daten Attributselektoren
- 6. UIBarButtonItem, set exclusive touch
- 7. Voluptuous Exclusive Class
- 8. Exclusive Abfrage mit SQL IN()
- 9. XPath 1.0 exclusive oder node-set Ausdruck
- 10. Verwenden Get-Process verrohrt falsch Stop-Process
- 11. Handle Guzzle Ausnahme und HTTP-Körper erhalten
- 12. Handle simultan erhalten Anrufe in angularjs
- 13. Process InputStream
- 14. Process Accessability
- 15. HANDLE in Handle umwandeln
- 16. Erlang Process Message Suppression
- 17. Was ist der Unterschied zwischen Inclusive und Exclusive OR?
- 18. Java Process InputStream Fehler?
- 19. Wie erhalten Sie Aktuelles Fenster Handle Count und Window Handle Limit in .NET?
- 20. Process Observable auf Hintergrund Thread
- 21. Handle Multiprozess in Python
- 22. Apple Certification Process
- 23. iphone daemon process
- 24. python process._sbootstrap()/.start()
- 25. Long running java process
- 26. Textklassifizierung - Label Pre Process
- 27. Problem mit Process Exited
- 28. ASP.NET Process Konfiguration Optimierung
- 29. JSON.NET serialisiert Process
- 30. In-Process Hintergrund Aufgabe
Die beste Richtung, die ich Ihnen geben kann, wäre die MSDN-Dokumentation zu [Prozesssicherheit und Zugriffsrechte] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684880 (v = vs.85) .aspx). Sie können möglicherweise die ACLs der Prozesse ändern, die Sie suspendieren, um zu verhindern, dass andere Prozesse die Prozesse aufheben. Wenn Sie die Sperre dann aufheben möchten, müssen Sie die ACL erneut ändern, die Aufhebung der Sperre aufheben und die Zugriffssteuerungsliste erneut einschränken. Andere Prozesse mit ausreichend hohen Zugriffsrechten (wie "SeDebugPrivilege", die Ihre App wahrscheinlich auch benötigt) können jedoch Ihre Einschränkungen außer Kraft setzen. – ozeanix
Und für das, was es wert ist, nur "SeDebugPrivilege" für Ihre eigene App zu bekommen kann eine ziemliche Herausforderung sein!Meine Erinnerung ist, dass Ihre App als 'SYSTEM'-Benutzer ausgeführt werden muss, um genügend Privilegien zu haben, um seine eigene Privilegliste zu ändern. – ozeanix
@ozeanix, nicht wenn du es richtig machst. Jeder Prozess, der mit Administratorrechten ausgeführt wird, kann Debug-Berechtigungen aktivieren. (Nun, in der Standardkonfiguration sowieso.) –