Son los más fáciles de detectar y (generalmente) de eliminar. Los virus de ficheros pueden estar -al menos- en tantos sitios como programas ejecutables haya. Los de arranque, sin embargo, sólo pueden situarse en dos sectores concretos del disco (en uno si es un disquete). Y, paradójicamente, son los virus más extendidos, más populares y que más estragos causan. En las líneas que siguen serán estudiados en profundidad.
Esos dos sectores tan característicos (en seguida se verá el por qué de sus particularidades) son el de arranque, tanto de discos duros como de disquetes, y el MBR (Master Boot Record) de los discos duros. Puesto que en ellos se alojan los virus, lo primero que hace falta es el saber cómo verlos. Se utilizará, como siempre, el DEBUG.
El sector de arranque es el primer sector lógico tanto de un disquete como de una partición DOS. En un disquete, ese sector coincide con el primer sector físico, pero en un disco duro eso no tiene por qué ser así. Como es el primer sector que "entiende" el DOS, en ambos casos se puede leer haciendo tan sólo: -l7c00 0 0 1 (cargar en el desplazamiento de memoria 7C00h de la unidad 0 -primera unidad de disquete- el sector 0 -primer sector lógico del disco- y leer sólo un sector). Para un disco duro sólo hay que cambiar el número de unidad: -l7C00 2 0 1.
El MBR está fuera de la partición DOS y, por tanto, no se puede acceder a él directamente. Hay que hacerlo con la BIOS, concretamente con la interrupción que maneja unidades de disco: la 13h. La lectura ahora ya no es de sectores lógicos: empezando por el 0 y de uno en uno hasta llegar al final. Ahora se trabaja con sectores físicos: cilindro:cabeza:sector. El MBR está en la cabeza 0, cilindro 0, sector 1. El código para leerlo se dio ya en la anterior entrega, aunque se repite aquí por conveniencia:
-a
XXXX:100 mov ax,0201
XXXX:103 mov bx,7c00
XXXX:106 mov cx,1
XXXX:109 mov dx,80
XXXX:10C int 13
XXXX:10E int 20
XXXX:110
-gEL PROCESO DE ARRANQUE
Desde el momento en que se aprieta el botón de encendido del ordenador hasta que el intérprete de comandos del sistema operativo elegido se encuentra a la espera de las órdenes pertinentes, hay toda una serie de complicadas acciones que a menudo pasan inadvertidas al usuario ordinario, pero que es imprescindible conocer para entender el funcionamiento de los virus de arranque.
Puesto que, como se explicó el mes pasado, estos virus toman el control del ordenador antes incluso de que llegue a cargarse el sistema operativo, es imprescindible que alteren el proceso de arranque habitual para cargarse ellos en memoria, y continúen después como si nada hubiera pasado para que el usuario no advierta comportamientos extraños. Se explicará primero el proceso de carga normal, tal y como lo pensaron en un principio los diseñadores del PC original de IBM, para ver a continuación el punto en que el virus tiene ocasión de modificarlo en su provecho y luego reconducirlo para que el cambio resulte transparente.
Al pulsar el interruptor de encendido, toda una avalancha de impulsos eléctricos empieza a recorrer el interior del ordenador. Haciendo abstracción de la parte circuital, pasado un tiempo (del orden de nanosegundos) los transistores del microprocesador han adquirido ya unos niveles de tensiones y corrientes adecuados, y la CPU se encuentra en condiciones de ejecutar instrucciones. En todos los PCs compatibles esas primeras instrucciones se encuentran en la misma posición de memoria: F000:0000, correspondiente a los chips de ROM que alojan la BIOS (Basic Input Output System) o "Sistema básico de entrada/salida". En esta zona se encuentran rutinas que realizan comprobaciones para asegurarse que los componentes necesarios para el buen funcionamiento del PC se hayan presentes y funcionan satisfactoriamente. Habitualmente esta parte del proceso de arranque recibe el nombre de POST (Power On Self Test, o "auto-test de encendido"): tras hacer una autocomprobación de la propia CPU, se envían señales por los buses al resto de la circuitería para comprobar que está presente y funcionando. Se comprueba la memoria de la tarjeta y se envían señales para controlar su funcionamiento. En este momento aparecen las primeras imágenes en la pantalla. Siguiendo con la ejecución del POST de la ROM-BIOS, se comprueba la RAM escribiendo datos en cada celda de memoria y leyéndolos a continuación para comparar que sean idénticos. Un contador de la cantidad de RAM que se lleva chequeada se muestra por pantalla.
A continuación se envían señales al teclado, comprobándose de paso si hay alguna tecla pulsada. Tras ello se envían más señales eléctricas a todas las unidades de disco, anotándose cuántas se hayan funcionando. En los PC AT y posteriores existe una memoria CMOS (conocida también como "el SETUP"), alimentada por baterías, en la que se guarda información relativa al hardware del equipo (tipo y número de discos duros, cantidad de memoria, etc...) que se mantiene aún cuando el ordenador está apagado. Por ello, si el equipo no es un XT, los resultados del POST son comparados con lo guardado en el SETUP, que es el resultado que cabía esperar. Si todo va bien se emite un único pitido, señal de que todos los tests han sido completados con éxito. En caso de haberse detectado problemas, la BIOS trata de informar de sus posibles causas.
Esos dos sectores tan característicos (en seguida se verá el por qué de sus particularidades) son el de arranque, tanto de discos duros como de disquetes, y el MBR (Master Boot Record) de los discos duros. Puesto que en ellos se alojan los virus, lo primero que hace falta es el saber cómo verlos. Se utilizará, como siempre, el DEBUG.
El sector de arranque es el primer sector lógico tanto de un disquete como de una partición DOS. En un disquete, ese sector coincide con el primer sector físico, pero en un disco duro eso no tiene por qué ser así. Como es el primer sector que "entiende" el DOS, en ambos casos se puede leer haciendo tan sólo: -l7c00 0 0 1 (cargar en el desplazamiento de memoria 7C00h de la unidad 0 -primera unidad de disquete- el sector 0 -primer sector lógico del disco- y leer sólo un sector). Para un disco duro sólo hay que cambiar el número de unidad: -l7C00 2 0 1.
El MBR está fuera de la partición DOS y, por tanto, no se puede acceder a él directamente. Hay que hacerlo con la BIOS, concretamente con la interrupción que maneja unidades de disco: la 13h. La lectura ahora ya no es de sectores lógicos: empezando por el 0 y de uno en uno hasta llegar al final. Ahora se trabaja con sectores físicos: cilindro:cabeza:sector. El MBR está en la cabeza 0, cilindro 0, sector 1. El código para leerlo se dio ya en la anterior entrega, aunque se repite aquí por conveniencia:
-a
XXXX:100 mov ax,0201
XXXX:103 mov bx,7c00
XXXX:106 mov cx,1
XXXX:109 mov dx,80
XXXX:10C int 13
XXXX:10E int 20
XXXX:110
-gEL PROCESO DE ARRANQUE
Desde el momento en que se aprieta el botón de encendido del ordenador hasta que el intérprete de comandos del sistema operativo elegido se encuentra a la espera de las órdenes pertinentes, hay toda una serie de complicadas acciones que a menudo pasan inadvertidas al usuario ordinario, pero que es imprescindible conocer para entender el funcionamiento de los virus de arranque.
Puesto que, como se explicó el mes pasado, estos virus toman el control del ordenador antes incluso de que llegue a cargarse el sistema operativo, es imprescindible que alteren el proceso de arranque habitual para cargarse ellos en memoria, y continúen después como si nada hubiera pasado para que el usuario no advierta comportamientos extraños. Se explicará primero el proceso de carga normal, tal y como lo pensaron en un principio los diseñadores del PC original de IBM, para ver a continuación el punto en que el virus tiene ocasión de modificarlo en su provecho y luego reconducirlo para que el cambio resulte transparente.
Al pulsar el interruptor de encendido, toda una avalancha de impulsos eléctricos empieza a recorrer el interior del ordenador. Haciendo abstracción de la parte circuital, pasado un tiempo (del orden de nanosegundos) los transistores del microprocesador han adquirido ya unos niveles de tensiones y corrientes adecuados, y la CPU se encuentra en condiciones de ejecutar instrucciones. En todos los PCs compatibles esas primeras instrucciones se encuentran en la misma posición de memoria: F000:0000, correspondiente a los chips de ROM que alojan la BIOS (Basic Input Output System) o "Sistema básico de entrada/salida". En esta zona se encuentran rutinas que realizan comprobaciones para asegurarse que los componentes necesarios para el buen funcionamiento del PC se hayan presentes y funcionan satisfactoriamente. Habitualmente esta parte del proceso de arranque recibe el nombre de POST (Power On Self Test, o "auto-test de encendido"): tras hacer una autocomprobación de la propia CPU, se envían señales por los buses al resto de la circuitería para comprobar que está presente y funcionando. Se comprueba la memoria de la tarjeta y se envían señales para controlar su funcionamiento. En este momento aparecen las primeras imágenes en la pantalla. Siguiendo con la ejecución del POST de la ROM-BIOS, se comprueba la RAM escribiendo datos en cada celda de memoria y leyéndolos a continuación para comparar que sean idénticos. Un contador de la cantidad de RAM que se lleva chequeada se muestra por pantalla.
A continuación se envían señales al teclado, comprobándose de paso si hay alguna tecla pulsada. Tras ello se envían más señales eléctricas a todas las unidades de disco, anotándose cuántas se hayan funcionando. En los PC AT y posteriores existe una memoria CMOS (conocida también como "el SETUP"), alimentada por baterías, en la que se guarda información relativa al hardware del equipo (tipo y número de discos duros, cantidad de memoria, etc...) que se mantiene aún cuando el ordenador está apagado. Por ello, si el equipo no es un XT, los resultados del POST son comparados con lo guardado en el SETUP, que es el resultado que cabía esperar. Si todo va bien se emite un único pitido, señal de que todos los tests han sido completados con éxito. En caso de haberse detectado problemas, la BIOS trata de informar de sus posibles causas.