Lunes, 8 de Septiembre de 2008
Pusher.374: Residencia
· Generalidades
· Inicialización
· Residencia
· En memoria
· Infección
· Polimorfismo
· Conclusiones

Volver al indice de articulos
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".