Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: FeCe7 en 13 Diciembre 2005, 15:20 pm



Título: hacer un proceso inmortal?
Publicado por: FeCe7 en 13 Diciembre 2005, 15:20 pm
Buenas! por lo visto hay procesos como el del deep freeze que no se pueden matar, y todo el mundo pregunta como pueden hacer para matarlos, ahora hago yo la pregunta desde otro punto de vista, alguien sabe como se podria hacer inmortal un proceso en visual basic?
Ya se que ejecutandolo con el nombre lsass o csrss no se puede matar, pero me refiero a algo mas ''profesional'' como el deep freeze que da un error de acceso denegado al intentar matarlo desde el process explorer

Supongo que no sera facil... pero si el deep freeze lo hace, pues tampoco sera imposible...

gracias!


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 15:44 pm
Ummm, lo que dices de crear un proceso con el nombre de LSASS.EXE funciona en cierta manera, es decir: Si pulsamos Ctrl+Alt+Supr e intentamos cerrar nuestro proceso de LSASS.EXE nos deniega el acceso, pero si ejecutamos el comando:

taskkill /F /IM lsass.exe

Lo cierra completamente...

Asi que este método tampoco funciona.

Te voy a proponer un método para hacer un proceso imortal:

==========================

Este metodo no lo he puesto en practica, yo te explico mi teoria que he diseñado, solo falta ponerlo en practica y ver si realmente funciona...

Hemos de crear un proyecto (llamémosle "A") que sea capaz de droppear (crear otro proceso en tiempo de ejecución) llamado "B"

Es decir, tendremos un programa A.exe que al ser ejecutado cree otro llamado B.exe

El A.exe tendrá una rutina en formato de bucle para mantener SIEMPRE el proceso B.exe activo

Código:
x = Shell("B.exe",vbHide)

Y el proceso B.exe tendrá una rutina en formato bucle para mantener SIEMPRE el proceso A.exe abierto

Código:
x = Shell("B.exe",vbHide)

Luego, en el evento Unload o Terminate del proceso A.exe pondremos una rutina que nos ejecute el proceso B.exe

Y en el evento Unoal o Terminate del proceso B.exe tendremos una rutina que nos ejecute el proceso A.exe

Bien, espero que quede un poco claro...

Ahora vamos a suponer (todo esto es teorico, repito que no lo he probado y no se si funcionaria)

Si algun admin mata el proceso A.exe (usando el administrador de tareas o taskkill) entonces el B.exe se ejecutará, y a su vez el B.exe ejecutará el A.exe

Si algun admin mata el proceso B.exe (usando el administrador de tareas o taskkill) entonces el A.exe se ejecutará, y a su vez el A.exe ejecutará el B.exe

======================

Repito que este método me lo he imaginado, es pura teoria solo falta crear los proyectos y ver que realmente se mantienen ejecutados.

Podriamos complejar un poco con un tercer proceso C.exe para asegurarnos de que todo funcione bien


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 16:14 pm
Se me ha ocurrido otra manera que alomejor te puede ayudar:

Si dominas el lenguaje VBS podrás hacer un script que no se puede eliminar del disco duro mientras esté en ejecución, aqui esta el código:

Código:
Set fso = CreateObject("scripting.filesystemobject")
Set Myself = fso.opentextfile(wscript.scriptfullname, 1)
 MyCode = Myself.readall
Myself.Close

Do
 If Not (fso.fileexists(wscript.scriptfullname)) Then
  Set Myself = fso.createtextfile(wscript.scriptfullname, True)
   Myself.write MyCode
  Myself.Close
 End If
Loop

El funcionamiento es simple, al ejecutar el script guarda en una variable su propio codigo MySelf y después entra en un bucle que comprueba si existe su propio fichero. En el caso de que no exista vuelve a crear un archivo de texto con su propio código dentro.

Copiar el código y lo pegais en un notepad, lo guardais como "prueba.vbs" y lo ejecutais. Después intentar eliminar el archivo,  verás como despues de eliminarlo se copia él solito y sigue ejecutándose.

Para eliminarlo tienes que matar el proceso "wscript.exe" y después eliminar el fichero


Título: Re: hacer un proceso inmortal?
Publicado por: DrNeurus en 13 Diciembre 2005, 16:23 pm
Teoricamente esto es correcto, pero en la practica encontraras varios problemas.
1) Si matas el proceso nunca se ejecutara ni el evento Unload ni el evento Terminate, ya que matar el proceso significa detener la ejecucion de manera bruta, sin permitir al proceso acomodarse al cierre.
1a) La solucion seria que el proceso A busque al proceso llamado B, tome su ID y verifique con un timer que aun sigue abierto. En el caso de que no, lo ejecute de nuevo. Analogamente para el proceso B.
2) Los recusos para mantener ambos procesos deben ser muchos, o debe subirse la prioridad del thread, para mantener el timer que busca al otro proceso siempre activo. El timer obviamente debe ser lo mas rapido posible.
3) Este metodo del centinela no es nada profesional (en realidad depende de tu proyecto). La pregunta original se referia a denegar el cierre del proceso directamente, sin "tecnicas" externas. El DeepFreeze si se puede matar, pero no sirve de nada matarlo ya el programa es el icono del systray para poner la contraseña. Aun si "desisntalas" el DeepFreeze mientras esta activado el frezado no servira de nada.

Salu2.

PD: mientras escribia esto se publico la respuesta anterior. Mis discrepancias son, que si matas el Wscript.exe matas el proceso...  es justamente lo que no se quiere, o no? ademas, el VBS es limitado, y el codigo no funciona aun si se traduce al VB, ya que no se pueden eliminar archivos que esten en ejecucion.


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 16:34 pm
correcto nerus, he puesto en practica lo del proceso A y B y realmente no funciona si matamos uno d elos 2 procesos  >:(

Lo del VBS era una simple curiosidad, como bien he dicho si matamos el wscript.exe el script deja de funcionar y puede ser eliminado correctamente, pero en el caso de no matarlo, nuestro script se regeneraría en caso de ser eliminado. Solo era una simple curiosidad :)

==================

Hace poco más de 6 meses un amigo y yo nos embarcamos en un proyecto (llamado msn_h), dicho proyecto era un ejecutable que dejaba inserbible el sistema operativo actual, gozaba de rutinas para no ser descargado nunca de memoria, erá capaz de bloquear servicios de antivirus, ventanas de desinfección e incluso utilidades de reparación o restauración del sistema. dicho virus se ejecutaba incluso entrando en modo a prueba de fallos y por el momento no he encontrado un método efectivo que sea capaz de restaurar el sistema despues de ejecutar dicho programa.

Cuando termine la versión 2.0 la colgaré en este foro para que los usuarios se lo descarguen y lo prueben en sus máquinas virtuales, a ver si entre todo encontramos un método para eliminar el virus una vez ejecutado. Aviso que es muy complejo, ni yo mismo (su propio creador xD) he podido encontrar una vacuna contra él.

Repito que el virus era capaz de auto-ejecutarse en modo a prueba de fallos, cosa que no he visto nunca en ningún otro proyecto de VB :)


Título: Re: hacer un proceso inmortal?
Publicado por: Thaorius en 13 Diciembre 2005, 18:13 pm
Pondras el source del virus?
-------------------------------------
Para el procesos, puedes hacer com ote dijo DrNeurus o tambien en vez de un timer, podrias hacer un pipe y que ambos procesos se pasen informacion como si se esta tratando de cerrarlos, se inicio un debugger, movimeintos del usuario por le registro, etc y actuar en consecuencia. Tambine podes infectar el taskmgr o y el taskkill para evitar ser descargado.

Saludos


Título: Re: hacer un proceso inmortal?
Publicado por: FeCe7 en 13 Diciembre 2005, 18:18 pm
Woow MadAntrax, eso que dices suena bien, lo colgaras con el source? a mi no me interesa lo de dejar inservivle un sistema, simplemente estaba pensando como podria hacer un programa que una vez ejecutado ''no lo mueva ni dios'', tambien dicen que el troyano Flux es muy dificl de eliminar, pero nunca lo he usado y no se que metodo utilizara...

Por cierto, yo no tengo el deepfreeze (no creo que mi ordenador lo aguante, de todos modos) pero con el process explorer he intentado cargarme el proceso del deepfreeze y no murio y resucito, si no que me dio un error de acceso denegado, no se si seran versiones diferentes o que desde esa sesion no hay privilegios...

Ahh, por cierto, gracias por respodner tan rapido!!!


Título: Re: hacer un proceso inmortal?
Publicado por: FeCe7 en 13 Diciembre 2005, 18:26 pm
Oops, he posteado la misma pregunta que M@rT1n casi al mismo tiempo, sry, y otra cosa que se me olvido decir, no me acuerdo exatamente que programa era, yo diria que el spybot search & destroy, traya una especie de ''task manager'' bastante completo que permitia matar varios procesos simultaneamente justamente para evitar que dos o mas procesos se ejecuten entre ellos, asi que esa solucion no es del todo efectiva...

Por cierto, en el flux y en el deepfreeze (y tambien en mi nod32 y el "servicio de fax" de windows :D) al matar el proceso este se vuelve a ejecutar... pero... que es lo que lo ejecuta? es el propio ejecutable residente en memoria? o como se produce esta resurrecion milagrosa xDD

venga, un saludo.


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 18:36 pm
Bueno, con la salida de este post me estoy poniendo ahora mismo con la versión 2 del virus. Lo estoy estructurando en 2 modulos:

Modulo SURVIVE

Se encarga de que el proceso del virus nunca se finalice. Será inmune a cualquier gestor de procesos (como el que mencionabas del "spybot search & destroy") e incluso del propio administrador de procesos de Windows. Tampoco será afectado por el taskkill ni ningún programa similar :)

Para ello NO voy a reemplazar el taskkill.exe ni nada parecido, todo será através de un código algo complejo

También este modulo deniega que el usuario navegue por cualquier dominio de google (asi evitamos que el usuario use el buscador para buscar una posible vacuna), es más: El modulo se encarga de bloquear el internet explorer, opera y firefox, asi como outlook, mirc o messenger (ya sea de yahoo o msn) De esta manera dejamos el usuario "incomunicado" y no podrá buscar vacunas contra el virus.

El modulo se encarga tambien de bloquear cualquier intento de restauración del sistema, asi como la ejecucion de msconfig o cualquier otra utilidad que permita gestionar el funcionamiento del sistema (panel de control), bloquea el registro del sistema e incluso la consola de ms-dos.

Todos estos bloqueos los realiza sin eliminar los ejecutables ni infectarlos (regedit.exe, cmd.exe, ...) Usa un metodo alternativo y creo que bastante novedoso :P

Modulo 65% realizado

Modulo DESTROY

Este es el modulo que se encarga de destruir el sistema, dejandolo inservible. Tambien se encarga de modificar el sistema para que el virus se ejecute en cada inicio de sesión e incluso en "Modo a prueba de fallos". Como guinda final de este modulo: Permite que el virus se incruste en memoria cuando ejecutamos cualquier tipo de archivo pseudo-ejecutable, me explico:

Si el usuario ejecuta un exe, com, bat, vbs, reg, src, cmd o cualquier extensión que pueda generar un código de reparación (por ejemplo: vacuna.exe, vacuna.reg, ...) bloquea dicho ejecutable, lo descarga de la memoria e incrusta el código del virus en su lugar, de esta manera si el usuario ejecuta: vacuna.exe se descargará de la memoria y se ejecutara el virus.exe :P

EDIT: Se me olvidaba comentar una última cosa, es posible que algun usuario avispado pueda generar una vacuna contra este virus e intente incrustarla en archivo no-ejecutable, por ejemplo: Alguien podria pensar en crear la vacuna en javascript e incrustarlo dentro de un archivo HTML, no? Bueno pues decir que el virus tambien bloquea ese tipo de códigos (aunque esten embebidos en un HTML o CHM o cualquier otra cosa) Además como ya he dicho, los principales exploradores de internet estarán bloqueados (iexplorer, firefox y opera)

 ::)

Modulo 40% realizado

=======================

He decidido dividirlo en 2 modulos para que cada uno coja el modulo que le interese más para sus propios proyectos.

=======================

El source de este virus lo pondré acceso al público pero bajo una condición. Los usuarios que me aporten mejoras al código, algun bug, o algún método por el cual el virus puede ser finalizado recibirá el source completo.

Para ello voy a colgar el virus compilado junto con la estructura interna del código (para que sepais como trabaja por dentro) y podais testearlo en vuestras máquinas virtuales.

¿Que os parece la idea?


Título: Re: hacer un proceso inmortal?
Publicado por: icisneros en 13 Diciembre 2005, 19:09 pm
MadAntrax aunque no publiques el codigo fuente, podrias explicarnos el algoritmo del programa, Como has hecho las cosas?

Saludos!!


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 19:27 pm
Anarko, como ya he dicho quiero que primero probeis el código compilado en alguna maquina virtual y ver si tiene algun falo. No soy perfecto y lo más seguro que al final alguien pueda finalizarlo, por eso digo que quien consiga aportarme alguna mejora, bug o algun dato, le ofreceré a cambio el código completo.

Si al final el código resulta infalible y no hay forma de saltarlo donaré el source a la web elhacker-net para que todo el mundo se lo pueda bajar, junto con su explicación y tal.

Pero vamos, creo que cuando lo termine más de uno encontrará alguna forma de saltarlo :)


Título: Re: hacer un proceso inmortal?
Publicado por: askatasun en 13 Diciembre 2005, 20:44 pm
si no lo ven no lo pueden poner lo de fin del proceso no????

App.TaskVisible = False         
End Sub


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 13 Diciembre 2005, 20:48 pm
ASKATASUN el código que nos muestras sirve para ocultar el nombre del archivo de la barra de tareas, aunque hagas eso cualquier programa que permita gestionar procesos podrá finalizarlo sin problemas

EDIT:
El modulo de SURVIVE esta al 95% completado
El modulo de DESTROY esta al 80% completado

Solo falta que lo testee en mi máquina para ver si hay algún error, en unos dias abro un nuevo post para informarlo todo desde el principio


Título: Re: hacer un proceso inmortal?
Publicado por: juampivicius en 16 Diciembre 2005, 21:38 pm
MadAntrax lo que estás haciendo es realmente bueno si cuenta con todas esas cosas que enlistaste...pero pensé en una posibilidad..porque los virus siempre se elimian desde un lugar que no son capaces de actuar..por eso se apela al DOS por ejemplo...pero si decis que funciona hastan en distintos SO ..pero que pasaría si un programa que bootea desde el inicio se corre y busca el virus?..casi de la misma forma en que se borrán los virus que quedan en el mbr del disco.....capaz también es eficaz hasta en ese momento...y sería casi indestructible..pero bue....

Saludos


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 16 Diciembre 2005, 22:13 pm
es evidente que si optamos por arrancar nuestra maquina desde otro sistema operativo booteable (un livecd de linux, por ejemplo) podremos entonces entrar en el sistema sin que el proceso del virus se ejecute. pero en ese caso el virus se abria inyectado en el sistema operativo principal, copiandose entre los archivos y haciendo casi imposible una reparación del sistema.

la solucion seria format y reinstalar de nuevo el SO

EDIT: Dejemos este tema ya, porque tengo entendido que no se pueden hablar de virus en este foro.


Título: Re: hacer un proceso inmortal?
Publicado por: juampivicius en 16 Diciembre 2005, 22:48 pm
PErdón no sabía..sólo me interesó el tema y aporte mi opinión...nada más.. pregunta MaDANtrax se puede descargar ese programa de algún sitio en dónde lo hayas puesto..es que entré en tus webs pero no hay nada...
Saludos


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 16 Diciembre 2005, 23:05 pm
No, todavia no he hecho público el código. Me falta terminar un poco el proyecto. Cuando lo termine abriré un post en la sección de virus y troyanos de este foro para que os lo podais bajar.

Gracias


Título: Re: hacer un proceso inmortal?
Publicado por: [D4N93R] en 17 Diciembre 2005, 00:43 am
Wenas Mad, como esta todo? Solo te pregunto algo por curiosidad, Que tipo de reproduccion tiene tu virus? aparte de la infeccion de ejecutables?

Seria bueno q se ejecutara el Modulo Destroy despues de cierto tiempo y en ese tiempo se reprodujera por ejemplo por redes p2p o msn enviandose por mensaje, o email, discos flexibles..

saludos.. suerte con tu virus


Título: Re: hacer un proceso inmortal?
Publicado por: Mad Antrax en 17 Diciembre 2005, 00:57 am
Jeje, no tiene ningun modulo de reproducción (es un virus, no un gusano). Y la finalidad de este virus no es el hecho de infectar, si no programar una buena rutina para que un usuario no puedo finalizar el proceso del virus.

Por cierto, no infecta ejecutables :) se inyecta en ellos sin modificar su estructura :P


Título: Re: hacer un proceso inmortal?
Publicado por: [D4N93R] en 18 Diciembre 2005, 03:27 am
si yo se q no es un gusano, lo q yo decia por ejemplo, es q se inyectara solo en ejecutables de las carpetas de share de los p2p, pq seria bueno algo asi, como cualquier biovirus o forma de vida natural, él deberia reproducirse. yo actualmente estoy pensando la forma de hacer virus autoevolutivos, es algo enrredado.. saludos...


Título: Re: hacer un proceso inmortal?
Publicado por: askatasun en 18 Enero 2006, 20:40 pm
Jeje, no tiene ningun modulo de reproducción (es un virus, no un gusano). Y la finalidad de este virus no es el hecho de infectar, si no programar una buena rutina para que un usuario no puedo finalizar el proceso del virus.

Por cierto, no infecta ejecutables :) se inyecta en ellos sin modificar su estructura :P

cual es la finalidad del virus? 

- otra cosa, si lo podra ver con un programa adecuado, pero nunca esta de mas ponerlo (App.TaskVisible = False)