#Siempre cargado en memoria
#Autor: MOWPaX[GEDZAC] <mowpax@gedzac.com>

Creo que la mayoria de los coders siempre buscan la posibilidad de que sea “imposible” matar la ejecución de su virus. Yo buscando alguna manera, se me ocurrio una idea, que funciona a la perfeccion.

Primero lo que deberiamos hacer, es que cuando el virus se ejecute, haga 2 copias o mas de el y ejecutarlas, entonces ahí tendriamos el virus ejecutandose 2 veces.
Un usuario comun los cerraria con el taskmgr, pero seguro que nuestro virus ya lo bloqueo, asi que buscara algun mataprocesos, y sin ningun problema lo cerrara.
Entonces lo que haria el virus es verficar cada cierto tiempo si nuestra copia esta en ejecución:
Virus1->Verifica->Virus2
Virus2->Verifica->Virus1

Si por alguna razon el virus 1 se encuentra con que virus 2 no esta en ejecución, lo vuelve a ejecutar (seria mejor que antes de ejecutarlo lo cree de nuevo por las dudas de que ya haya sido borrado).

Ahora se preguntaran, ¿De que manera verifico si mi hermano esta en ejecucion?
Para entender el code, paso a explicar la Api que utilizare, FindWindow

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Veamos su estructura:
lpClassName = Aca tendriamos que asignar el ClassName de la ventana a buscar.
lpWindowName = Aca iria el titulo de la ventana a buscar.

Si no conocemos alguna de esas dos le ponemos el valor vbNullString

Ejemplo:
Jandle = FindWindow(vbNullString, “Editor del Registro”)
If Jandle <> “” then
Msgbox “Handle del registro: ” + Jandle
Else
Msgbox “El registro no esta abierto”
End if

Ese ejemplo nos daria como resultado el handle del regedit si es que esta abierto.

Para saber si nuestro hermano esta abierto tendriamos que poner en vez de “Editor del Registro” el caption del form de nuestro virus, y si el resultado da 0, es porque nuestro hermano ha sido cerrado, entonces lo volvemos a ejecutar.
Ejemplo:

Private Sub Form_Load()
Me.Caption = App.exename
End Sub

Eso haria que cada hermano tenga como caption del form, su nombre.

Entonces en un timer podriamos poner algo asi:

Private Sub Timer1_Timer()
Doevents
Virus1 = FindWindow(vbNullString, " Virus2")
Virus2 = FindWindow(vbNullString, "Virus1")
'If Virus1 = "0" Then Call Centinela("Virus2")
'If Virus2 = "0" Then Call Centinela("Virus1")
End Sub

Sub Centinela (Virus)
FileCopy App.EXEName + ".exe", “C:\” + Virus + “.exe”
Shell “C:\” + Virus + “.exe”
End Sub

Paso a explicar:
Cada hermano va a tener un caption en el form diferente:
Virus1.exe = virus1
Virus2.exe = virus2

Entonces con FindWindow, buscamos esas ventanas, si nos devuelve un handle es porque el virus esta abierto, sino es porque ha sido cerrado, tonces llamamos al Sub Centinela, pasandole el nombre del hermano que ha sido cerrado, lo creamos y lo volvemos a ejecutar.
Recomiendo que el timer tenga un intervalo bastante chico, yo probe con intervalo 1, y me andubo a la perfeccion, y me fue imposible cerrar el virus.

Espero que este articulo haya sido de interes para ustedes, ya que a mi me parecio una excelente forma de proteger la ejecución de nuestro virus.