Este puente ando rescatando cosas de mi antiguo portátil al nuevo, y he descubierto una carpeta que contiene algunos textos y muestras de cuando hacía las primeras comparativas antivirus para PcActual, a finales de los 90.
Me ha traido muchos recuerdos de las pruebas que hacía entonces, desde llamar a altas horas de la madrugada un fin de semana simulando ser un cliente con problemas de infección, a todo tipo de tests de detecciones con diferentes muestras. Sin duda lo más complicado era intentar mantener una colección de muestras representativas y no adulterada para hacer los tests.
Me he topado con un archivo, "anzuelo.com", que recuerdo formaba parte del más de centenar de muestras que catalogué en mi coleccion como "novirus". Todos sabemos que un motor antivirus tiene un "positivo" cuando detecta de forma correcta un archivo infectado o malicioso, mientras que un "falso positivo" se produce cuando detecta erróneamente como malware un archivo limpio, bien por problemas de heurística, bien coincidencia con una firma, etc.
¿A qué llamaba "novirus"? Pues a un archivo que era detectado como malware por uno o varios motores antivirus pero que, a diferencia del "falso positivo", no se trataba de un error. Es decir, el laboratorio antivirus había desarrollado una firma para identificar ese archivo en concreto, aunque no era un virus ni representaba ningún peligro para el usuario o sistema. En definitiva, sin entrar a discutir si era de forma premeditada o no, se creaba una firma para identificar a un falso virus.
No me he podido reprimir, y he enviado el "anzuelo.com" a VirusTotal, a ver si continuaba siendo detectado.

En su día, 1999, tan sólo Sophos lo detectaba como "Troj/Anzuelo", pero debió tomar nota de lo que publiqué en aquella comparativa y, con buen criterio, retiró la firma para no volver a detectarlo. Curiosamente ahora es detectado por 2 motores antivirus, McAfee tal y como aparece en la captura de pantalla, y TrendMicro como "JOKE_ANZUELO.A" (os recuerdo que TrendMicro es el único antivirus que no quiere participar en VirusTotal, por eso no aparece en el listado).
En ambos casos resuelven la papeleta al utilizar el prefijo "JOKE", que se utiliza para nombrar a los programas no deseados que no dejan de ser bromas y no representan un peligro real. La nomenclatura original de Sophos se prestaba a más confusión, porque directamente lo catalogaron como troyano. Rectificar es de sabios.
Aprovechando que es un COM de tan sólo 41 bytes, y que se trata de un espécimen totalmente inocuo (lo de "peligroso" en el título de esta entrada iba con segundas), me permite proponeros un análisis para saber exactamente que hace este ejecutable. Ya sabes, desde ahora podrás decir que has desensamblado y analizado un "supuesto virus" tú mismo :p
Lo primero es descargar el archivo anzuelo.com en algún directorio de tu ordenador. Recuerda que si tienes un antivirus de McAfee o TrendMicro puede que no te deje.
Suponiendo que estamos en Windows, y que has descargado el archivo en el directorio c:/temp, abre una ventana de DOS, sitúate en c:/temp, y ejecuta "debug anzuelo.com".

Si no te sonaba la utilidad DEBUG, lleva en DOS toda la vida, desde la primera version DOS de IBM en 1981 hasta en las últimas versiones de Windows. Aunque es bastante primitivo, sobra para el ejemplo y te evitará tener que descargarte alguna utilidad adicional para desensamblar.
Una vez que tenemos cargado en memoria el anzuelo.com, le vamos a dar una orden a debug para que nos lo muestre desensamblado (comando U rango). Como los archivos COM se cargan después del prefijo de segmento de programa (PSP, no confundir con la consola) que ocupa 256 bytes (100 hexadecimal), y anzuelo.com tiene 41 bytes (29 si lo pasamos a formato hexadecimal), el rango a indicar será de 100 a 128 (como en 100h ya se encuentra el primer byte hay que restar uno para tener el límite final, 100h+29h-1h=128h). Es decir, comando: u 100,128

Ahora ya podemos ver los 41 bytes de anzuelo.com desensamblado. Tendremos 4 columnas, la primera indica la dirección de memoria, en la segunda los bytes que hay en cada zona de memoria, y la tercera más la cuarta la interpretación en lenguaje ensamblador (instrucción + parámetros) de los bytes de la segunda columna.

Los .COM siempre comienzan con un salto, instrucción JMP, a la dirección donde se encuentra la primera instrucción propia del programa. En esta ocasión el salto es a 011E, donde comienza con la instrucción MOV DX,0103 le sigue MOV AH,09 y INT 21.
La interrupción 21h del DOS sirve, entre otras cosas, para las funciones de entrada y salida en consola/pantalla. A través del registro AH se selecciona el servicio, en este caso se ha asignado 09 que sirve para mostrar una secuencia de caracteres que comienza en la dirección DX hasta que se encuentra el carácter "$" (24 en hexadecimal) que indica el final.
Como la instrucción MOV DX,103 sitúa el comienzo de la cadena que va a mostrar en pantalla en la dirección 0103, vamos a ir formando la cadena hasta la dirección 011B donde se encuentra el final del mensaje (secuencia 0D0A24, 0D0A CR/LF de retorno de carro y línea nueva, y 24 o "$" que indica el final de la cadena).
Para saber que es lo que ha asignado al registro DX tendremos que traducir a ASCII los bytes desde la dirección 0103 hasta 011B, en concreto tenemos 0D 0A 53 6F 79 20 75 6E 20 43 4F 4D 20 69 6E 66 65 63 74 61 64 6F 21 21. Los dos primeros bytes 0D0A son CR+LF (código de nueva línea, dejará una línea en blanco), y a partir del 53 comienza la cadena. 53h a decimal es 83, que equivale al carácter "S", 6Fh a decimal es 111, que equivale al carácter "o", 79h a decimal es 121, que equivale al carácter "y", etc. Haciendo la serie completa obtenemos la cadena "Soy un COM infectado!!".
Por último nos encontramos con las instrucciones MOV AH,4C y INT 21, que de nuevo llama a la interrupcion 21, y en concreto al servicio 4C que lo que hace es terminar el proceso, es decir, finaliza el programa.
En definitiva, todo lo que hace el programa es mostrarnos por pantalla la frase "Soy un com infectado!!". Nada más, y nada menos. Acabamos de ver en ensamblador lo que equivaldría en BASIC a un PRINT "Soy un com infectado!!".
Si estás aun con la ventana DOS en debug teclea el comando "q" y dale al intro para salir de debug. Una vez en el prompt, ejecuta sin miedo anzuelo.com, verás como aparece la frase en pantalla y termina.

Pues este programa fue catalogado por Sophos a finales de los 90 como troyano bajo la denominación "Troj/Anzuelo", que como hemos dicho afortunadamente rectificó y dejó de detectar después de que publicara un comentario en una comparativa antivirus de PCActual sobre algunos casos de "virus que no son virus".
¿Por que ahora lo detectan McAfee y TrendMicro?. Probablemente el archivo, al ser detectado por Sophos, pasó a formar parte de colecciones de muestras utilizadas en comparativas antivirus, y de alguno u otro modo llegó a sus laboratorios. Cuando vieron el archivo, evidentemente, fueron conscientes de que no entrañaba peligro alguno, ni tenía sentido su detección (más simplón no puede ser el programa, una especie de "Hola mundo"). Pero mi hipótesis es la siguiente, al encontrarlo en alguna colección la disyuntiva fue: detectarlo y sumar un positivo más en las comparativas antivirus (aunque no sirva de nada de cara al usuario ya que es inofensivo), o no detectarlo y que existiera la posibilidad de que otro motor antivirus si lo hiciera y consiguiera esa ventaja en las comparativas.
Aquí hemos visto un ejemplo en concreto, pero en realidad cualquier colección de muestras de cierto volumen cuenta con un buen número de este tipo de archivos basura que no debería tenerse en cuenta. Por eso, como os comentaba al principio, lo más complicado para hacer las comparativas era mantener una colección de muestras depurada que no adulterara los resultados.
Moraleja: se crítico, no te creas que todo lo que detecta un antivirus es algo que realmente puede hacer daño, y menos aun te creas las comparativas antivirus, hay muy pocas que se hagan medio bien, poquísimas (por no decir que tienden a nulas). Te lo dice alguien que se dedicó durante algunos años a hacer comparativas antivirus para las principales revistas del sector.