Site hosted by Angelfire.com: Build your free website today!

ESCUELA POLITECNICA BELENES

Autor : Jorge Cruz Vargas

 

Problemas Relacionados con los Virus Informáticos en las Micro computadoras Personales

Indice

I.- Informática

1.1 Que es la informática

1.2 Organización de una computadora

II.- Historia de los Virus Informáticos

2.1 Historia de los virus informáticos

III.- Que son los Virus Informáticos relacionados con los programas y los lenguajes de programación

3.1 Que son los virus informáticos

3.2 Programas Residentes

3.3 Tipos de Virus

 

 

 

 

 

 

 

 

IV.- Problemas Relacionados con los Virus Informáticos

4.1 Histeria causada por los Virus Informáticos

4.2 Ejecución Extraña de los Programas

4.3 Infección sin control alguno

4.4 Perdida de datos permanente

V.- Recopilación de los Virus Informáticos mas conocidos

5.1 Virus de Turín, Italiano o del ping pong

5.2 Virus Brain

5.3 Virus Miguel Angel ( Michelangelo )

5.4 Virus Stoned

5.5 Virus AirCop

5.6 Virus Casino

5.7 Virus Devil Dance

5.8 Virus Dark Avenger

5.9 Virus Natas

VI.- Recopilación de los Antivirus Informáticos mas conocidos

6.1 Que es un programa Antivirus

6.2 Métodos de Detección de los Antivirus

6.3 Scan y Clean de McAfee

6.4 ThunderByte

6.5 AG_NATAS

6.6 Antivirus Propio del Autor ( Solo identifica al Virus Viernes 13h o Friday 13h)

 

VII.- Creación de pequeños simuladores de Virus Informáticos

7.1 Selección de el lenguaje de programación

7.2 Problemas con los programas residentes

7.3 Creación de pequeños simuladores de virus Informáticos

7.4 Codigo fuente del antivirus propio del autor

VIII.- Conclusiones

8.1 Medidas de seguridad

8.2 Derechos de autor

IX.- Bibliografía.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I.- INFORMATICA

 

 

1.1 Que es la informática

1.2 Organización de una computadora

Toda computadora cuenta con al menos tres componentes, que son básicos para una computadora, el CPU, un dipositivo de entrada, memoria, y un dispositivo de salida.

Hoy en día se cuenta ademas de los dispositivos antes dichos otro dispositivo, el de almacenamiento que ya se encuentra desde hace tiempo en las Microcomputadoras.

El CPU (Central Process Unit - Unidad de Proceso Central), es el cerebro de toda computadora donde se encuentran también la unidad aritmética y lógica.

El dispositivo de entrada puede ser un teclado, un escanner, o una pluma óptica.

La memoria es el lugar donde se almacena toda la información que se entra por el dispositivo de entrada para ser utilizada por el CPU, pero se almacena de una forma volátil es decir, cuando se apaga la computadora se pierde toda la información hay contenida.

El dispositivo de salida, puede ser como dispositivo mas ampliamente usado una pantalla CRT (Tubo de Rayos Catódicos) comunmente llamados Monitores, otro puede una Impresora.

El dispositivo de almacenamiento puede ser discos flexibles, discos duros, discos ópticos, cintas magnéticas, E-Proms, Etc..

El compartimiento de datos mas comun que existe hoy en dia es por medio de los discos felxibles, siendo estos en las Microcomputadoras los de 5 1/4 y 3 1/2 pulgadas, los discos flexibles tienen una apertura de protección contra escritura, si estos estan en forma de no escritura no hay ninguna forma de que se contaminen por ningun tipo de virus.

Discos flexibles de 5 1/4 y 3 1/2 pulgadas.

 

Todos lod discos tanto flexibles como fijos, se dividen en pistas y sectores, la primeras pistas se reserban para para el sector de arranque y las tablas FAT.

El sector de arranque que siempre deve comensar en la pista cero es el lugar donde una computadora al encenderse busca siempre las intrucciones hay almacenadas para ejecutarlas, enseguida estan las tablas FAT (File Allocation Table - Tabla de Localización de Archivos), que es donde se encuentra la información de donde se encuentran los archivos contenidos, pista, sector, nombre archivo, logitud , fecha, si algun tipo de virus borrara estas tablas seria imposible que el sistema operativo supiera donde encontrar la informacion de los arcivos almacenados.

Estadísticas :

En un disco duro típico de 100 Megabytes o de 102,400,000 Bytes si un virus digamos el del NATAS que tiene una longitud de 6 Kbytes o 6,144 Bytes, este se autocopia sin control alguno y se tuviera un total de 500 archivos ejecutables .COM y .EXE, tendríamos un total de 3 MegaBytes usados en el disco únicamente usados por el virus, mas otras dos copias que se almacenan en la tabla de particiones y el sector de arranque, aparte de las demas infecciones en otros tipos de archivos binarios.

 

 

 

 

 

II .- HISTORIA DE LOS VIRUS INFORMATICOS.

En 1983 el doctor Fred Cohen presento el la Universidad del sur de California, presento el primer virus residente en una PC, por lo que hoy se le conoce como el Padre de los Virus Informáticos. El DR. trataba de demostrar que el código de programas para computadora podia autorreplicarse, introducirse a otros códigos y alterar el funcionamiento de las computadoras. Era un virus muy grande, constaba de mas de 200 lineas de código en lenguaje C, Pero hoy en día puede considerarse demasiado pequeño.

En 1986, Es cuando dan a conocer los virus como algo dañino a las computadoras este virus se le llamo virus paquistaní, ya que fue su lugar de origen, ataco a todo en mundo, programado en Lahore Paquistán por dos hermanos que comerciaban con computadoras.

En su Compañía llamada BRAIN Computers se ofrecian programas con precios ridículos como LUTUS 123 a US$1.00 a US$3.00 tan barato era que los turistas compraban estas copias sin saber que el programa estaba infectado con su virus

El 20 de noviembre de 1987 se da a conocer que un virus contamina las computadoras commodore AMIGA, El virus era un pequeño programa que se autocopiaba al sector de arranque de todos los discos, así siempre que se arrancaba la computadora este se adueñaba de la computadora, Este virus según dicen era benéfico y solo presentaba un mensaje en la pantalla.

 

 

 

El 12 de Diciembre de 1987 Aparese un mensaje navideño por medio del sistema de correo electrónico de IBM atascando todas las computadoras en las instalaciones de la misma por casi hora y media, el mensaje consistia en un árbol navideño que decía Saludos en Vacaciones.

El 11 de Enero de 1988 un columnista de un periódico de California dice que a pesar de la mala propaganda que se les a hecho a los virus, estos pueden tener aplicaciones útiles, dice se pueden utilizar como programas de diagnostico que supervicen las computadoras continuamente, cuenta que en 1970 el columnista encontro el primer virus informático en una maquina llamada ARPANET de uso militar, esta computadora que se usaba para conectar las computadoras de la universidad, milicia y corporaciones, alguien dejo suelto un programa llamado Enredadera, según dice se arrastro por atravez de la red, saliendo a las terminales con un mensaje que decía Soy la enredadera atrapame si puedes! , otro programador en la llamada del reto escribio un segundo virus llamado Segadora que también salto atravez de la red detectando y matando enredadoras.

El 30 de octubre de 1988, el virus Brain (Cerebro) ataco a Hong Kong, Segun una revista llamada computing Autralia, una empresa finaciera de gran importancia es contaminada por el virus Brain, esta es pues la primera infección a una empresa en este continente, segun la empresa despues de la desinfección no hubo niniguna perdida de datos.

 

 

 

 

El 9 de Noviembre de 1988, Aparese el virus Brain en Houston Texas, USA, en un porograma de origen Pakistani se ha multiplicado por todas la computadoras de la universidad de Houston, segun dicen por el mesaje que aperecio es una versión modificada por algun otro programador, el mesaje dice asi "Bienbenido al calabozo. Copiright 1968 Brain & Amjads, PVT, LTD. Registro de zapato de virus V9.0. Dedicado a la memoria dinamica de millones de virus que ya no estan con nosotros hoy -Gracias a dios. CUIDADO CON EL VIRUS. Este programa esta contagiado. Sigue el programa despues de estos mensajes. Tal parese que el virus Brain original fue modificado, el original presentaba el mensaje siguiente: Bienvenido al calabozo. Contacte con nosotros para la vacunación. Daba la dirección de dos hermanos pakistanis y el telefono. En la version original fue la forma como se supo de los verdaderos creadores del virus Brain, segun dicen dos dos hermanos el virus solo despliega el mensaje en pantalla y no causa ninguna perdida de datos.

El 13 de enero de 1989, el virus de Viernes Trece aparese en la Gran Bretaña, y borra en cientos de computadoras la información hay contenida.

 

 

 

 

 

 

 

III .- QUE SON LOS VIRUS INFORMATICOS RELACIONADOS CON LOS PROGRAMAS Y LOS LENGUAJES DE PROGRAMACION.

 

 

3.1 Que son los virus Informáticos.

Los virus informáticos toman el nombre de virus por su parecido en los síntomas a los virus en los humanos, es decir son infecciosos y en algunos casos peligrosos si no se les trata a tiempo con un antivirus, pero esto no quiere decir que se sea lo mismo un virus informático a un virus humano, los virus informáticos no tienen nada que ver con las enfermedades en las personas ni viceversa, los virus informáticos se trata de pequeños programas creados por algún programador profesional que bien esta resentido con alguien como puede ser la empresa donde trabajaba o simplemente para darse a conocer

En resumen un virus informático es un pequeño programa (como una hoja de calculo o un procesador de textos)que de alguna forma sin enterrarse de su presencia o sin permiso alguno altera el funcionamiento normal de una computadora.

los hay de forma que este puede autorreplicarse , es decir estos son pequeños programas residentes con capacidad de autocopiarse ya sea por medio de diskettes o un modem.

Los hay de forma de que estos infecten solo una vez y cumplan su cometido, ya sea destruyendo la información y después desaparecen.

 

 

 

 

 

Como ya habíamos dicho estos virus o programas residentes son escritos por programadores profesionales o también llamados hakers, estos programadores los escriben por la razón de que pueden estar resentidos con alguien, para darse a conocer o simplemente por diversión

Los virus informáticos son pequeños programas, pero en realidad pequeños, algunos no son mas grandes de 512 Bytes, que es un tamaño insignificante tomando en cuenta un disquete de 1.2 Mbytes, esto quiere decir que en un solo disquete cabrían miles de copias de un solo virus, solo que no todos los virus infectan igual algunos solo infectan a los archivos ejecutables y no vuelven a infectar hasta que se encuentren a un nuevo archivo que no halla sido infectado

 

 

 

 

 

 

 

 

 

 

 

 

3.2 PROGRAMAS RESIDENTES

Un programa residente es aquel que se ejecuta y termina, pero aun queda en un espacio de memoria sin que el sistema operativo tenga conocimiento que aun se encuentra, uno de estos ejemplos de los programas residentes mas conocidos como el SideKick de Borland, que aunque parese que es un programa mágico, en realidad es un programa TRS(Terminated and Resident Stay "Termina pero Permanece Residente"), que todo el tiempo esta escondido de el DOS y chequeando si la tecla que se presiono es la tecla clave para entrar en acción.

Escondido del DOS es un termino que se le da a estos programas porque el DOS no sabe de su existencia ni que es lo que están asiendo estos programas en ningún momento así que de esta forma pueden controlar al sistema a su antojo sin que este ni siquiera se de cuenta.

Así mismo un virus es pequeño programa residente, que al estar infectado un programa ejecutable este se autoinstala en memoria y después continua con el programa original, una vez que este ya esta en la memoria

 

 

 

Todos los simuladores que aquí se escriben son programas TSR's ejemplo de la pantalla al instalar el simulador del virus Casino.

La mayoría de los programas Antivirus tienen una utilidad de tipo TSR que al instalarse revisa los archivos que se leen, aunque parese que se esta ejecutando el programa normalmente cuando se tiene esta utileria instalada el programa que esta residente lo escanea en un robo de ciclo del procesador esto hace que muchas de estas utilerias hagan las lecturas casi un 200% mas lentas que lo normal, un ejemplo de algunas de estas utilerias son:

Vshield de McAffe

TbScanx de ThunderByte

Tbdrver de ThurderByte

Vsafe de MS-DOS 6.0-6.2

 

Esto nos quiere decir que si nosotros escribimos un programa que al terminar no se libera la memoria que ocupaba y de alguna forma modifico un vector de interrupciones para así estar trabajando todo el tiempo, este programa se le puede llamar un programa Residente TSR.

3.3 Tipos de Virus.

Los tipos de Virus se pueden dividir en tres por su forma de activarse, Caballos de Trolla, Bombas de Tiempo y Gusanos.

Caballos de Trolla : Los caballos de trolla son programas que parecen ser útiles o normales pero en realidad se trata de un disfraz para tener un objetivo totalmente diferente al original, en si estos son programas disfrazados.

Bombas de Tiempo : Son programas que están a la espera de algún evento, alguna fecha o una hora determinada para efectuar, cosas perjudiciales o simplemente desplegar un mensaje en pantalla.

Gusanos : Son programas que se deslisan por medio de las redes o otros dispositivos de comunicación borrandose automáticamente de su lugar de origen dejando mensajes o archivos inservibles.

 

 

IV.- Problemas Relacionados con los Virus Informáticos

 

 

4.1 Histeria causada por los Virus Informáticos.

Con el desconocimiento de lo que es realmente un virus informático hoy en día existe se ha rumorado mucho hasta el punto de ser amarillismo con este termino, he escuchado historias de los mismos de una forma que pueden llegar a alarmar a todas las demás personas que no tienen mucho conocimiento de esto, así pues se debe se saber al menos que un virus informático no va hacer estallar la computadora ni a descomponer el monitor ni nada por el estilo, cuándo se apaga la computadora dejan de funcionar todos estos pequeños programas llamados virus al igual que todos los demás programas.

No nos dejemos llevar por nombres como SATAN, Devil Avenger, Bailes con el Diablo, Drogados, etc. apesar de sus nombres no dejan de ser programas.

1

Nunca debe suceder el confundir los virus informáticos con los virus reales como ya habíamos dicho los virus informáticos se trata únicamente de programas, escritos por programadores así que de ninguna forma pueden infectar a una persona ni tampoco a la computadora de al lado si no se transfiere información de alguna forma, ya sea por medio de una red, de transferencia de datos por discos o por una conexión serial o paralela.

Esto es algo que nunca devemos confundir con una infección humana.

4.2 Ejecución Extraña de los Programas.

Este es uno de los mas grandes problemas con los virus informáticos, cuando nosotros usamos de forma continua un procesador de palabras y de pronto resulta que después de estar grabando nuestras tareas y terminar, apagamos la computadora y al día siguiente nos damos cuenta que no se grabo nada, comenzamos en la mayoría de las veces a tratar de ver que estuvo mal el día anterior, el porque no se grabo lo que se había capturado, una vez que no encontramos el por que, volvemos a reescribir todo y al volver a grabar sucede lo mismo, hasta ese entonces sospechamos si el programa que me vendieron sirve bien, si la computadora esta fallando, si el disco duro se quemo, etc.. Después de llamar a un servicio especializado nos dicen : La computadora estaba infectada por un virus!.

 

 

Este problema puede que después de vacunar a la computadora vuelva todo a la normalidad pero y el tiempo perdido?.

Algunas veces al usar cualquier programa, por ejemplo una hoja de calculo y se esta haciendo una factura a nombre de la empresa X S.A. de C.V, al imprimirla uno confía en que las computadoras no se equívocan, pero si esta esta infectada por un virus, puede que se tengan perdidas grandes o una cancelación inmediata de la misma, sin que uno tenga una sospecha de el porque.

Imaginemos una infección en un banco por 30 minutos.

4.3 Infección Sin Control Alguno.

Alguien recuerda el famoso virus NATAS, que se presento en casi todo el mundo y que se dice que es de origen Mexicano, este tubo que comenzar con una persona en una Microcomputadora, pero que paso, bueno esto que paso es lo que se llama infección, en términos comunes es que se copia de disco en disco, por medio de redes, o por modem.

 

 

 

 

Este virus que infecto a todo México, es porque nuestro pais se presta mucho a la piratería de Software, es decir se compra un original y se le sacan 50 copias del mismo, si tan solo un programa estaba contaminado y se copio 50 veces el virus ya se encuentra en 50 partes diferentes pero digamos que una copia llega a una universidad y aunque no se copie el mismo programa, si la maquina en la que se instalo se encuentra ya infectada, todo aquel usuario que introduzca un disco, este sera contaminado y este contaminara a los demás y los demás a los demás, esto es lo que se llama Infección Sin Control Alguno.

Es todavía peor que se llegara a instalar el programa contaminado en una red conectada digamos a algún servicio de red mundial como Internet, podemos imaginar hasta donde llegaran las infecciones.

 

4.4 Perdida de Datos Permanente.

Hay ocasiones donde hay infecciones por virus que no esperan ningún evento largo para activarse y comienzan demasiado rápido a destruir información, antes que el usuario se de cuenta de la infección es entonces cuando hay perdida de datos permanente.

Otra forma que casi siempre pasa en cuando los virus usan para infectar archivos una técnica diferente a la de añadidura, es decir que sustituyen una parte de los códigos ejecutables de los archivos,cuando un programa antivirus detecta el virus el único remedio es borrar el archivo o dejarlo inservible.

Aqui se muestra como un archivo que es infectado insertandose en el codigo ejecutable.

 

 

 

 

V.- Recopilación de los virus Informáticos mas conocidos.

 

 

5.1 Virus de Turín, Italiano o de Ping Pong.

El virus de Ping Pong es un virus que se aloja en el sector de arranque que fue presentado por primera vez en marzo de 1988. El virus Ping Pong original solo contamina discos flexibles.

Cuando se activa el virus lo que hace en lo que se refiere al toda la pantalla modo texto (80x25) se presenta una pelotita o un carácter con forma de una pelota rebotando.

Existe una variación de este mismo virus que contamina aparte de los discos flexibles también los discos duros.

Virus de Turín O del Ping Pong

5.2 Virus Brain( cerebro ).

5.3 Virus Miguel Angel.

Virus Michelangelo.

El virus Michelangelo es un virus de Sector de arranque fue descubierto en abril de 1991, se cree que es de origen holandés o sueco, este virus infecta tanto discos duros como discos flexibles.

El virus se Activa el 6 de marzo de cualquier año.

Se le conoce una variación Michelangelo_II que infecta archivos .COM.

5.3 Virus Stoned.

El virus Stoned fue presentado por primera vez en Wellinton, Nueva Zelanda a principios de 1988. El virus original solo contaminaba discos de 5 1/4 pulgadas de 360K, no causa ningún daño visible, Hay no obstante dos variantes conocidas que pueden contaminar discos duros. El virus se convierte en residente en memoria después de que se arranque al sistema desde un disco contaminado. Contamina cualquier disco al que se acceda.

Existen dos variantes de este virus el Stoned-B y Stoned-C, las instrucciones para la supresión son las mismas que para los discos.

Este virus se puede erradicar sin necesidad de un antivirus especial solo ejecutando FDISK /MBR o con el comando SYS al disco contaminado.

5.4 Virus AirCop.

Este virus de origen Taiwanes infecta el sector de arranque de los discos duros y flexibles y de forma aleatoria despliega el mensaje Red State, Germ Offensive. AIRCOP.

Se puede Erradicar de los discos sin necesidad de un antivirus especial únicamente ejecutando el comando SYS <x> donde x es la unidad donde se quiere volver a reiniciar al disco con un nuevo sistema.

NOTA : estos pasos solo funcionan si se arranca con un disco flexible limpio del virus.

 

Aquí se muestra cuando un sistema esta infectado con el virus AirCop de forma aleatoria se muestra la cadena que se ve arriba.

5.5 Virus Casino.

Este virus infecta los archivos .COM y los incrementa en 2332-2346 Bytes mas de su tamaño original, este es uno de los virus mas interesantes por su forma de actuar al activarse, al activarse se borra la pantalla y le pide que se juegue los datos de su disco en un juego que le llama JACKPOT que mas bien parese una ruleta donde el juego es simple si aparecen tres ??? (signos de interrogación) usted gana y despliega un mensaje ofensivo y le pide que apage la computadora, pero en caso de que se terminen las oportunidades o aparecen tres ççç sale un mensaje burlón y adiós a la información contenida en el disco.

Este virus al activarse lee las tablas FAT del disco y las almacena en la RAM, después borra las originales del disco así si se apaga la computadora al activarse el virus se perderán todos los datos contenidos en el disco.

Aquí se muestra como el virus infecta un archivo con extensión .COM.

 

Aquí se muestra el virus una vez activo y listo para jugarsela.

5.6 Virus Devil Dance.

El virus devil dance se cree que es de origen Mexicano creado en 1989 , infecta los archivos .COM y los incrementa 941 Bytes , este virus se activa cuando se presionan al mismo tiempo las teclas CRT+ALT+DEL para reiniciar el sistema.

Aparte de activarse con las tecla CTR+ALT+DEL hay personas que afirman que el virus también borra las tablas FAT del disco.

Aquí se muestra el mensaje que da el virus Devil Dance que dice Have your ever danced whith the devil under the weak light of the moon? Pray for your disk! The_Joker... Ha Ha Ha Ha Ha. parece que el programador que lo creo le gusto mucho la película de BatMan.

 

 

5.7 Virus Dark Avenger.

Este virus creado según dice en el código que le agrega a los archivos .COM y .EXE en la ciudad de Sofía, Bulgaria en el año de 1988 incrementa los archivos aproximadamente 1800 Bytes.

 

 

Aquí se puede observar la cadena que dice : Eddie lives...somewhere in time! vista desde el editor de discos Norton.

 

 

Aquí se ve la cadena : Diana P...

Y por ultimo presenta el año de creación y su origen : This program was written in the city of sofia (c) 1988-89 Dark Avenger...

 

5.9 Virus Natas.

 

 

 

VI.- Recopilación de los Antivirus Informáticos mas conocidos.

 

 

 

 

6.1 Que es un Programa Antivirus.

6.1 Métodos de Detección de los Antivirus.

1.-Identificando Firmas

2.- Por medio de Calculo por Ejemplo el CRC ( cyclic redundance check).

3.- Detectando programas que no usan al DOS para I/O y tratan de permanecer residentes en memoria.

4.- Por medio de un análisis Heurístico, esto es tomando los programas y desensamblando y interpretandolos para decir que es lo que ba a hacer el programa.

6.3 Scan y Clean de McAfee.

Este programa identifica los virus por medio de búsquedas de firmas (Scan2), bloqueo de instrucciones sospechosas (Vshield) y chequeo por calculo de Redundancia (Scan2/AV).

 

Aquí se muestra como el Scan de McAffe detecta varios virus en un disco flexible infectado por varios virus.

Este programa se autochequea para comprobar que no esta cambiado el programa por algun virus y que su ejecución sea normal.

 

 

Hoy en día también se cuneta con una protección en el entorno de Windows, y hasta el entrorno mas moderno que es Windows 95 de MicrosoftÒ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.4 ThunderByte.

 

Aquí se muestra la pantalla de rastreo y detección del ThunderByte.

Este antivirus de origen europeo es bastante confiable y rapido (el mas rapido que he probado).

 

 

6.5 AG_NATAS.

 

Aquí se muestra la vacuna para el virus NATAS que es totalmente gratis cedido por Omar Herrera del ITESM CCM.

 

Este Antivirus es de propiedad publica se puede usar y copiar, sin ninguna restricción, pero no se puede negociar con el, se puede bajar directamente de un BBS local o conocido, o del que viene en el antivirus : (915)594-5139 de 7 :00pm a 6 :00am por modem de 1200 baudios a 14400.

Este es uno de los mejores antivirus para el Natas que he usado por lo tanto es muy recomendable.

6.5 F-PROT.

 

 

 

 

 

 

 

 

 

6.6 Antivirus Propio del Autor ( Solo identifica al Virus Viernes 13h o Friday 13h)

Este antivirus creado por el auto o por mi mismo, detecta y erradica el virus Friday 13h o viernes 13h.

Este antivirus utiliza el algoritmo de detección de firmas unicamente para detectar al virus viernes 13.

A continuación se numeran los pasos que sigue para la identificación del virus:

  1. Verifica que sea igual el codigo contenido en el archivo varificado al del antivirus.
  2. Si se encontro que es igual el codigo se llama a la funcion limpiar

La funcion se encarga de limpiar el virus.

Este antivirus es solo una forma encilla de explicar como funciona un antivirus yu mas adelante se presenta su codigo fuente en C.

 

 

 

 

 

VII .- Creación de pequeños simuladores de virus.

 

7.1 Selección del Lenguaje de Programación:

Para seleccionar un Lenguaje de programación que nos sirva fácilmente se deven considerar los siguientes puntos:

1.- Tiene que ser flexible.

2.- Tiene que ser compacto y Rápido.

3.- Un lenguaje que contenga una amplia librería que nos sirva para la creación de los simuladores.

Hay varios lenguajes que cumples con estos puntos que son :

1.- Turbo Assambler de Borland y Macro Assambler de Microsoft.

2.- Turbo Pascal de Borland.

3.- Borland C/C++ de Borland y Microsoft C/C++.

El primero es bueno por tener mucha facilidad para actuar con el Hardware de la Computadora, aunque actualmente casi la mayoría de los virus mejor hechos están programados en emsamblador, no creo que sea muy buena idea construir los simuladores en ensamblador por su dificultad de comprender los mismos y por tener muy pocas soluciones de reutilización del código de entre un simulador y otro.

El segundo que es Turbo Pascal es de lo mejor que se puede conseguir pero no tiene muy buen desempeño en su código ejecutable y hasta cambia mucho un programa escrito de una versión a otra, otro problema es que su código ejecutable es también demasiado grande para los simuladores, por lo mismo requieren de mas memoria para instalarse.

El tercero creo que es el perfecto para los simuladores es rápido, compacto y es sencillo de comprender y no cambia mucho entre sus versiones, incluso entre las versiones ofrecidas por el C/C++ de Microsoft y el C/C++ de Borland.

7.2 Problemas con los Programas Residentes.

El ejemplo de un programa residente puede ser desde uno que al presionar cualquier tecla emita un sonido desde cualquier programa en donde uno se encuentre.

Ejemplo del programa antes mencionado, escrito en C:

/**************************************************************************/

/* Programa Residente de Demostracion

/* Autor : Jorge Cruz Vargas

/***************************************************************************/

/* Modelo de memoria Tiny

/* Nota nose deve de Enlazar la emulacion del punto flotante

/***************************************************************************/

/* NOTA:

Este es un programa que termina y

pemanese residene (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 5, programa ocupa alrededor de

3K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno windows o desede cualquier

otro entorno como dosshell */

#include <dos.h>

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor al teclado */

#define INTR 0x09

/*-------------------------------------------------------------------------*/

/* reduce la pila y el monton al lo menos posible */

extern unsigned _heaplen = 2048; /* 2 K Bytes */

extern unsigned _stklen = 512; /* 512 Bytes */

/* Prototipos */

void interrupt ( *viejo_manejador)(void );

int puts(char *s );

/**********************************************************************

* kb : Modifica la tabla de interrupciones 0x09 del BIOS y

* Determina si se ha presionado cualquier tecla

**---------------------------------------------------------------------------------------------

* Entrada : ninguna

* Salida : niniguna

* esta función pone la variable tecla a SI y devuelve las

* interrupciones del teclado tal y como estaban

***********************************************************************/

void interrupt kb(void)

{

manejador2(); /* llama al manejador anterior */

sound(1000); /* Hace un sonido */

nosound(); /* Apaga el sonido */

}

//////////////////////////////////////////////////////////////////////////////////////////////

// MAIN

//////////////////////////////////////////////////////////////////////////////////////////////

int main( void )

{

puts("Programa Residente de demostración");

puts("Autor : Jorge Cruz Vargas");

/* obtiene la direccion actual del reloc de interrupcion */

viejo_manejador = getvect(INTR);

/* instala la nueva interrupción */

setvect(INTR, kb );

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp) ); /* Reserva una localidad de memoria para el programa residente */

}

Ejemplo del mismo programa escrito en Turbo Pascal:

 

{

*************************************************************************

* Programa Residente en memoria de Ejemplo

* Autor : Jorge Cruz Vargas

*

**************************************************************************}

{ NOTA:

Este es un programa que termina y

pemanese residene (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 5, programa ocupa alrededor de

3K en memoria y se puede instalar en

memoria alta. }

{ ADVERTENCIA

No se trate de instalar desde el

entorno windows o desede cualquier

otro entorno como dosshell }

{ reduce la pila y el monton al lo menos posible }

{$M $800,0,0 } { Limita la pila y el monton a lo menos posible }

{ 4Kbytes para la pila, Cero para el monton }

uses CRT,DOS;

var

viejo_manejador:procedure;

{ **********************************************************************

* kb : Modifica la tabla de interrupciones 0x09 del BIOS y

* Determina si se ha presionado cualquier tecla

**--------------------------------------------------------------------

* Entrada : ninguna

* Salida : niniguna

* esta función pone la variable tecla a SI y devuelve las

* interrupciones del teclado tal y como estaban

***********************************************************************}

{$F+} { Conecta el modo de llamadas lejanas FAR }

procedure kb; interrupt;

begin

viejo_manejador; { llama al manejador anterior }

sound(1000); { Hace un sonido }

nosound; { Apaga el sonido }

end;

{$F-} { Desconecta el modo de llamadas lejanas }

{//////////////////////////////////////////////////////////////////////////////////////////////

// PRINCIPAL //

//////////////////////////////////////////////////////////////////////////////////////////////}

begin

writeln('Programa Residente de demostración');

writeln('Autor : Jorge Cruz Vargas');

 

{ obtiene la direccion actual del reloc de interrupcion }

getintvec($9,@viejo_manejador);

{ Instala la nueva interupción 9 }

setintvec($9,Addr(kb));

keep( 0 ); { Reserva una localidad de memoria para el programa residente }

end.

En el anterior programa se muestra como la función kb tiene el modificador interrupt (interrupción), esto es por que todas las microcomputadoras trabajan en un modo de interrupciones, una interrupción es como una señal que se le da al microprocesador para que deje de hacer lo que esta haciendo y se le atienda, una vez terminada la interrupción se rregresa a lo que estaba haciendo. Cuando se presiona cualquier tecla se produce una interrupción 9 en hexadecimal, si nosotros cambiamos este vector de interrupción podemos lograr interceptar la tecla que se presiono antes que cualquier otro programa o el sistema operativo.

Es aqui donde comienzan los problemas la mayoria de las interupciones solo pueden ser usadas por un solo programa (es por eso que el DOS no es multitarea) entonces si un programa esta usando una interrupción para leer desde un disco y nosotros tambien tratamos de utilizar esta interupción los mas seguro es que se detenga la maquina sin dar mensaje alguno.

Si en los programas anteriores, como no se esta haciendo ninguna validación, a la hora de presionar una tecla y emitir un sonido, si la computadora esta emitiendo algun otro sonido en el mismo instante como un beep al interrunpir este programa puede que la computadora se dentenga de pronto.

NOTA :

Todas las computadoras compatibles 100% con IBM manejan un total de hasta 255 vectores de interrupción.

7.3 Creacion de Pequeños simuladores de virus informaticos.

Estos programas simulan a los virus originales en las PC's

CASINO-S.C Simulador del virus del Casino.

PING-S .C Simulador del virus de Turin o Ping-Pong.

AIRCOP-S.C Simulador del virus AirCop.

DEVIL-S .C Simulador del virus Devil Dancer.

STONED-S.C Simulador del virus Stoned.

NOTA:

Se seleccionaron estos virus para simularlos por sus presentaciones

que actuan en pantalla aparte de sus destrucciones, no se podria simular al

famoso Natas porque lo que hace, es unicamente destruir información.

TODOS los simuladores solo se pueden instalar uno a la vez ya que modifican

Los vectores de interrupciones por los mismo no seria seguro desactivarlos

siendo asi la unica forma de desactivarlos es resetendo la computadora.

TODOS estos programas se auto chequean para verificar que no se encuentren

Infectados o cambiados de tamaño.

SINTAXIS

CASINO-S.EXE <Limite de tiempo>

Donde el limite de tiempo se especifica de uno a nueve minutos

Ejemplo:

CASINO-S 5 -> Especifica 5 Minutos para Activarse

Cada cinco minutos lo retara en una simulación a jugarse la integridad de su

computadora si gana saldra el mensaje original.

Aqui se muestra como se ve el simulador ya activado despues de 5 minutos.

 

 

PING-S.EXE <Limite de tiempo>

Donde el limite de tiempo se especifica de uno a nueve minutos

Ejemplo:

PING-S 5 -> Especifica 5 Minutos para Activarse

En cinco minutos se desplegara una pelotita rebotando por toda la pantalla.

Abajo se muestra como se ve el simulador una vez ya activado.

AIRCOP-S.EXE

El simulador del virus AirCop se Activa aleatoriamente.

Esto quiere decir que cunado uno menos espere se va a presentar en la pantalla el siguiente mensaje:

Red State, Germ Offensive. AIRCOP.

DEVIL-S-.EXE

El simulador se activa presionando CRT + ALT + DEL

STONED-S.EXE

El simulador del virus Stoned se Activa aleatoriamente.

presenta en la pantalla el siguiente mensaje:

Your PC is STONED!

Legalize Marijuana.

 

 

 

 

 

 

 

 

 

 

 

CODIGO FUENTE DE TODOS LOS SIMULADORES :

Simulador del Virus Aircop Codigo Fuente en C :

/**************************************************************************/

/* AirCop-S.C */

/* Simulador del virus AirCop */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria Tiny */

/* Nota nose deve de Enlazar la emulacion del punto flotante */

/**************************************************************************/

/* NOTA:

Este es un programa que termina y

permanese residente (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 3.3, el programa ocupa alrededor de

9K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno Windows o desde cualquier

otro entorno como dosshell */

#include <dos.h>

#include <stdlib.h>

#include <io.h>

#include <sys/stat.h>

 

/* reduce la pila y el monton a lo menos posible */

extern unsigned _heaplen = 1024; /* 1 K Bytes */

extern unsigned _stklen = 1024; /* 1 K Bytes */

 

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor del reloj del BIOS */

#define RELOJ 0x1C

#define SI 1

#define NO 0

#define RELOJ_ID 0xEB

#define CHEQUEA_INSTALADO 0x00

#define EGAVGA 1

#define HERC 2

 

/*-------------------------------------------------------------------------*/

/* Prototipos */

/*-------------------------------------------------------------------------*/

int rand(void);

void mesg(char *s);

void interrupt ( *vieja2f )(void);

void interrupt ( *ViejoReloj )(void);

void interrupt ( *manejador2)( void );

void interrupt RelojIntr(void);

void interrupt Nueva2f(unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned);

 

/*-------------------------------------------------------------------------*/

/* Variables globales */

/*-------------------------------------------------------------------------*/

/* Declara punteros a las banderas DOS y CritErr ( Error Critico ). */

char far *criterr;

char far *indos;

/*/////////////////////////////////////////////////////////////// */

/* MAIN */

/*////////////////////////////////////////////////////////////// */

 

int main( void )

{

unsigned int seg;

unsigned int off;

int h;

h = open("AIRCOP-S.EXE",S_IREAD);

if ( filelength(h) != 7078){

mesg("\b ERROR el simulador cambio de su tamaño original");

mesg("La cuasa mas segura puede ser un virus o la compresión del archivo");

mesg("Revise su disco con un Antivirus confiable los mas rapido posible");

close(h);

return 0;

}

close(h);

_AH = RELOJ_ID;

_AL = CHEQUEA_INSTALADO;

geninterrupt(0x2f);

if (_AL == 0xff)

{

mesg(" El Simulador de virus AirCop u otro Simulador ");

mesg(" Ya se encuentra instalado en memoria! ");

mesg(" U de G Esc. Politecnica Belenes Autor : Jorge Cruz Vargas ");

return 0;

}

/* Obtiene la banderas de acceso al DOS. */

_AH = 0x34;

geninterrupt(0x21); /* Genera la interrupción 0x21 */

seg = _ES; /* obtiene el valor del segmento 0x21 */

off = _BX;

indos = (char far *) MK_FP( seg, off ); /* Este es el valor de cuando

el DOS no esta en una tarea

critica como leer un disco */

criterr = indos - 1; /* Este es el valor de cuando el DOS si esta

en una tarea critica */

 

mesg(" Simulador del virus AirCop");

mesg(" Caracteristicas del virus original al que se simula :");

mesg(" Infecta : Sector de Arranque de los discos Tamaño : Varia ");

mesg(" NOTA : Este no es un virus y no infecta");

mesg(" Se Activara aleatoriamente ");

mesg(" Universidad de Guadalajara Escuela Politecnica Belenes ");

mesg(" Autor: Jorge Cruz Vargas");

/* obtiene el manejador altual del teclado */

ViejoReloj = getvect(RELOJ);

/* instala el manejador del reloj */

setvect(RELOJ, RelojIntr);

vieja2f = getvect(0x2f);

setvect(0x2f, Nueva2f);

 

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp)-120); /* se resta 120 que es lo de la */

return 0; /* función Targeta que no se vuelve */

} /* a usar */

#pragma argsused

/*///////////////////////////////////////////////////////

// Nueva2f()

//

// Este es un manejador de interrupciones que se usa

// para comunicar si ya se instalo el programa TSR.

//////////////////////////////////////////////////////// */

void interrupt Nueva2f(unsigned bp, unsigned di, unsigned si,

unsigned ds, unsigned es, unsigned dx,

unsigned cx, unsigned bx, unsigned ax,

unsigned ip, unsigned cs, unsigned flags)

{

/* Chequea el TSR's ID. */

if (_AH != RELOJ_ID)

_chain_intr(vieja2f);

/* Berifica si ya esta instalado */

if (_AL == CHEQUEA_INSTALADO)

{

ax = 0xFFFF;

bx = _psp;

}

}

 

/**********************************************************************

/ mesg Escribe una cadena utilizando a DOS en la posición

/ actual del cursor

/**********************************************************************/

void mesg(char *s)

{

while(*s) // Mientras no termine la cadena

bdos(2,*s++,0); // Escribir usando al DOS

bdos(2,'\r',0); // Retorno de carro

bdos(2,'\n',0); // Nueva linea

}

 

/*////////////////////////////////////////////////////////////////////////////////////////////////////////////

// RelojIntr()

//

// Este manejador de interrupciones. Es el responsable de

// desplegar el reloj en la parte derecha del monitor

// finalmente devuelve la interrupción original.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/

void interrupt RelojIntr(void)

{

static unsigned char count; /* contador de control para activar el simulador */

static unsigned char num; /* contador de control para activar el simulador */

count = rand() % 100;

num = rand() % 100;

/* Esta en una mision critica el MS-DOS?

puede estar escribiendo o leyendo en el diskette o disco duro */

if ( count == num )

if (!*indos && !*criterr)

{

mesg("Red State, Germ Offensive. AIRCOP.");

}

/* Cambia al manejador anterior. */

_chain_intr(ViejoReloj);

}

 

Simulador del Virus del Casino :

/**************************************************************************/

/* CASINO-S.C */

/* Simulador del virus CASINO */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria Tiny */

/* Nota nose deve de Enlazar la emulacion del punto flotante */

/**************************************************************************/

/* NOTA:

Este es un programa que termina y

permanese residente (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 3.3, el programa ocupa alrededor de

9K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno Windows o desde cualquier

otro entorno como dosshell */

#include <dos.h>

#include <stdlib.h>

#include <io.h>

#include <sys/stat.h>

/* reduce la pila y el monton a lo menos posible */

extern unsigned _heaplen = 1024; /* 1 K Bytes */

extern unsigned _stklen = 1024; /* 1 K Bytes */

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor al teclado */

#define INTR2 0x09

/* Interruptor del reloj del BIOS */

#define RELOJ 0x1C

#define SI 1

#define NO 0

#define RELOJ_ID 0xEB

#define CHEQUEA_INSTALADO 0x00

#define EGAVGA 1

#define HERC 2

 

/*-------------------------------------------------------------------------*/

/* Prototipos */

/*-------------------------------------------------------------------------*/

void casino(void);

void imprime_cad(unsigned char x,unsigned char y,unsigned char *cad );

void mesg(char *s);

void interrupt ( *vieja2f )(void);

void interrupt ( *ViejoReloj )(void);

void interrupt ( *manejador2)( void );

int Targeta( void );

void imprime(unsigned char x,unsigned char y,unsigned char car );

void interrupt RelojIntr(void);

void interrupt Nueva2f(unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned);

 

/*-------------------------------------------------------------------------*/

/* Variables globales */

/*-------------------------------------------------------------------------*/

unsigned int tiempo = 2184; /* Espera 2 Minutos en una 386SX-40 Mhz */

// Puntero para usarse la dirección de la memoria de video.

char far *pantalla;

// Declara punteros a las banderas DOS y CritErr ( Error Critico ).

char far *criterr;

char far *indos;

// Variables para la posicion de la pelotita

unsigned char cc;

int R_tecla;

unsigned char a,b,c;

char tecla = NO;

char oportunidad = 5;

char cas = NO;

/**********************************************************************

* kb : Modifica la tabla de interrupciones 0x09 del BIOS y *

* Determina si se ha presionado cualquier tecla *

**-----------------------------------------------------------------------------------------**

* Entrada : ninguna *

* Salida : ninguna *

* esta función pone la variable tecla a SI y devuelve las *

* interrupciones del teclado tal y como estaban *

***********************************************************************/

void interrupt kb(void)

{

register char k;

R_tecla=inp(0x60); // Lee la tecla

if ( cas == SI )

{

k=inp(0x61);

outp(0x61,(k|0x80));

outp(0x61,k);

outp(0x20,0x20); // Envia el fin de la interrupción al chip 8259 PIC

tecla = SI;

}

else

manejador2(); /* llama al manejador anterior */

}

 

/*/////////////////////////////////////////////////////////////////////////*/

/* MAIN */

/*/////////////////////////////////////////////////////////////////////////*/

 

int main(int argc,char *argv[])

{

unsigned int seg;

unsigned int off;

int h;

h = open("CASINO-S.EXE",S_IREAD);

if ( filelength(h) != 11122){

mesg("\b ERROR el simulador cambio de su tamaño original");

mesg("La cuasa mas segura puede ser un virus o la compresión del archivo");

mesg("Revise su disco con un Antivirus confiable los mas rapido posible");

close(h);

return 0;

}

close(h);

_AH = RELOJ_ID;

_AL = CHEQUEA_INSTALADO;

geninterrupt(0x2f);

if (_AL == 0xff)

{

mesg(" El Simulador de virus CASINO u otro simulador ");

mesg(" Ya se encuentra instalado en memoria! ");

mesg(" U de G Esc. Politecnica Belenes Autor : Jorge Cruz Vargas ");

return 0;

}

/* Obtiene la banderas de acceso al DOS. */

_AH = 0x34;

geninterrupt(0x21); /* Genera la interrupción 0x21 */

seg = _ES; /* obtiene el valor del segmento 0x21 */

off = _BX;

indos = (char far *) MK_FP( seg, off ); /* Este es el valor de cuando

el DOS no esta en una tarea

critica como leer un disco */

criterr = indos - 1; /* Este es el valor de cuando el DOS si esta

en una tarea critica */

if ( Targeta() == EGAVGA) /* Que tipo de monitor hay ? */

pantalla = (char far*)0xB8000000;

else

pantalla = (char far*)0xB0000000;

if ( argc >= 2 ) /* Si el numero de argumentos es mayor a dos */

if( atoi(argv[ 1 ]) == 0) /* se convierte el argumento a entero */

{

/* atoi no pudo convertir el signo "?" o cualquier otro */

mesg(" El tipo para instalar este programa es : ");

mesg(" CASINO-S [ Limite tiempo (Minutos) ] ");

mesg(" Donde limite de tiempo es el tiempo que dura en activarse ");

mesg(" Ejemplo : CASINO-S 5 ");

mesg(" El Simulador de virus CASINO se activa en 5 minutos ");

return 1;

}

else

if ( atoi(argv[1]) < 1 || atoi(argv[1]) > 9)/* Protección para que */

/* el tiempo no sea mayor */

{ /* a una hora */

mesg(" ERROR el tiempo de el Simulador de Virus CASINO ");

mesg(" no puede ser menor de un minuto ni mayor a una 9 Minutos ");

mesg(" Teclee CASINO-S /? para ayuda ");

return 1;

}

if ( argc >= 2 ) /* Si el numero de argumentos es mayor a dos */

tiempo = (unsigned)((atoi(argv[1]))*18*60);/* determina el tiempo en M */

else

tiempo = (unsigned)(1*18*60);/* determina el tiempo en M */

mesg(" Simulador del virus de CASINO ");

mesg(" Caracteristicas del virus original al que se simula : ");

mesg(" Infecta Archivos : .COM Tamaño : 2332-2346 Bytes ");

mesg(" NOTA : Este no es un virus y no infecta ");

mesg( argv[1] );

mesg("Š Minutos para activarse\n");

mesg(" Universidad de Guadalajara Escuela Politecnica Belenes ");

mesg(" Autor: Jorge Cruz Vargas ");

/* obtiene el manejador altual del teclado */

ViejoReloj = getvect(RELOJ);

/* intala el manejador del reloj */

setvect(RELOJ, RelojIntr);

vieja2f = getvect(0x2f);

setvect(0x2f, Nueva2f);

/* obtiene la dirección actual del teclado */

manejador2 = getvect(INTR2);

/* instala el nuevo manejador de interrupciones del teclado */

setvect(INTR2,kb);

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp)-120); /* se resta 120 que es lo de la */

return 0; /* función Targeta que no se vuelve */

} /* a usar */

/**********************************************************************

* Targeta : Determina si hay instalada un tarjeta EGA y VGA *

**-----------------------------------------------------------------------------------------**

* Entrada : ninguna *

* Salida : SI, si es tarjeta EGA y VGA, sino NO *

***********************************************************************/

int Targeta( void )

{

char far *p = MK_FP(0x0040,0x0049); // Puntero a la dirección donde se

// encuntra la informacion del tipo

// de monitor

if (*p == 7) // Si el valor de p es igual a 7 entonces es monocromatico

return HERC;

else // Si no es compatible CGA, EGA, VGA, PGA, Etc.

return EGAVGA;

}

#pragma argsused

/*//////////////////////////////////////////////////////////////////////////////////////////

// Nueva2f()

//

// Este es un manejador de interrupciones que se usa

// para comunicar si ya se instalo el programa TSR.

//////////////////////////////////////////////////////////////////////////////////////////// */

void interrupt Nueva2f(unsigned bp, unsigned di, unsigned si,

unsigned ds, unsigned es, unsigned dx,

unsigned cx, unsigned bx, unsigned ax,

unsigned ip, unsigned cs, unsigned flags)

{

/* Chequea el TSR's ID. */

if (_AH != RELOJ_ID)

_chain_intr(vieja2f);

/* Berifica si ya esta instalado */

if (_AL == CHEQUEA_INSTALADO)

{

ax = 0xFFFF;

bx = _psp;

}

}

 

/**********************************************************************

/ mesg Escribe una cadena utilizando a DOS en la posición

/ actual del cursor

/**********************************************************************/

void mesg(char *s)

{

while(*s) // Mientras no termine la cadena

bdos(2,*s++,0); // Escribir usando al DOS

bdos(2,'\r',0); // Retorno de carro

bdos(2,'\n',0); // Nueva linea

}

 

/*//////////////////////////////////////////////////////////////////////////////////////////////

// RelojIntr()

//

// Este manejador de interrupciones. Es el responsable de

// desplegar el reloj en la parte derecha del monitor

// finalmente devuelve la interrupción original.

///////////////////////////////////////////////////////////////////////////////////////////////////*/

void interrupt RelojIntr(void)

{

static unsigned int count; /* contador de control para activar el simulador */

/* Esta en una mision critica el MS-DOS?

puede estar escribiendo o leyendo en el diskette o disco duro */

if ( count >= tiempo )

if (!*indos && !*criterr ){

if ( cas == NO ){casino();cas=SI;}

if ( tecla )

{

for( cc=0;cc<=30;cc++){

a = random(2);

b = random(2);

c = random(2);

if ( a == 1)a=108;if( b == 1)b=108;if( c == 1 )c=108;

if ( a == 2)a=15;if( b == 2)b=15;if( c == 2 )c=15;

imprime(22,12,a+'0');

imprime(32,12,b+'0');

imprime(42,12,c+'0');

imprime(35,14,oportunidad + '0' - 1);

delay(50);

}

}

if ( a == 15 && b == 15 && c == 15)

{

imprime_cad(1,24,"BASTARD! You're lucky this time - but for your own sake, now");

imprime_cad(1,25,"SWITCH OFF YOUR COMPUTER AND DONT'TURN IT ON TILL TOMORROW!!!");

delay(10000);

cas = NO;

count = 0;

oportunidad = 5;

a='0';b='0';c='0';

}

if ( tecla )

if ( a == 108 && b == 108 && c == 108)

oportunidad = 0;

if(oportunidad == 0)

{

imprime_cad(1,24,"Perdiste se presenta un mensaje burlon y ofensivo Y ADIOS A LA INFORMACION!");

delay(5000);

cas = NO;

count = 0;

for (cc=1;cc<=25;cc++)

imprime_cad(1,cc," ");

oportunidad = 5;

}

if ( tecla )

{

oportunidad--;

tecla = NO;

}

}

if (count < 64000U) count++; /* el contador llego al tope ? */

/* Cambia al manejador anterior. */

_chain_intr(ViejoReloj);

}

///////////////////////////////////////////////////////////////////////////////////////////////////

// Imprime()

// imprime un caracter directamente a la memoria de video

///////////////////////////////////////////////////////////////////////////////////////////////////

void imprime(unsigned char x,unsigned char y,unsigned char car )

{

unsigned int xx;

if (x<1 || x >80)return; // Si x es menor a uno o mayor a ochenta retorna

if (y<1 || y >25)return; // '' '' '' ''

x--;y--; // Retrasa uno

xx = (y * 160) + (x * 2); // Calacula la posicion de el caracter

pantalla[xx] = car; // Escribe el caracter en pantalla

}

//////////////////////////////////////////////////////////////////////////////////////////////////

// Imprime_cad()

// imprime una cadena directamente a la memoria de video

///////////////////////////////////////////////////////////////////////////////////////////////////

void imprime_cad(unsigned char x,unsigned char y,unsigned char *cad )

{

unsigned int xx;

if (x<1 || x >80)return; // Si x es menor a uno o mayor a ochenta retorna

if (y<1 || y >25)return; // '' '' '' ''

x--;y--; // Retrasa uno

xx = (y * 160) + (x * 2); // Calacula la posicion de el caracter

while( *cad ){

pantalla[xx] = *cad++; // Escribe el caracter en pantalla

xx+=2;

}

}

void casino(void)

{

for (cc=1;cc<=25;cc++) // limpia la pantalla

imprime_cad(1,cc," ");

imprime_cad(1,1," DISK DESTROYER A SOUVENIR OF MALTA");

imprime_cad(1,3," I have just DESTROYED the FAT on your Disk !!");

imprime_cad(1,4," However, I have a copy in RAM, and I`m giving you a least chance");

imprime_cad(1,5," to restore your precious data.");

imprime_cad(1,6," WARNING: IF YOU RESET NOW, ALL YOUR DATA WILL BE LOST - FOREVER !!");

imprime_cad(1,7," Your Data depends on game of JACKPOT");

imprime_cad(1,9," CASINO DE MALTE JACKPOT");

imprime_cad(1,11," "‡ "‡ "‡");

imprime_cad(1,12," I£I I?I I0I");

imprime_cad(1,13," "ˆ "ˆ "ˆ");

imprime_cad(1,14," CREDITS : 5");

imprime_cad(1,17," £££ = Your Disk");

imprime_cad(1,18," ??? = My phone No.");

imprime_cad(1,20," ANY KEY TO PLAY");

}

 

Simulador del Virus Devil Dance :

/**************************************************************************/

/* Devil-S.C */

/* Simulador del virus Devil Dance */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria Tiny */

/* Nota nose deve de Enlazar la emulacion del punto flotante */

/**************************************************************************/

/* NOTA:

Este es un programa que termina y

permanese residente (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 3.3, el programa ocupa alrededor de

9K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno Windows o desde cualquier

otro entorno como dosshell */

#include <dos.h>

#include <stdlib.h>

#include <io.h>

#include <sys/stat.h>

 

/* reduce la pila y el monton a lo menos posible */

extern unsigned _heaplen = 1024; /* 1 K Bytes */

extern unsigned _stklen = 1024; /* 1 K Bytes */

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor al teclado */

#define INTR2 0x09

#define SI 1

#define NO 0

#define RELOJ_ID 0xEB

#define CHEQUEA_INSTALADO 0x00

#define EGAVGA 1

#define HERC 2

 

/*-------------------------------------------------------------------------*/

/* Prototipos */

/*-------------------------------------------------------------------------*/

void mesg(char *s);

void interrupt ( *vieja2f )(void);

void interrupt ( *manejador2)( void );

int Targeta( void );

void imprime_cad(unsigned char x,unsigned char y,unsigned char *cad );

void interrupt RelojIntr(void);

void interrupt Nueva2f(unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned);

 

/*-------------------------------------------------------------------------*/

/* Variables globales */

/*-------------------------------------------------------------------------*/

// Puntero para usarse la dirección de la memoria de video.

char far *pantalla;

// Declara punteros a las banderas DOS y CritErr ( Error Critico ).

char far *criterr;

char far *indos;

int R_tecla;

/**********************************************************************

* kb : Modifica la tabla de interrupciones 0x09 del BIOS y *

* Determina si se ha presionado cualquier tecla *

**----------------------------------------------------------------------------------------**

* Entrada : ninguna *

* Salida : ninguna *

* esta función pone la variable tecla a SI y devuelve las *

* interrupciones del teclado tal y como estaban *

***********************************************************************/

void interrupt kb(void)

{

register char k;

R_tecla=inp(0x60); // Lee la tecla

if ( R_tecla == 83 ) // Si la tecla es CRT + ALT + DEL presenta el mensaje

{

k=inp(0x61);

outp(0x61,(k|0x80));

outp(0x61,k);

outp(0x20,0x20); // Envia el fin de la interrupción al chip 8259 PIC

for (k=1;k<=25;k++) // Escribe en la pantalla

imprime_cad(1,k,"");

imprime_cad(5,10,"Have your ever danced with the devil under the weak light of the moon?");

imprime_cad(41,14,"Pray for your disk!");

imprime_cad(41,16,"The_Joker...");

imprime_cad(30,20,"Ha Ha Ha Ha Ha Ha Ha Ha Ha Ha");

}

else

manejador2(); /* llama al manejador anterior */

}

 

 

/*////////////////////////////////////////////////////////////////////////////// */

/* MAIN */

/*//////////////////////////////////////////////////////////////////////////// */

 

int main(void)

{

unsigned int seg;

unsigned int off;

int h;

h = open("DEVIL-S.EXE",S_IREAD);

if ( filelength(h) != 7412){

mesg("\b ERROR el simulador cambio de su tamaño original");

mesg("La cuasa mas segura puede ser un virus o la compresión del archivo");

mesg("Revise su disco con un Antivirus confiable los mas rapido posible");

close(h);

return 0;

}

close(h);

_AH = RELOJ_ID;

_AL = CHEQUEA_INSTALADO;

geninterrupt(0x2f);

if (_AL == 0xff)

{

mesg(" El Simulador de virus DEVIL DANCE u otro Simulador ");

mesg(" Ya se encuentra instalado en memoria! ");

mesg(" U de G Esc. Politecnica Belenes Autor : Jorge Cruz Vargas ");

return 0;

}

/* Obtiene la banderas de acceso al DOS. */

_AH = 0x34;

geninterrupt(0x21); /* Genera la interrupción 0x21 */

seg = _ES; /* obtiene el valor del segmento 0x21 */

off = _BX;

indos = (char far *) MK_FP( seg, off ); /* Este es el valor de cuando

el DOS no esta en una tarea

critica como leer un disco */

criterr = indos - 1; /* Este es el valor de cuando el DOS si esta

en una tarea critica */

if ( Targeta() == EGAVGA) /* Que tipo de monitor hay ? */

pantalla = (char far*)0xB8000000;

else

pantalla = (char far*)0xB0000000;

mesg(" Simulador del virus de DEVIL DANCE ");

mesg(" Caracteristicas del virus original al que se simula : ");

mesg(" Infecta Archivos : .COM Tamaño : 941 Bytes ");

mesg(" NOTA : Este no es un virus y no infecta ");

mesg(" Se Activa presionando CRT + ALT +DEL ");

mesg(" Universidad de Guadalajara Escuela Politecnica Belenes ");

mesg(" Autor: Jorge Cruz Vargas ");

 

/* obtiene la dirección actual del teclado */

manejador2 = getvect(INTR2);

/* instala el nuevo manejador de interrupciones del teclado */

setvect(INTR2,kb);

 

vieja2f = getvect(0x2f);

setvect(0x2f, Nueva2f);

 

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp)-120); /* se resta 120 que es lo de la */

return 0; /* función Targeta que no se vuelve */

} /* a usar */

/**********************************************************************

* Targeta : Determina si hay instalada un tarjeta EGA y VGA *

**-----------------------------------------------------------------------------------------**

* Entrada : ninguna *

* Salida : SI, si es tarjeta EGA y VGA, sino NO *

***********************************************************************/

int Targeta( void )

{

char far *p = MK_FP(0x0040,0x0049); // Puntero a la dirección donde se

// encuntra la informacion del tipo

// de monitor

if (*p == 7) // Si el valor de p es igual a 7 entonces es monocromatico

return HERC;

else // Si no es compatible CGA, EGA, VGA, PGA, Etc.

return EGAVGA;

}

#pragma argsused

/*////////////////////////////////////////////////////////////////////////////////////////

// Nueva2f()

//

// Este es un manejador de interrupciones que se usa

// para comunicar si ya se instalo el programa TSR.

////////////////////////////////////////////////////////////////////////////////////////////*/

void interrupt Nueva2f(unsigned bp, unsigned di, unsigned si,

unsigned ds, unsigned es, unsigned dx,

unsigned cx, unsigned bx, unsigned ax,

unsigned ip, unsigned cs, unsigned flags)

{

/* Chequea el TSR's ID. */

if (_AH != RELOJ_ID)

_chain_intr(vieja2f);

/* Berifica si ya esta instalado */

if (_AL == CHEQUEA_INSTALADO)

{

ax = 0xFFFF;

bx = _psp;

}

}

 

/**********************************************************************

/ mesg Escribe una cadena utilizando a DOS en la posición

/ actual del cursor

/**********************************************************************/

void mesg(char *s)

{

while(*s) // Mientras no termine la cadena

bdos(2,*s++,0); // Escribir usando al DOS

bdos(2,'\r',0); // Retorno de carro

bdos(2,'\n',0); // Nueva linea

}

 

//////////////////////////////////////////////////////////////////////////////////////////////////////

// Imprime()

// imprime un caracter directamente a la memoria de video

///////////////////////////////////////////////////////////////////////////////////////////////////////

void imprime_cad(unsigned char x,unsigned char y,unsigned char *cad )

{

unsigned int xx;

if (x<1 || x >80)return; // Si x es menor a uno o mayor a ochenta retorna

if (y<1 || y >25)return; // '' '' '' ''

x--;y--; // Retrasa uno

xx = (y * 160) + (x * 2); // Calacula la posicion de el caracter

while( *cad ){

pantalla[xx] = *cad++; // Escribe el caracter en pantalla

xx+=2;

}

}

 

Simulador del Virus Ping Pong o Virus de Turin, Italia.

/**************************************************************************/

/* Ping-S.C */

/* Simulador del virus de Turin o Ping Pong */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria Tiny */

/* Nota nose deve de Enlazar la emulacion del punto flotante */

/**************************************************************************/

/* NOTA:

Este es un programa que termina y

permanese residente (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 3.3, el programa ocupa alrededor de

9K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno Windows o desde cualquier

otro entorno como dosshell */

#include <dos.h>

#include <stdlib.h>

#include <io.h>

#include <sys/stat.h>

 

/* reduce la pila y el monton a lo menos posible */

extern unsigned _heaplen = 1024; /* 1 K Bytes */

extern unsigned _stklen = 1024; /* 1 K Bytes */

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor del reloj del BIOS */

#define RELOJ 0x1C

#define SI 1

#define NO 0

#define RELOJ_ID 0xEB

#define CHEQUEA_INSTALADO 0x00

#define EGAVGA 1

#define HERC 2

 

/*-------------------------------------------------------------------------*/

/* Prototipos */

/*-------------------------------------------------------------------------*/

int letra(unsigned char x,unsigned char y);

void mesg(char *s);

void interrupt ( *vieja2f )(void);

void interrupt ( *ViejoReloj )(void);

int Targeta( void );

void imprime(unsigned char x,unsigned char y,unsigned char car );

 

/*-------------------------------------------------------------------------*/

/* Variables globales */

/*-------------------------------------------------------------------------*/

unsigned int tiempo = 2184; /* Espera 2 Minutos en una 386SX-40 Mhz */

// Puntero para usarse la dirección de la memoria de video.

char far *pantalla;

// Declara punteros a las banderas DOS y CritErr ( Error Critico ).

char far *criterr;

char far *indos;

// Variables para la posicion de la pelotita

unsigned char x=1,y=1;

char izq=NO,der=SI,arr=NO,aba=SI;

char AoA = NO;

#pragma argsused

/*/////////////////////////////////////////////////////////////////////////////////////

// Nueva2f()

//

// Este es un manejador de interrupciones que se usa

// para comunicar si ya se instalo el programa TSR.

/////////////////////////////////////////////////////////////////////////////////////////// */

void interrupt Nueva2f(unsigned bp, unsigned di, unsigned si,

unsigned ds, unsigned es, unsigned dx,

unsigned cx, unsigned bx, unsigned ax,

unsigned ip, unsigned cs, unsigned flags)

{

/* Chequea el TSR's ID. */

if (_AH != RELOJ_ID)

_chain_intr(vieja2f);

/* Berifica si ya esta instalado */

if (_AL == CHEQUEA_INSTALADO)

{

ax = 0xFFFF;

bx = _psp;

}

}

 

/*/////////////////////////////////////////////////////////////////////////////////////////

// RelojIntr()

//

// Este manejador de interrupciones. Es el responsable de

// desplegar el reloj en la parte derecha del monitor

// finalmente devuelve la interrupción original.

//////////////////////////////////////////////////////////////////////////////////////////////*/

void interrupt RelojIntr(void)

{

static unsigned int count; /* contador de control para activar el simulador */

/* Esta en una mision critica el MS-DOS?

puede estar escribiendo o leyendo en el diskette o disco duro */

AoA = NO;

if ( count >= tiempo )

if (!*indos && !*criterr)

{

imprime(x,y,' '); // Borra la pelotita anterior

if( aba ){

y++;

AoA = SI;

if ( (y > 25) || letra(x,y) ){arr=SI;aba=NO;}

}

if( arr ){

y--;

AoA = SI;

if ( (y <= 1) || letra(x,y) ){arr=NO;aba=SI;}

}

if( der ){ // Se calcula la posicion de la pelotita

x++;

if ( x > 80 || ( (letra(x,y) && !AoA) )){izq=SI;der=NO;}

}

if( izq ){

x--;

if (x <= 1 || ( (letra(x,y) && !AoA) )){izq=NO;der=SI;}

}

imprime(x,y,'°'); // Imprime la pelotita

}

if (count < 64000U) count++; /* el contador llego al tope ? */

/* Cambia al manejador anterior. */

_chain_intr(ViejoReloj);

}

 

////////////////////////////////////////////////////////////////////////////////////////////////////

// Imprime()

// imprime un caracter directamente a la memoria de video

////////////////////////////////////////////////////////////////////////////////////////////////////

void imprime(unsigned char x,unsigned char y,unsigned char car )

{

unsigned int xx;

if (x<1 || x >80)return; // Si x es menor a uno o mayor a ochenta retorna

if (y<1 || y >25)return; // '' '' '' ''

x--;y--; // Retrasa uno

xx = (y * 160) + (x * 2); // Calacula la posicion de el caracter

pantalla[xx] = car; // Escribe el caracter en pantalla

}

///////////////////////////////////////////////////////////////////////////////////////////////////////

// Letra()

// Detecta si hay un caracter en la pantalla

///////////////////////////////////////////////////////////////////////////////////////////////////////

int letra(unsigned char x,unsigned char y)

{

unsigned int xx;

if (x<1 || x >80)return NO; // Si x es menor a uno o mayor a ochenta retorna

if (y<1 || y >25)return SI; // '' '' '' ''

x--;y--; // Retrasa uno

xx = (y * 160) + (x * 2); // Calcula la posicion de el caracter

if (pantalla[xx] == ' ')

return NO;

else

return SI;

}

/**********************************************************************

* Targeta : Determina si hay instalada un tarjeta EGA y VGA *

**-----------------------------------------------------------------------------------------**

* Entrada : ninguna *

* Salida : SI, si es tarjeta EGA y VGA, sino NO *

***********************************************************************/

int Targeta( void )

{

char far *p = MK_FP(0x0040,0x0049); // Puntero a la dirección donde se

// encuntra la informacion del tipo

// de monitor

if (*p == 7) // Si el valor de p es igual a 7 entonces es monocromatico

return HERC;

else // Si no es compatible CGA, EGA, VGA, PGA, Etc.

return EGAVGA;

}

/*/////////////////////////////////////////////////////////////////////////////// */

/* MAIN */

/*/////////////////////////////////////////////////////////////////////////////// */

 

int main(int argc,char *argv[])

{

unsigned int seg;

unsigned int off;

int h;

h = open("PING-S.EXE",S_IREAD);

if ( filelength(h) != 9014){

mesg("\a ERROR el simulador cambio de su tamaño original");

mesg("La cuasa mas segura puede ser un virus o la compresión del archivo");

mesg("Revise su disco con un Antivirus confiable los mas rapido posible");

close(h);

return 0;

}

close(h);

_AH = RELOJ_ID;

_AL = CHEQUEA_INSTALADO;

geninterrupt(0x2f);

if (_AL == 0xff)

{

mesg(" El Simulador de virus de Turin o Ping - Pong ");

mesg(" u otro Simulador Ya se encuentra instalado en memoria! ");

mesg(" U de G Esc. Politecnica Belenes Autor : Jorge Cruz Vargas ");

return 0;

}

/* Obtiene la banderas de acceso al DOS. */

_AH = 0x34;

geninterrupt(0x21); /* Genera la interrupción 0x21 */

seg = _ES; /* obtiene el valor del segmento 0x21 */

off = _BX;

indos = (char far *) MK_FP( seg, off ); /* Este es el valor de cuando

el DOS no esta en una tarea

critica como leer un disco */

criterr = indos - 1; /* Este es el valor de cuando el DOS si esta

en una tarea critica */

if ( Targeta() == EGAVGA) /* Que tipo de monitor hay ? */

pantalla = (char far*)0xB8000000;

else

pantalla = (char far*)0xB0000000;

if ( argc >= 2 ) /* Si el numero de argumentos es mayor a dos */

if( atoi(argv[ 1 ]) == 0) /* se convierte el argumento a entero */

{

/* atoi no pudo convertir el signo "?" o cualquier otro */

mesg(" El tipo para instalar este programa es : ");

mesg(" Ping-S [ Limite tiempo (Minutos) ] ");

mesg(" Donde limite de tiempo es el tiempo que dura en activarse ");

mesg(" Ejemplo : Ping-S 5 ");

mesg(" El Simulador de virus Ping - Pong se activa en 5 minutos ");

return 1;

}

else

if ( atoi(argv[1]) < 1 || atoi(argv[1]) > 9)/* Protección para que */

/* el tiempo no sea mayor */

{ /* a una hora */

mesg(" ERROR el tiempo de el Simulador de Virus Ping - Pong ");

mesg(" no puede ser menor de un minuto ni mayor a una 9 Minutos ");

mesg(" Teclee Ping-S /? para ayuda ");

return 1;

}

tiempo = (unsigned)((atoi(argv[1]))*18*60);/* determina el tiempo en M */

mesg(" Simulador del virus de Turin o Ping-Pong ");

mesg(" Caracteristicas del virus original al que se simula : ");

mesg(" Infecta : Sectro de Arranque de los discos Tamaño : Varia ");

mesg(" NOTA : Este no es un virus y no infecta ");

mesg( argv[1] );

mesg("Š Minutos para activarse\n");

mesg(" Universidad de Guadalajara Escuela Politecnica Belenes ");

mesg(" Autor: Jorge Cruz Vargas ");

/* obtiene el manejador altual del teclado */

ViejoReloj = getvect(RELOJ);

/* intala el manejador del reloj */

setvect(RELOJ, RelojIntr);

vieja2f = getvect(0x2f);

setvect(0x2f, Nueva2f);

 

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp)-120); /* se resta 120 que es lo de la */

return 0; /* función Targeta que no se vuelve */

} /* a usar */

/**********************************************************************

/ mesg Escribe una cadena utilizando a DOS en la posición

/ actual del cursor

/**********************************************************************/

void mesg(char *s)

{

while(*s) // Mientras no termine la cadena

bdos(2,*s++,0); // Escribir usando al DOS

bdos(2,'\r',0); // Retorno de carro

bdos(2,'\n',0); // Nueva linea

}

 

Simulador del Virus Stoned :

/**************************************************************************/

/* Stoned-S.C */

/* Simulador del Stoned */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria Tiny */

/* Nota nose deve de Enlazar la emulacion del punto flotante */

/**************************************************************************/

/* NOTA:

Este es un programa que termina y

permanese residente (TSR), que por su

naturaleza es problematico no se

use con sistemas operativos anteriores

al DOS 3.3, el programa ocupa alrededor de

9K en memoria y se puede instalar en

memoria alta. */

/* ADVERTENCIA

No se trate de instalar desde el

entorno Windows o desde cualquier

otro entorno como dosshell */

#include <dos.h>

#include <stdlib.h>

#include <io.h>

#include <sys/stat.h>

 

/* reduce la pila y el monton a lo menos posible */

extern unsigned _heaplen = 1024; /* 1 K Bytes */

extern unsigned _stklen = 1024; /* 1 K Bytes */

/*-- Constantes ------------------------------------------------------*/

p>/* Interruptor del reloj del BIOS */

#define RELOJ 0x1C

#define SI 1

#define NO 0

#define RELOJ_ID 0xEB

#define CHEQUEA_INSTALADO 0x00

#define EGAVGA 1

#define HERC 2

 

/*-------------------------------------------------------------------------*/

/* Prototipos */

/*-------------------------------------------------------------------------*/

int rand(void);

void mesg(char *s);

void interrupt ( *vieja2f )(void);

void interrupt ( *ViejoReloj )(void);

void interrupt ( *manejador2)( void );

void interrupt RelojIntr(void);

void interrupt Nueva2f(unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned,

unsigned, unsigned, unsigned, unsigned);

 

/*-------------------------------------------------------------------------*/

/* Variables globales */

/*-------------------------------------------------------------------------*/

// Declara punteros a las banderas DOS y CritErr ( Error Critico ).

char far *criterr;

char far *indos;

/*///////////////////////////////////////////////////////////////////////////////////*/

/* MAIN */

/*///////////////////////////////////////////////////////////////////////////////////*/

 

int main( void )

{

unsigned int seg;

unsigned int off;

int h;

h = open("STONED-S.EXE",S_IREAD);

if ( filelength(h) != 7086){

mesg("\b ERROR el simulador cambio de su tamaño original");

mesg("La cuasa mas segura puede ser un virus o la compresión del archivo");

mesg("Revise su disco con un Antivirus confiable los mas rapido posible");

close(h);

return 0;

}

close(h);

_AH = RELOJ_ID;

_AL = CHEQUEA_INSTALADO;

geninterrupt(0x2f);

if (_AL == 0xff)

{

mesg(" El Simulador de virus Stoned u otro Simulador ");

mesg(" Ya se encuentra instalado en memoria! ");

mesg(" U de G Esc. Politecnica Belenes Autor : Jorge Cruz Vargas ");

return 0;

}

/* Obtiene la banderas de acceso al DOS. */

_AH = 0x34;

geninterrupt(0x21); /* Genera la interrupción 0x21 */

seg = _ES; /* obtiene el valor del segmento 0x21 */

off = _BX;

indos = (char far *) MK_FP( seg, off ); /* Este es el valor de cuando

el DOS no esta en una tarea

critica como leer un disco */

criterr = indos - 1; /* Este es el valor de cuando el DOS si esta

en una tarea critica */

 

mesg(" Simulador del virus Stoned ");

mesg(" Caracteristicas del virus original al que se simula : ");

mesg(" Infecta : Sector de Arranque de los discos Tamaño : Varia ");

mesg(" NOTA : Este no es un virus y no infecta ");

mesg(" Se Activara aleatoriamente ");

mesg(" ¦ Universidad de Guadalajara Escuela Politecnica Belenes ");

mesg(" ¦ Autor: Jorge Cruz Vargas ");

/* obtiene el manejador altual del teclado */

ViejoReloj = getvect(RELOJ);

/* intala el manejador del reloj */

setvect(RELOJ, RelojIntr);

vieja2f = getvect(0x2f);

setvect(0x2f, Nueva2f);

 

/* _psp es el comienzo de la direccion de el

programa en memoria. El final de la pila

es el fin del programa. Usando _SS y

_SP siempre se puede calcular el fin de la

pila. Asi se puede calcular el tamaño esacto

de memoria que se necesita para el TSR y

dejarlo colocado en memoria. La formula es:

(_SS + ((_SP + [espacio seguro])/16) - _psp)

*/

keep(0, (_SS + (_SP/16) - _psp)-120); /* se resta 120 que es lo de la */

return 0; /* función Targeta que no se vuelve */

} /* a usar */

#pragma argsused

/*/////////////////////////////////////////////////////////////////////////////////////////////

// Nueva2f()

//

// Este es un manejador de interrupciones que se usa

// para comunicar si ya se instalo el programa TSR.

////////////////////////////////////////////////////////////////////////////////////////////////// */

void interrupt Nueva2f(unsigned bp, unsigned di, unsigned si,

unsigned ds, unsigned es, unsigned dx,

unsigned cx, unsigned bx, unsigned ax,

unsigned ip, unsigned cs, unsigned flags)

{

/* Chequea el TSR's ID. */

if (_AH != RELOJ_ID)

_chain_intr(vieja2f);

/* Berifica si ya esta instalado */

if (_AL == CHEQUEA_INSTALADO)

{

ax = 0xFFFF;

bx = _psp;

}

}

 

/**********************************************************************

/ mesg Escribe una cadena utilizando a DOS en la posición

/ actual del cursor

/**********************************************************************/

void mesg(char *s)

{

while(*s) // Mientras no termine la cadena

bdos(2,*s++,0); // Escribir usando al DOS

bdos(2,'\r',0); // Retorno de carro

bdos(2,'\n',0); // Nueva linea

}

 

/*////////////////////////////////////////////////////////////////////////////////////////////////

// RelojIntr()

//

// Este manejador de interrupciones. Es el responsable de

// desplegar el reloj en la parte derecha del monitor

// finalmente devuelve la interrupción original.

/////////////////////////////////////////////////////////////////////////////////////////////////////*/

void interrupt RelojIntr(void)

{

static unsigned char count; /* contador de control para activar el simulador */

static unsigned char num; /* contador de control para activar el simulador */

count = rand() % 100;

num = rand() % 100;

/* Esta en una mision critica el MS-DOS?

puede estar escribiendo o leyendo en el diskette o disco duro */

if ( count == num )

if (!*indos && !*criterr)

{

mesg("\r\nYor PC is now Stoned!");

mesg("LEGALIZE MARIJUANA");

}

/* Cambia al manejador anterior. */

_chain_intr(ViejoReloj);

}

Antivirus del autor:

/**************************************************************************/

/* v13.C */

/* Programa antivirus para el virus Friday 13h */

/* Universidad de Guadalajara */

/* Escuela Politecnica Belenes */

/* Autor : Jorge Cruz Vargas */

/**************************************************************************/

/* Modelo de memoria tiny o superior */

/**************************************************************************/

#include <string.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <io.h>

#include <fcntl.h>

/***************************************************************************/

/* Caracteristicas del virus : */

/* Tama¤o : en archivos .COM 1813 Bytes y en .EXE 1820 Bytes */

/* infecta archivos .COM y .EXE por igual */

/* Si el dia es Viernes 13 Borra las tabla FAT de los discos */

/***************************************************************************/

// Declaraci¢n de la funci¢n limpiar

void limpiar( void );

void presenta( void );

#define SI 1

#define NO 0

char nombre_arch[35]="";

int main(int c,char *v[])

{

FILE *stream;

char ch[13]="";

char l = NO;

int cont = 0;

// Pedaso de codigo maquina del virus Friday 13h en archivos .COM

char virus_com[]={0xE9,0x92,0x00,0x73,0x55,0x4D,0x73,0x44,0x6F,0x73,0x00};

// verifica si hay parametros

if ( c > 1 )

{

presenta(); // despliega la presentaci¢n

stream = fopen( v[1], "rwb+"); // Abre el archivo

}

else // Si no los hay despliega la ayuda

{

printf("\nLocalizador del virus Friday 13h\ninstrucciones:\nV13 <nombre de archivo.extencion>\n");

exit(0); // Termina con el programa

}

fseek(stream, 0, SEEK_SET); // Posiciona el puntero al inicio del archivo

strcpy(nombre_arch,v[1]); // Copia el nombre de el parametro a la variable global

////////////////////////////////////////////////////////////////////

// Parte Esencial del programa antivirus

////////////////////////////////////////////////////////////////////

do

{

ch[cont] = fgetc(stream); // Lee un caracter y

if ( ch[cont] == virus_com[cont] ) // lo verifica con el codigo

l = SI; // maquina del virus

else

break;

cont++;

} while (cont != 11);

/////////////////////////////////////////////////////////////////////////

if ( cont == 11 && l == SI)

{

printf("\b\nArchivo contaminado con el virus viernes 13h Desea Limpiarlo? (S/N)");

fclose(stream); // Cierra el archivo

limpiar(); // Limpia el virus

}

else // No se encontro el virus

printf("\b\n El virus viernes 13h no se encuentra\n");

return 0;

}

/////////////////////////////////////////////////////////////////////////

// Limpia el virus Viernes 13h o Friday 13h

// Forma de limpiado : sustituci¢n por medio de copiado de la parte no

// contaminada con el virus

/////////////////////////////////////////////////////////////////////////

void limpiar( void )

{

int s1,s2; // Variables para los dos archivos necesarios

unsigned char car; //

char arch_t[35]="",letra;

long int cont = 1813,longitud;

strcpy(arch_t,nombre_arch);

// Le cambia la extencion temporalmente al archivo

arch_t[strlen(arch_t)-1] = 'M';

arch_t[strlen(arch_t)-2] = 'I';

arch_t[strlen(arch_t)-3] = 'L';

 

s1 = open( nombre_arch, O_BINARY | O_RDONLY);

s2 = open( arch_t, O_CREAT | O_BINARY | O_WRONLY);

longitud=filelength(s1); // Se toma la longitus del archivo

// Lee desde el teclado si se presiono la S

letra = getch();

// Verifica que la letra sea S

if ( letra == 'S' || letra == 's' )

{

lseek(s1, 1808L, SEEK_SET);//Posiciona el puntero en la posici¢n

do{ //donde principia el programa real sin virus

if ( read(s1,&car,1) == 0 ) putch(7); // Lee y escribe caracter x car.

if ( write(s2,&car,1) ==0 ) putch(7); // Si hay un error hace un beep

cont++; // Incrementa el contador

}while( cont < longitud); // Mientras no se llege al fin de archivo

}

close( s1 ); // Cierra los archivos

close( s2 );

 

if ( letra == 'S' || letra == 's' )

{

remove( nombre_arch ); // Borra el archivo infectado

rename( arch_t,nombre_arch ); //renombra el archivo temporal al archivo real

}

}

////////////////////////////////////////////////////////////////////////

// Presentacion del programa

//

/////////////////////////////////////////////////////////////////////////

void presenta( void )

{

printf(" Antivirus Viernes 13h o Friday 13h \n");

printf(" Caracteristicas del antivirus : Solo limpia archivos .COM \n");

printf(" NOTA : Este programa solo es de demostraci¢n pero sí_ \n");

printf(" desinfecta o limpia los archivos .COM infectados. \n");

printf(" Universidad de Guadalajara Escuela Politecnica Belenes \n");

printf(" Autor: Jorge Cruz Vargas \n");

}

 

 

 

 

VIII.-CONCLUSIONES.

 

8.1 Medidas de Seguridad.

Después de haber terminado con todo este estudio y darnos cuenta que de lo peligroso que puede ser un virus creo que ninguna medida de seguridad sobra para ayudarnos a mantener la integridad de nuestra información, enseguida se muestran algunos pasos que se pueden seguir fácilmente para protegernos de los virus.

8.2 Derechos de Autor.

Todo software registrado tiene un derecho de autor, que en la mayoría de las veces prohibe copiar su software de cualquier forma sin su consentimiento, por ética general creo que se debería respetar este derecho que de alguna forma daña a todo el rompe con este, el autor se daña teniendo perdidas por cada copia que se hace a su software, mientras tanto el que lo copia se daña de forma en que su software no tiene ninguna garantía, se esta infringiendo en un delito, el software puede estar dañado, o por lo antes dicho puede estar infectado por algún tipo de virus ( que en la mayoría de los casos es así ).

 

 

 

IX.- Bibliografia.

 

 

 

 

VIRUS EN LAS COMPUTADORAS

Gonzalo Ferreyra Cortés (c) 1994 Ediciones Alfaomega S.A de C.V

FUNCIONES DEL DOS Y BIOS (c) 1990 Addison-Wesley Iberoamericana

PASCAL Introducción al lenguaje.

Koffman (c) 1986 Addison-Wesley Iberoamericana

VIRUS INFORMATICOS

Richard B.Levin (c) 1992 McGRAW-Hill/Interamericana

C guia para usuarios expertos

Herbert Schildt (c) 1989 McGRAW-Hill/Interamericana

Lenguaje Ensamblador para

MicroComputadoras IBM

J.Terry Godfrey (c) 1991 Prentice-all/Hispanoamericana