Virus: Programación
PROGRAMACIÓN
 
 
Un virus no es más que un conjunto de instrucciones de programación. Habitualmente los virus se programan en lenguaje de muy bajo nivel ( ensamblador ) , pero podemos encontrar virus programados en C, Visual Basic, o lenguaje de Macros de Word o Excel, por ejemplo. 

 Un ejemplo del código de un virus sería este:

 
 
 
 
install_check:  cmp esi,"ANTI"  
                je reponde_cabron 
                jmp crypt_leave21h 
reponde_cabron: pushf  
Interrupt 21h 
      call dword ptr cs:[old21h]  
      mov esi,"ETA!"  
 

call delete_file                        ; ANTI-VIR.DAT files 
mov dx,offset del_this_shit02           ; And CHKLIST.MS shit 
call delete_file 
call free_24h_03h 
jmp exit21h

 
Estas instrucciones son incomprensibles para una persona que no conozca el lenguaje ensamblador. Pertenecen al virus ANTI-ETA escrito por GriYo del 29ª. Naturalmente y por razones obvias este no es todo el código del virus, es solo una pequeña parte del mismo. Este código se graba en un fichero y se pasa por un programa ensamblador y linkador, que lo convierte en ejecutable, es decir, con extensión .EXE o .COM. Después el virus se ejecuta e inicia el proceso de infección.
 
 
 

Ejemplo del Virus WorldCup98. Todo gran evento 
internacional merece la atención de los desarrolladores 
de virus.
 

Otros ejemplos
Proceso de infección: 

 El virus puede estar en cualquier sitio. En ese disquete que nos deja un amigo, en el último fichero descargado de Internet... 

 Dependiendo del tipo de virus el proceso de infección varia sensiblemente. 
Puede que el disco contaminado tenga un virus de fichero en el archivo FICHERO.EXE por ejemplo. El usuario introduce el disco en el ordenador ( por supuesto no lo escanea con un antivirus o si lo hace es con un antivirus desfasado ) y mira el contenido del disco... unos ficheros de texto, unas .dll's, un .ini ... ah, ahí esta, un ejecutable. Vamos a ver que tiene. El usuario ejecuta el programa. En ese preciso momento las instrucciones del programa son leídas por el ordenador y procesadas, pero también procesa otras instrucciones que no deberían estar ahí. El virus comprueba si ya se ha instalado en la memoria. Si ve que todavía no está contaminada pasa a esta y puede que se quede residente en ella. A partir de ese momento todo programa que se ejecute será contaminado. El virus ejecutará todos los programas, pero después se copiará a sí mismo y se "pegará" al programa ejecutado "engordándolo" unos cuantos bytes. Para evitar que usuarios avanzados se den cuenta de la infección ocultan esos bytes de más para que parezca que siguen teniendo el mismo tamaño. El virus contaminará rápidamente los ficheros de sistema, aquellos que están en uso en ese momento y que son los primeros en ejecutarse al arrancar el ordenador. Así, cuando el usuario vuelva a arrancar el ordenador el virus se volverá a cargar en la memoria cuando se ejecuten los ficheros de arranque del sistema contaminados y tomará otra vez el control del mismo, contaminando todos los ficheros que se encuentre a su paso. 

 
Puede que el virus sea también de "Sector de arranque". En ese caso el código del virus se copiará en el primer sector del disco duro que el ordenador lee al arrancar. Puede que sobreescriba el sector original o que se quede una copia del mismo para evitar ser detectado. Los virus de sector de arranque se aseguran de ser los primeros en entrar en el sistema, pero tienen un claro defecto. Si el usuario arranca el ordenador con un disquete "limpio" el virus no podrá cargarse en memoria y no tendrá el control. 

 Un caso menos probable es que el virus sea de "Tabla de partición". El mecanismo es muy parecido al de los de sector de arranque solo que el truco de arrancar con un disquete limpio no funciona con estos. En el peor de los casos nos encontraremos con un virus multipartita, que contaminará todo lo que pueda, ficheros, sector de arranque...

 
Técnicas de programación:
Técnicas Stealth 

Son técnicas "furtivas" que utilizan para pasar desapercibidos al usuario y a los antivirus. Habitualmente los virus ocultan el tamaño real de los ficheros que han contaminado, de forma que si hacemos un DIR la información del tamaño de los archivos puede ser falsa. Los virus de tabla de partición guardan una copia de la FAT original en otro lugar del disco que marcan como sectores defectuosos para mostrarsela al usuario cuando haga por ejemplo un FDISK. Incluso hay virus que detectan la ejecución de determinados antivirus y  descargan de la memoria partes de su propio código "sospechoso" para cargarse de nuevo cuando estos han finalizado su búsqueda.

Tunneling 

Es una técnica usada por programadores de virus y antivirus para evitar todas las rutinas al servicio de una interrupción y tener así un control directo sobre esta. 
Requiere una programación compleja, hay que colocar el procesador en modo paso a paso. En este modo de funcionamiento, tras ejecutarse cada instrucción se produce la interrupción 1. Se coloca una ISR (Interrupt Service Routine) para dicha interrupción y se ejecutan instrucciones comprobando cada vez si se ha llegado a donde se quería hasta 
recorrer toda la cadena de ISRs que halla colocando el parche al final de la cadena.

Antidebuggers 

Un debugger es un programa que permite decompilar programas ejecutables y mostrar parte de su código en lenguaje original. Los virus usan técnicas para evitar ser desemsamblados y así impedir su análisis para la fabricación del antivirus correspondiente. 

Polimorfismo o automutación 

Es una técnica que consiste en variar el código virico en cada infección ( más o menos lo que hace el virus del SIDA en los humanos con su capa protéica ). Esto obliga a los antivirus a usar técnicas heurísticas ya que como el virus cambia en cada infección es imposible localizarlo buscandolo por cadenas de código. Esto se consigue utilizando un algoritmo de encriptación que pone las cosas muy difíciles a los antivirus. No obstante no se puede codificar todo el código del virus, siempre debe quedar una parte sin mutar que toma el control y esa es la parte más vulnerable al antivirus. 

 La forma más utilizada para la codificación es la operación lógica XOR. Esto es debido que esta operación es reversible: 

        7 XOR 9 = 2 
        2 XOR 9 = 7 

En este caso la clave es el número 9, pero utilizando una clave distinta en cada infección se obiene una codificación también distinta. 

Otra forma también muy utilizada consiste en sumar un numero fijo a cada byte del código vírico.

TSR 

Los programas residentes en memoria (TSR) permanecen alojados en esta durante toda su ejecución. 
Los virus utilizan esta técnica para mantener el control sobre todas las actividades del sistema y contaminar todo lo que encuentren a su paso. El virus permanece en memoria mientras el ordenador permanezca encendido. Por eso una de las primeras cosas que hace al llegar a la memoria es contaminar los ficheros de arranque del sistema para asegurarse de que cuando se vuelva a arrancar el ordenador volverá a ser cargado en memoria.