La meta de este curso es el aprendizaje de métodos en programación, tanto en teoría como en práctica, de virus informáticos. No obstante, no ofreceré el camino típico; esto es, aprender ensamblador, aprender formatos de ficheros e infectar. Con alguna experiencia en el tema, creo que lo primero que hay que hacer no es ponerse a programar como un salvaje sin entender qué se está tocando y cómo funciona: se dará pues una visión general acerca de todo aquello que se va a tocar (arquitectura de un computador y sistemas operativos), necesaria antes de empezar a programar nada, y con esto en mente debería de resultar muchísimo más sencillo no ya sólo programar virus, sino desarrollar cualquier otro tipo de aplicaciones que necesiten conocimientos de este estilo.

Algunos consejos antes de empezar:

  • Escribir virus informáticos no es fácil. Requiere esfuerzo, requiere muchas horas delante de un ordenador, a veces tan solo para corregir diez líneas de código que no sabes por qué no funcionan. La paciencia es la primera arma con la que hay que contar. Por eso, aunque he intentado ser detallado en las explicaciones y pongo mucho código en ellas, no hay virus completos en este curso. No se puede dar todo hecho, uno ha de acostumbrarse desde el principio a tener que buscarse la vida y soportar la desesperación cuando algo no funciona hasta que al fin se descubre cuál era el fallo.
  • Eso implica una cosa; escribe virus porque te guste escribir virus. Quien pretende ser el mega-h4x0r y llenar el mundo de bichitos o cualquier cosa así, se quemará cuando tenga que tirarse dos horas debuggeando código hasta descubrir que algo no funciona porque se le olvidó añadir una estupidez. Quien pretende ser un malote-jax0rito lo tiene más fácil si se baja programas para nukear y se pone a hacer el idiota en IRC o escribe un estúpido troyano en un .BAT y se lo intenta colar a la gente (patético, ¿verdad?)… en resumen, destruir es muy sencillo, lo difícil es
  • Imaginación es la clave a la hora de escribir virus informáticos; el mundo está lleno de gente que escribe bazofia con lenguaje de Macro de Word, o incluso de programadores que aunque muy buenos técnicamente, no aportan nada cuando escriben algo. Un virus sencillo que tenga algo nuevo aporta mucho más que el m3g4v1rus de 30kb que infecta diez mil tipos de fichero que ya han sido infectados antes. Sería fácil sacar un virus polimórfico para Linux reutilizando otro engine que tuvieramos hecho para Windows, pero… ¿qué aportaría?
  • Si parte de tus pretensiones se orientan hacia la rama que llamaríamos hacktivista, ten cuidado con los programas autorreplicantes si quieres darles el uso de arma; mide sus posibilidades, pues la difusión de un virus con toda probabilidad causará no más que daños a usuarios inocentes. Los virus como baza antisistema, como método del caos, serían todo un tema a discutir pero que evidentemente se sale de la temática de este curso y es responsabilidad de cada persona individual; no obstante como digo, soltar un virus aparte de ilegal no es precisamente algo «agradable» para el usuario que reacciona borrando sus archivos para librarse de él. Dañar la información contenida en un ordenador no aporta nada positivo a nadie, y aunque tu código no sea destructivo el usuario que reacciona con pánico desconoce ese hecho; puede destruirlo él mismo siendo tú indirectamente responsable de ello. Aunque tú eres quien ha de decidir qué hacer con la información, si he de dar algún tipo de consejo es sencillo; no sueltes tus virus, experimenta en tu ordenador. No ganarás nada de otra forma.
  • Por último, aclarar que mi única labor aquí es transmitir información. Lo que cada uno haga con ella es asunto suyo; ni me siento ni soy responsable de aquello que cada persona pueda decidir hacer una vez dotado de los conocimientos suficientes para escribir programas autorreplicantes (virus). Mantengo mi propia ética respecto a los virus informáticos que consiste en no «soltarlos» y enviar los ejecutables a compañías antivirus si voy a publicar el código en algún lado. Esta ética personal no tiene por qué coincidir con la de quien lea este curso; toma tus propias decisiones y sé responsable de ellas, aunque si eres del tipo «soy mal@ y quiero infectar al mundo», mejor será que te olvides de este curso, te aburrirá…
Tabla de Contenidos
Introducción.
Objetivos del curso y algunos consejos antes de empezar
Capítulo 1. Estructura de computadores.
Funcionamiento de un microprocesador standard, memoria, buses, E/S, microprogramación
Capítulo 2. Fundamentos de SSOO.
Funcionamiento básico de un sistema operativo; shell, API y kernel
Capítulo 3. Sistemas de numeración.
Tocando el binario, hexadecimal y aritméticas binarias
Capítulo 4. Ensamblador I: Conceptos básicos.
Aprendizaje del lenguaje ASM, principales conceptos
Capítulo 5. Ensamblador II: Conceptos avanzados.
Instrucciones avanzadas, API del sistema, coprocesador
Capítulo 6. Utilidades para la programación.
Visores hexadecimales, ensambladores, desensambladores y debuggers
Capítulo 7. Infección bajo Windows.
Técnicas para la programación de virus en Windows
Capítulo 8. Infección bajo Linux.
Programación de autorreplicantes en sistemas Linux
Capítulo 9. Técnicas avanzadas.
Algunos conceptos algo más complejos para la programación de virus (encriptación y polimorfismo)
Apéndices
Bibliografía y referencias
Fuente: Wintermute