|
Tras haber pasado por el proceso de inicialización, el virus
"Pusher" pasa directamente a comprobar si está ya residente en
memoria y a ajustar el valor correcto del desplazamiento relativo.
Para lo primero, y como la inmensa mayoría de los virus de DOS, nuestro
protagonista llama a su propio servicio de la interrupción 21h. En caso de
estar ya residente, la copia en memoria del virus devolverá un determinado
valor mediante el cual la generación que está en proceso de ejecución sabrá
que no será necesario volver a instalarse en memoria. En caso de que el
valor devuelto no sea el esperado, la copia activa sabrá positivamente que
no hay ningún indicio del virus en memoria, por lo que procederá a hacerse
un hueco en ella.
En cuanto al desplazamiento relativo, el virus utiliza un truco
antiheurístico, consistente en una serie de seis decrementos del registro
SI, igualando así el contenido de este registro con el valor necesario. De
haber empleado directamente, por ejemplo, "sub si,6", que habría
ocupado menos bytes, las alarmas heurísticas de la mayor parte de los
antivirus habrían detectado presencia vírica con mayor facilidad.
Zambulléndonos de cabeza en lo que sería la rutina de residencia en
memoria, es justo comentar que, así como el virus llama la atención en
cuanto a su originalidad en otros aspectos, en éste flojea hasta el punto
de caer en la mediocridad. "Pusher" se limita a llamar a la función
35h de la interrupción 21h para obtener el vector de dicha interrupción y
guardarlo en su código (para usarlo posteriormente), entonces definir el
nuevo tamaño del bloque de memoria y hacerse un hueco mediante los
servicios 4Ah y 48h, y más adelante apuntar con
ES:DI al espacio reservado en memoria, para así copiarse mediante un
"rep movsb". Tras esto, lo único que queda es redefinir el vector de
la interrupción 21h mediante la función 25h, haciendo que apunte al inicio
de su "handler", de forma que todas las llamadas que se efectúen a
esta interrupción serán interceptadas por el virus.
En cuanto "Pusher" concluye su proceso de residencia y ya se ha
copiado en la memoria de la máquina infectada, finaliza su ejecución y cede
el control a su huésped, saltando, como explicamos antes, a la dirección
100h por medio de un simple "ret".
|