|
La otra alternativa en cuanto al método de acceso a
posibles víctimas se refiere es la accíón directa,
cuya presencia no excluye la presencia del otro
método posible, la recién explicada residencia por
proceso.
La acción directa no representa nada nuevo de lo que
podamos ofrecer información que la mayoría de los
lectores no conozcan: desde los primeros virus de
fichero del DOS hasta Bizatch, el primer ejemplar
nativo de Win95, el procedimiento no ha cambiado: lo
único nuevo en Win32 es la adaptación de las rutinas
ya conocidas al sistema de APIs, que también han
traído consigo nuevas estructuras, como la conocida
como WIN32_FINDDATA, que se podría describir como
una especie de unión entre la DTA (Disk Transfer
Area) y la SFT (System File Table) del DOS, a juzgar
por los datos que nos facilita en relación con los
ficheros encontrados por Find(First/Next)File.
Tras dilucidar si el flag correspondiente a la
búsqueda de ficheros por acción directa está en su
posición on, y siempre que esto sea así, Girigat
pasa a comprobar otro de sus flags, mediante el
cual determinará si el radio de acción del runtime
afectará tan solo al directorio actual o si llegará
a afectar también al directorio en donde está ubicado
Windows(9x/NT). Las APIs empleadas con el propósito
de obtener el nombre de dichos directorios son
GetCurrentDirectory y GetWindowsDirectory, y,
a partir de aquí, la rutina empleada para buscar y
procesar ficheros es la misma.
Dicha rutina comienza comprobando que el directorio
actual no es el raíz, en donde la actividad vírica
podría llamar más la atención que en el resto de los
directorios del disco duro, debido a que generalmente
es en el que se tiene un mayor control del tamaño de
los ficheros. Girigat efectúa esta comprobación por
medio de un ingenioso truco: si la distancia entre el
último y el primer byte de la cadena ASCIIZ
correspondiente al nombre del directorio actual es
igual a cuatro, no cabe la menor duda de que se trata
del raíz (ya que cuatro son los bytes que ocupan la
letra de la unidad, los dos puntos, la barra invertida
y el cero que indica el final de la cadena).
A partir de aquí el virus emplea Find(First/Next)File
para encontrar ficheros, por medio del wildcard o
patrón de búsqueda "*.*", ya que Girigat es capaz de
infectar ficheros con distintas extensiones (en este
caso, CPL, EXE y SCR). Una vez que la estructura
WIN32_FINDDATA contiene los datos de alguna posible
víctima, el virus comprueba que el tamaño del fichero
deja espacio suficiente para el cuerpo del virus y
4096 bytes extra sin llegar a alcanzar el tope de los
FFFFFFFFh bytes. En caso de que el fichero haya pasado
este fácil "test", Girigat pasará a llamar a una
función específica de manipulación de posibles víctimas,
la cual emplea también desde los handlers residentes,
tras haber procesado el nombre del fichero por medio
de un bucle de homologación. Las comprobaciones
efectuadas por medio de esta rutina común se limitan a
chequar la extensión del fichero de acuerdo con los
flags activados (CPL, EXE o SCR) y a llamar a la
consiguiente rutina de infección en caso de que todo
haya salido como el virus esperaba.
Éste es el proceso que sigue Girigat para encontrar
ficheros nuevos por infectar, y así es como "trabaja"
con cada uno de los programas que caen en sus manos
por medio de las APIs FindFirstFile y FindNextFile,
hasta que esta última retorna un error, al no haber
más ficheros en el directorio en el que el virus está
procurándose nuevas víctimas. Como es posible apreciar,
este método de infección no posee nada de especial ni
ningún detalle excepcional digno de reseñar, por lo
que directamente pasamos a analizar el siguiente
apartado del virus, la rutina de infección de ficheros.
|