Como bloquear procesos y ejecutables y no morir en el intento


Actualización : 16 de Agosto 2011



Algunos de ustedes han reportado errores y la imposibilidad de instalarlo en Windows Seven. La solución que he encontrado y que me ha funcionado es la siguiente.


1.- Escoger el servicio marcado con el número 1 en la foto. Clic derecho y buscar Propiedades.


2.- Buscar la ficha "compatibilidad" y marcar "Run this program in compatibility mode for " y buscar "Windows XP", como se ve en el número 2 de la foto.


3.-  En la foto, en el número 3, marcar "Run this program as an administrator"


4.- Hacer lo mismo no solo con "WindowsService1.exe" sino además con "InstallUtil.exe" y "Instalar.bat"


5.- Instalar luego de hacer todo lo anterior con normalidad.


Tenía un Windows 7 y al igual que muchos de ustedes no me funcionada. Instalé de esta manera (habilitando la compatibilidad con XP en varios archivos) y me resulto e instaló sin problemas.


¡Suerte a todos y a bloquear procesos!


EOF

Actualización : 28 de Abril 2011

He colocado los links donde pueden bajar los archivos, espero esta vez de manera permanente y que no sea borrado. Deben descargar solo los Zip's. Pueden bajarlos desde acá :


EOF

Una de las cosas más difíciles de hacer es restringirle a los usuarios acceso a ciertas aplicaciones. Seguro muchos dirán, pero puedes hacerlo por el Active Directory, que tal software, que tal truco, etc. Basta decir que nada me pareció, ni sencillo de implementar o administrar, y en la mayoría de casos ni siquiera de funcionar en todas las circunstancias. Por esto es que me decidí a programar un servicio de Windows que controla los procesos del sistema, bloqueando los que yo considere necesarios. Es más, que los bloquee incluso si es que el usuario trae una aplicación portable, tan famosas por ser tan difíceles de controlar. Incluso aún si el usuario el cambia el nombre al ejecutable.

¿Que es lo que quiero? Crear un servicio que vigile y monitoree los procesos que estén siendo ejecutados en mi PC. Esto incluye las aplicaciones portables. Incluso si le cambian el nombre al ejecutable y cambie el nombre del proceso, el servicio debe saber que programa es y debe evaluar si restringirlo o no.

¿Que objetivo persigo? Restringir mediante una lista algunos programas y evitar que puedan ser ejecutados.

Empezemos...

 
1.- Revisando un poco el codigo : No voy a detallar el proceso de crear un servicio. Para eso existen numerosos post, como este, y parto del supuesto que aquellos a quienes pueda interesar este post tienen conocimientos de programación suficientes como para crear un servicio. (Sugiero leer este post. La explicación es sencillísima y fácil de seguir hasta por los más novatos)

Les adjunto el link donde pueden bajar el proyecto hecho en VB.NET del servicio de Windows.

A continuación les coloco dos fragmentos del código para observar el "corazón "de la aplicación.

En este compara los procesos que estan corriendo con la lista de programas restringidos que hayamos definido. ( p.ProcessName.ToString = sLine )

...
      ' Recorrer los procesos y verificar su nombre con el listado de programas prohibidos

            For Each p In Process.GetProcesses()
                If Not p Is Nothing Then
                    For Each sLine In arrText
                        If p.ProcessName.ToString = sLine Then
                            p.Kill()
                            Call Registrar(p.ProcessName.ToString & " - " & Date.Now)
                        End If

                    Next
                End If
            Next
            arrText.Clear() : sLine = ""


En cambio acá compara el nombre original del archivo que genera un proceso con la lista de programas restringidos. Esto evita que un avispado cambie el nombre del ejecutable y pueda de esta manera evitar la restricción por nombre de proceso. ( Trim(sLine) = p.MainModule.FileVersionInfo.OriginalFilename )

...
         'Recorrer los procesos y verificar el nombre original del ejecutable con la lista de programas prohibidos.

            For Each p In Process.GetProcesses()
                If Not p Is Nothing Then
                    For Each sLine In arrText
                        Try
                            If p.MainModule.FileVersionInfo.OriginalFilename <> "" Then
                               If Trim(sLine) = p.MainModule.FileVersionInfo.OriginalFilename Then
                                    p.Kill()
                                    Call Registrar(p.ProcessName.ToString & " - " & Date.Now)
                                End If
                            End If
                        Catch
                        End Try
                    Next
                End If
            Next
            arrText.Clear() : sLine = ""


2.- Instalar el servicio : 

Acá les dejo el link con el servicio de windows listo para instalar.

Deben hacer lo siguiente :


  • Copiar la carpeta descomprimida en una ubicación permanente donde queramos que se quede.
  • Copiar los archivos en "logapp.txt", "blockTapp.txt", "blockapp.txt" en "C:/Windows" .  Luego explicaremos para que sirve cada uno
  • Ejecuta "Instalar.bat".
  • Listo, el servicio ya está instalado. Ahora hay que iniciarlo. Vamos a "Panel de Control/Herramientas/Servicios" y buscamos el servicio "Servicio control de procesos" (ese es el nombre que le puse). Hacemos clic sobre este para abrir las propiedades del proceso y lo iniciamos.
  • Para finalizar definamos que hace cada txt. "Logapp.txt" es un log de las acciones que hace el servicio (guarda los servicios o programas que ha bloqueado). No tienes que hacer nada con este archivo.
  • En "blockapp.txt" colocas el nombre del servicio. Simplemente vas al Administrador de tareas y ves que nombre tiene determinado proceso. Ojo, se debe colocar sin la extensión ".exe".
  • En el archivo "blockTapp.txt" coloco el nombre original del archivo. Me explico. Por ejemplo, quiero restingir el Firefox. Si lo hago por proceso (como en el paso anterior) un usuario puede cambiar el nombre del archivo y con esto el nombre del proceso cambia con lo cuál la restricción del paso anterior no sea válida. Por esto, podemos averiguar cual es nombre original del archivo y colocarlo en "blockTapp.txt". Ojo, a diferencia del caso anterior, esta vez si se debe colocar con la extensión ".exe"



¿Y que paso?  Estuve probando el servicio en varios equipos. Luego de un par de semanas todo va Ok. El servicio no hace mucho uso de la memoria, corre ligero. Y sobretodo, cumple con el objetivo.

Como explique al principio, seguro existen otras formas de bloquear programas (incluso los portables) pero sinceramente no encontré nada que satisfaciera mis requerimientos. Lo he probado con el Firefox, Chrome y Skype, incluidas sus versiones portables y todo trabaja bien. Espero que le sirva a alguien.

Saludos.

Alberto.

20 comentarios:

@sludgeman dijo...

Efectivamente hace años descubri que la PUCP tenia bloqueada la ejecucion de ejecutables no autorizados, pero que solo era necesario cambiarle el nombre a uno autorizado (ejemplo:Notepad.exe) para que pudiera ejecutarse.

apeves dijo...

El servicio controla también lo que comentas. :)

Anónimo dijo...

Me gustaría que el administrador me diese su correo o enviase un correo a victor-nafe@hotmail.com para comentarle unas cosillas que creo que le van a ser de ayuda.
Gracias y muy buen blog.


http://www.tiflotaller.com

La accesivilidad es cosa de todos.

Anónimo dijo...

Muy bueno el post.
Muy util.
Lo malo que los enlaces en rapidshare ya no funcionan.
Los puedes subir de nuevo

Arturo Suarez dijo...

Coincido con Anonimo anterior, se ve muy bien el programa, quisiera probarlo pero los links de rapidshare no funcionan, podrias actualizarlos o subirlo a otro sitio? gracias!

apeves dijo...

Ok, hoy en la noche (14-01-2010) lo subo. Bye

apeves dijo...

Perdón, hoy (14-01-2011) lo subo.

apeves dijo...

Ok, ya esta actualizado los vínculos :

http://rapidshare.com/files/443631785/Procesos_Control.zip

http://rapidshare.com/files/443631786/WindowsService1.zip

Alberto.

Anónimo dijo...

Amigo te dejo mi correo los link estan rotos contactame nesesito el codigo fuente urgente gracias espero tu respuesta vmpr10@hotmail.com

Anónimo dijo...

Amigo link rotos los prodras subir denuevo

apeves dijo...

¡Amigos! ya pueden descargar los archivos, están al inicio de ese post. Espero esta vez no sean borrados y puedan usarlo sin problemas. Saludos.

Anónimo dijo...

amigo la contraseña del archivo xD nola tienes?

apeves dijo...

No tienen contraseña.

xavipool8@hotmail.com dijo...

la verdad que esta muy bueno el programa lo estoy probando y funciona tal cual!! el problema ahora es si alguien tiene ya alguna lista armada de los portables, porque sino hay que bajar cada uno y saber el nombre de la aplicación y el nombre del proceso (el .exe), si alguien me puede subir una lista completa con muchos programas y juegos que necesito bloquear todo lo que sea portable!. Una cosa que le vi mal es si un programa tiene mas de una versión no se si cambian el nombre del proceso y suponiendo que es el mismo el programa pero con una versión diferente tendría que saber el nuevo nombre para bloquearlo y saber cada vez que sale una versión nueva para tener conocimiento de su nombre y agregarla a la lista!

Anónimo dijo...

Se ve genial pero no me funciona en Windows 7.
Alguien me puede ayudar?

Anónimo dijo...

Me da un error a la hora de istalar. dice: "La aplicacion no se ha podido inicializar correctamente (Oxc0000135). Haga clic en aceptar para terminar la aplicacion". despues de esto np hace nada de nada. si me pueden ayudar, se lo agradeceria mucho. un saludo cordial

Anónimo dijo...

Seria posible o mucho pedir que nos regalasen el codigo fuente para asi adaptar la idea a nuestro caso. si es posible, favor enviarme un correo a mvega@camanica.com.ni se lo estaria agradeciendo muchisimo y ya desde ahorita les felicito, he probado el servicio y bloquea todo bien.
saludos

Anónimo dijo...

ne algo lavorioso!! tengo una mejor solucion!! permiteles todo!!
no es cierto esta padre solo que lavorioso!!

Anónimo dijo...

Los links estan caidos, podrías subirlos a otro servidor? es muy interesante y quisiera echarle una prueba ya que tengo muchas maquinas que estan bajo mi control

rodrigo argueta dijo...

Links caidos, podrias subirlo a otro server? Me gustaría hacer la prueba.