2009-12-31 28 views
10

C'è un modo per proteggere la mia applicazione Delphi dall'essere uccisa dal task manager di Windows (o da altri come Process Explorer)?Come posso impedire a Task Manager di eliminare il mio programma?

Penso che i messaggi di Windows possano farlo (eseguendo un hook e intercettando il messaggio TerminateProcess).

Voglio un esempio di tale protezione. Le suite di Kaspersky Anti-Virus sono così; non possiamo terminare il loro processo in Task Manager.

+14

Quale motivo legittimo hai per farlo? –

+1

Suggerisco un'alternativa: avere un flag di stato che mostri lo spegnimento corretto, e se si è avviato senza che il flag di spegnimento sia impostato, registrarne uno (o più grande). E poi avere un servizio che monitora il tuo processo e garantisce che sia in esecuzione. Se l'utente lo uccide, riavvialo. Questo è ciò che facciamo con un processo "deve essere in esecuzione" che l'utente può fare. – mj2008

+7

Ho un suggerimento: per favore non farlo. –

risposta

11

programmi AV come Kaspersky probabilmente usare un gancio conducente e l'uso per evitare l'arresto. Nella tua situazione ti consiglio di impostare un ACL sul processo, questo impedisce la terminazione con Task Manager o strumenti cmdline (se l'utente non ha il privilegio di Debug). Ovviamente l'utente può sempre utilizzare uno strumento come Process Explorer, assumere la proprietà del processo, impostare un nuovo ACL e terminare.

Se l'utente non è un amministratore, è sufficiente eseguire il processo in un contesto utente diverso (ad esempio avviarlo da un servizio).

L'impostazione di un ACL di processo è molto semplice con lo Jedi Windows Security Library come illustrato in questo sample.

+1

oaky Remko, Questa libreria mi sta soddisfacendo, il che è mostrato nell'esempio potrebbe rispondere alle mie esigenze, perché voglio solo qualcosa "un" -chiappa da newbies (usa & taskmanager !!) – djiga4me

+1

Se Remko è la risposta che ti piace , dovresti contrassegnarlo come risposta accettata. – Josh

+0

@JoshEinstein Ora *** è *** civilizzato. +1 per il commento * e * la tua risposta. –

14

Come dice Kornel, ci sono la protezione a livello di sistema operativo dei processi isolati dagli utenti. Ma in generale, non c'è modo di impedire che il processo venga terminato da un utente con il permesso di farlo. E un utente ha il permesso di terminare i processi in esecuzione come tale utente.

Anche se si desidera eseguirlo come SYSTEM, non è possibile utilizzare questo processo per interagire con l'utente connesso. Avresti bisogno di eseguirlo come un servizio e non avrebbe GUI. Potresti provare altri approcci, come ottenere una DLL caricata in un processo come Explorer.exe che gli utenti non terminano perché non vogliono, ma è solo un abuso.

Sarebbe una situazione molto brutta per gli utenti finali se gli sviluppatori potessero semplicemente scrivere applicazioni che non potevano essere interrotte. Se si tratta di un'applicazione interna, è possibile controllare Server Fault per verificare se esiste un modo per ottenerlo con Criteri di gruppo.

-1

creare un progetto di NT-service, processi di servizio non possono essere uccisi con Process Manager, ma sono controllati dal responsabile del servizio interno.

5

Questa è una pessima idea. Se il tuo programma è in esecuzione sul computer di qualcun altro, è sulla loro proprietà, non sulla tua, e deve comportarsi come un ospite nella loro casa. Ciò significa che non ti comporti come se fossi il proprietario del posto, e certamente non dirai al proprietario del computer cosa non può fare con la sua proprietà, come uccidere un'attività che non vuole eseguire. Se lo fai, il tuo programma non è migliore del malware ed è probabile che venga trattato come un malware.

+3

-1: il computer non può essere di loro proprietà. per esempio. help desk dove i manager devono supervisionare gli operatori, soprattutto quando hanno accesso a dati sensibili. Il sistema operativo non riguarda gli ethi, si tratta di domande di programmazione –

+1

@Andy: in tale situazione, sono disponibili strumenti di modifica delle politiche appropriati per la gestione per gestire tali situazioni. E se pensi che l'etica possa essere separata dalla programmazione in qualche modo, ti preghiamo di non toccare mai più un compilatore. Non voglio correre il rischio che qualcosa che hai scritto finisca sulla mia macchina. –

+0

perché non descriverlo in dettaglio? OP ha già dato la sua parola che non si tratta di malware (nei commenti) –

3

Penso che tu stia facendo una domanda sbagliata.

Si sta tentando di risolvere "e se la connessione verrà interrotta nel mezzo della chat con il server" problema nel modo sbagliato. La risposta è non a "nega terminazione del processo", ma a "prevede problemi di connessione e scrive il codice di errore-fallback"!

Perché? Perché, ovviamente, la terminazione della connessione può essere dovuta a problemi di rete (non è possibile impedire agli utenti di scollegare la macchina dalla rete) e non alla risoluzione del client!

Why can't you trap TerminateProcess?

E se siete preoccupati per l'applicazione si è schiantato - basta usare Application Restart & Recovery API.

0

Il modo più semplice: è sufficiente avviare 2 processi e farli "guardare" l'uno sull'altro.
Se uno di questi è stato chiuso, lasciare che l'altro processo lo riavvii. Impedirà ai neofiti (come hai detto) di uccidere quel processo.

Ci dispiace, ma penso che la tua "Applicazione server/client" abbia le abilità trojan/backdoor. "L'app client invia alcuni dati utili", "processo non eseguibile" (nei commenti) sembra troppo strano per me.

Problemi correlati