2009-12-31 14 views
10

¿Hay alguna forma de proteger mi aplicación Delphi del administrador de tareas de Windows (u otros como Process Explorer)?¿Cómo puedo evitar que Task Manager mate mi programa?

Creo que los mensajes de Windows pueden hacer eso (haciendo un gancho e interceptando el mensaje TerminateProcess).

Quiero un ejemplo de esta protección. Las suites de Kaspersky Anti-Virus son así; no podemos finalizar su proceso en el Administrador de tareas.

+14

¿Qué razón legítima tiene para hacer esto? –

+1

Sugiero una alternativa: tener una bandera de estado que muestre el apagado correcto, y si se inicia sin que se establezca esa bandera de apagado, haga un registro de la misma (o más grande). Y luego tiene un servicio que monitorea su proceso y asegura que se está ejecutando. Si el usuario lo mata, simplemente vuelva a iniciarlo. Esto es lo que hacemos con un proceso "debe estar en ejecución" con el que el usuario puede meterse. – mj2008

+7

Tengo una sugerencia: por favor no hagas esto. –

Respuesta

11

AV Programas como Kaspersky probablemente utilicen un controlador y utilicen un gancho para evitar la terminación. En su situación, le aconsejaría establecer una ACL en el proceso, esto evita la terminación con el Administrador de tareas o las herramientas de línea de comandos (si el usuario no tiene el privilegio de depuración). Por supuesto, el usuario siempre puede usar una herramienta como Process Explorer, tomar posesión del proceso, establecer nuevas ACL y terminar.

Si el usuario no es un administrador, bastaría con ejecutar el proceso en un contexto de usuario diferente (por ejemplo, iniciarlo desde un servicio).

Establecer un proceso de ACL es muy fácil con Jedi Windows Security Library como muestra sample.

+1

oaky Remko, Esta biblioteca me satisface, lo que se muestra en el ejemplo podría responder a mis necesidades, porque solo quiero algo "imposible" para los novatos (uses & taskmanager !!) – djiga4me

+1

Si Remko es la respuesta que te gusta , debe marcarlo como la respuesta aceptada. – Josh

+0

@JoshEinstein Ahora *** eso es *** civilizado. +1 para el comentario * y * su respuesta. –

14

Como dice Kornel, la protección de los procesos a nivel de SO está aislada por los usuarios. Pero en términos generales, no hay forma de evitar que un usuario finalice su proceso con permiso para hacerlo. Y un usuario tiene permiso para finalizar procesos que se ejecutan como ese usuario.

Incluso si quisiera ejecutarlo como SISTEMA, no podría usar este proceso para interactuar con el usuario que inició sesión. Tendría que ejecutarlo como un servicio y no tendría GUI. Podría intentar otros enfoques, como obtener una DLL cargada en un proceso como Explorer.exe, que los usuarios no interrumpirán porque no quieren, pero eso es simplemente abusivo.

Sería una situación muy mala para los usuarios finales si los desarrolladores pudieran simplemente escribir aplicaciones que no pudieron ser finalizadas. Si se trata de una aplicación interna, puede verificar la falla del servidor para ver si hay alguna forma de lograrlo con la política de grupo.

-1

Cree un proyecto de servicio NT, los procesos de servicio no se pueden eliminar con Process Manager, pero son controlados por el administrador de servicios interno.

5

Esta es una muy mala idea. Si su programa se ejecuta en la computadora de otra persona, está en su propiedad, no en la suya, y necesita comportarse como un invitado en su hogar. Eso significa que no actúa como si fuera el dueño del lugar, y ciertamente no le dice al dueño de la computadora qué es lo que no puede hacer con su propiedad, como matar una tarea que no quiere ejecutar. Si lo hace, entonces su programa no es mejor que el malware, y es probable que sea tratado como malware.

+3

-1: la computadora no puede ser de su propiedad. p.ej. mesas de ayuda donde los gerentes deben supervisar a los operadores, especialmente cuando tienen acceso a datos confidenciales. El sistema operativo no se trata de cuestiones éticas, se trata de las preguntas de programación –

+1

@Andy: en tal situación, existen herramientas de edición de políticas apropiadas disponibles para que la administración maneje esas situaciones. Y si crees que la ética puede separarse de la programación de alguna manera, por favor, nunca vuelvas a tocar un compilador. No quiero correr el riesgo de que algo que escribiste termine en mi máquina. –

+0

¿por qué no describir esto en detalle? OP ya dio su palabra de que no se trata de malware (en comentarios) –

3

Creo que estás haciendo una pregunta incorrecta.

Está tratando de resolver "¿Qué pasa si la conexión se termina en el medio del chat con el servidor" problema de la manera incorrecta. La respuesta es no a "finalización del proceso de denegación", pero a "prevé problemas de conexión y escribe el código de error de retorno"!

¿Por qué? Porque, obviamente, la terminación de la conexión puede deberse a problemas de red (no se puede negar a los usuarios que desconecten la máquina de la red) y no a la terminación del cliente.

Why can't you trap TerminateProcess?

Y si usted está preocupado acerca de la aplicación estrellado - sólo tiene que utilizar Application Restart & Recovery API.

0

La manera más simple: puede simplemente iniciar 2 procesos y dejar que se "miren" el uno al otro.
Si uno de ellos se cerró, deje que el otro procese reinícielo. Evitará que los novatos (como dijiste) maten ese proceso.

Lo sentimos, pero creo que su "aplicación Servidor/Cliente" tiene habilidades de troyano/puerta trasera. "La aplicación cliente envía algunos datos útiles", "proceso inacabable" (en tus comentarios) parece demasiado sospechoso para mí.

Cuestiones relacionadas