Está en la página 1de 17

1.

INTRODUCCION
Les doy la bienvenida a la lectura del primero de una serie de documentos, que tendrn como objetivo poder orientar y ensear a los usuarios, sobre el desarrollo de diferentes herramientas usando Visual Basic 6. En esta primera ocasin nos vamos a centrar en lo que conocemos como Crypters. Antes de empezar, quisiera aclarar que este pdf est orientado a los ms nuevo, no se encontrarn con mtodos de indetectabilidad, sino que est totalmente canalizado a la programacin de la herramienta.

2. QUE ES UN CRYPTER?
Los crypters son aplicaciones que se encargan de tomar un archivo A y alterarlo (disfrazarlo) para obtener un archivo B totalmente irreconocible comparado con el original. Ese paso intermedio de disfrazado se obtiene por medio del uso de algn mtodo criptogrfico. 2.1 PARTES DE UN CRYPTER Los crypters poseen dos partes: Un Builder y un Stub. El Builder es la interfaz grfica. Que tiene como objetivo cifrar la aplicacin seleccionada. El Stub es el que se encargar de leer el cdigo de la aplicacin cifrada y ejecutarlo como deba ser. 2.2 CLASIFICACION Considerando como manipulan el archivo cifrado, los crypters se puede diferenciar en: Scantime y Runtime. Un crypter Scantime crea el archivo que a encriptado fsicamente en el disco duro de las computadoras, mientras que uno Runtime lo almacena directamente en memoria para luego ser ejecutado. 2.3 FUNCIONAMIENTO Como ya mencionamos, el objetivo de un crypter era disfrazar un archivo haciendo uso de algn mtodo criptogrfico. En otras palabras, el builder toma el archivo elegido, lo cifra mediante algn algoritmo, y mete el stub y el archivo cifrado en un mismo binario.

3. PROGRAMANDO EL BUILDER
Comenzaremos programando el builder. Abrimos VB6, elegimos EXE estndar y luego Abrir.

Se nos crear un nuevo proyecto con el form por defecto. Cambiamos el nombre del proyecto por Builder y el del form1 por Principal usando la tabla de propiedades. Quedndonos as:

Seleccionamos el form Principal y modificamos las siguientes propiedades: BorderStyle 1 - Fized Single (los bordes del form) Caption Crypter Talleres Udtools (texto de la barra de ttulos) Height 1650 (alto del form) MinButton True (habilitamos el botn minimizar) StartUpPosition 2 - CenterScreen (posicin por defecto del form) Width 4065 (ancho del form) Ya tenemos la configuracin de la ventana principal.

Ahora agregaremos los componentes. Vamos a necesitar: 2 TextBox 3 CommandButton

Vamos a cambiar las propiedades a cada uno de los componentes. (1) Text1: (Nombre) txtArchivo (nombre del TextBox) Alignment 2 - Center (alineacin del texto) Height 285 (alto de TextBox) Left 120 (posicin horizontal del TextBox respecto del borde del form) Locked True (bloqueamos para que sea de solo lectura) Text Ruta del Archivo (texto) Top 120 (posicin vertical del TextBox respecto del borde del form) Width 3135 (ancho de TextBox) (2) Text2: (Nombre) txtPass (nombre del TextBox) Alignment 2 - Center (alineacin del texto) Height 285 (alto de TextBox)

Left 120 (posicin horizontal del TextBox respecto del borde del form) Text Pass (texto) Top 480 (posicin vertical del TextBox respecto del borde del form) Width 3135 (ancho de TextBox) (3) Command1: (Nombre) btnBuscar (nombre del Button) Caption ... (texto del Button) Height 255 (alto de Button) Left 3360 (posicin horizontal del Button respecto del borde del form) Top 120 (posicin vertical del Button respecto del borde del form) Width 495 (ancho de Button) (4) Command2: (Nombre) btnRn (nombre del Button) Caption Rn (texto del Button) Height 255 (alto de Button) Left 3360 (posicin horizontal del Button respecto del borde del form) Top 480 (posicin vertical del Button respecto del borde del form) Width 495 (ancho de Button) (5) Command3: (Nombre) btnEncriptar (nombre del Button) Caption Encriptar (texto del Button) Height 255 (alto de Button) Left 120 (posicin horizontal del Button respecto del borde del form) Top 840 (posicin vertical del Button respecto del borde del form) Width 3735 (ancho de Button) Para finalizar con la preparacin de la gui, vamos a necesitar un CommondDialog. Pero primero tenemos que agregarlo al proyecto, para ello nos dirigimos al men Proyecto y seleccionamos Componentes...

En la nueva ventana, buscamos en la lista: Microsoft Common Dialog Control 6.0. Lo tildamos y presionamos Aceptar.

Podremos notar que se nos a agregado un nuevo componente en la barra de la izquierda, que se llama CommondDialog.

Agregamos uno en el form, en cualquier parte ya que no es visible a la hora de ejecucin del proyecto. Solo le voy a cambiar la propiedad (Nombre) por Cd. Para el que no sabe, el CommondDialog es el componente que nos va a brindar la posibilidad de usar los cuadro de dilogos como los de abrir y guardar archivos. Ya tenemos toda la parte grfica con las configuraciones terminada. Ahora empezaremos con el cdigo.

Hacemos doble click sobre el botn btnBuscar, automticamente nos va a abrir la parte del cdigo y nos va a agregar el evento click de dicho botn.

Este botn es el encargado de hacer uso del CommonDialog para buscar el archivo a encriptar. Para ello, el cdigo es el siguiente:

La primera y ltima lnea son las vistas anteriormente, as que explicare las restantes. Lnea 2: en caso de ocurrir algn error hago un salto (GoTo) a la etiqueta Error: que se encuentra en la lnea 10. Lnea 3: abro un With <componente>, con esta lnea es posible usar un componente en las lneas siguientes sin necesidad de nombrarlo, pudiendo usar sus propiedades con solo poner un punto (.). Lnea 4: cambiamos el ttulo del cuadro de dilogo (propiedad DialogTitle). Lnea 5: usamos la propiedad Filter para limitar las extensiones aceptadas por el commonddialog. Lnea 6: seteamos a True la propiedad CancelError, con esto vamos a poder captar el botn cancelar del cuadro de dilogo. Lnea 7: esta Lnea es para mostrar el cuadro de abrir archivo (Show Open). Ms adelante veremos que si queremos usar el cuadro de guardar archivo tendremos que poner ShowSave. Lnea 8: cerramos en With. Lnea 9: vaca. Lnea 10: etiqueta para saltar a esta lnea usando algn GoTo. Lnea 11: en esta lnea comprobamos el error producido por el cuadro de dilogo. El error 32755 es el causado por el cerrado del cuadro mediante el botn cancelar, tambin se incluye el cerrado por el botn cerrar de la barra de ttulos. Por lo tanto si el error no es el 32755 entra al if. Lnea 12: coloco la ruta del archivo seleccionado en la propiedad Text del TextBox txtArchivo. Aqu utilizo en Cd porque ya estoy fuera del With. Lnea 13: cierro el if. Para ir probando lo que ya hemos hecho podemos hacerlo mediante el botn Iniciar O mediante el men Ejecutar Iniciar.

Botn btnBuscar terminado. Ahora haremos el btnRn. La funcin de este ltimo ser crear una variable aleatoria para ser usada como key en la encriptacin. Vamos a la interfaz grfica y hacemos doble click sobre el botn btnRn. Se nos agrega el cdigo del evento click.

Debemos colocar el cdigo para generar la variable y colocarla en el TextBox txtPass. Yo lo hice as:

Lnea 2 y 3: declaramos dos variables tipo String llamadas abecedario y variable. Lnea 4: declaramos una variable tipo Integer llamada i. Lnea 5: vaca. Lnea 6: le agrego un string a abecedario con todos los caracteres con que se va a armar la variable deseada. Lnea 7: seteo la variable variable con una cadena vaca. Lnea 8: vaca. Lnea 9: utilizo la variable i para hacer un bucle con un for, cuya cantidad de vueltas van a ser la longitud de la nueva variable creada.

Lnea 10: esta lnea es la que crea la variable. En cada vuelta del for agrega un nuevo carcter a la variable, que lo obtiene mediante la funcin mid. Esta funcin permite extraer cualquier parte de una cadena, dndole como parmetros la posicin de comienzo y la cantidad de caracteres. Como en mi caso la cantidad de caracteres es 1, va extrayendo de a carcter. Y la posicin se la obtiene aleatoriamente mediante la funcin Rnd. Lnea 11: vaca. Lnea 12: coloco el valor de la variable variable en la propiedad Text del TextBox txtPass. Pruebo el nuevo cdigo.

Para terminar con el builder nos queda el botn btnEncriptar. Pero antes vamos a necesitar algn algoritmo de encriptacin. Yo voy a utilizar Xor. Para ello agrego un mdulo de clase, yendo al men Proyecto y luego Agregar mdulo de clase o como se muestra en la siguiente imagen.

Lo renombro clsXor. Y dentro del mdulo pondremos el cdigo, que es el siguiente:

Vamos al form para hacer doble click en el botn btnEncriptar y nos agregar el evento click.

Esta es la parte ms interesante y es la que va a tomar el archivo, encriptarlo y crear el nuevo archivo que contenga el stub mas el archivo encriptado. Cdigo entero:

Lnea 2: en caso de ocurrir algn error hago un salto (GoTo) a la etiqueta Error: que se encuentra en la lnea 19. Lnea 3, 4 y 5: declaramos tres variables tipo String llamadas datos, stub y archEncriptado. Lnea 6: vaca. Lnea 7: generamos una instancia del mdulo clsXor. Lnea 8: vaca. Lnea 9: usando un if verificamos el texto del TextBox txtArchivo, para saber si ya se ha elegido un archivo o no. Si no se a elegido entramos al if.

Lnea 10: si estamos ac es porque entr al if anterior y es debido a que no hemos elegido ningn archivo, as que informamos mediante un MsgBox que debe hacerlo. Lnea 11: salimos del sub. Lnea 12: cerramos el if. Lnea 13: usando un if verificamos el texto del TextBox txtPass, para saber si existe una key o no. Si no existe entramos al if. Lnea 14: si estamos ac es porque entr al if anterior y es debido a que no hemos establecido ninguna key para encriptar, as que informamos mediante un MsgBox que debe hacer. Lnea 15: salimos del sub. Lnea 16: cerramos el if. Lnea 17: vaca. Lnea 18: abro un With <componente> para el commonddialog. Lnea 19: cambiamos el ttulo del cuadro de dilogo (propiedad DialogTitle). Lnea 20: usamos la propiedad Filter para limitar las extensiones aceptadas por el commonddialog. Lnea 21: seteamos a True la propiedad CancelError, con esto vamos a poder cantar el botn cancelar del cuadro de dilogo. Lnea 22: esta Lnea es para mostrar el cuadro de guardar archivo (ShowSave). Lnea 23: cerramos en With. Lnea 24: vaca. Lnea 25: etiqueta para saltar a esta lnea usando algn GoTo. Lnea 26: en esta lnea comprobamos que el error producido por el cuadro de dilogo no sea el error 32755. Lnea 27: abrimos el archivo Stub binariamente. App.Path contiene la ruta de la aplicacin ejecutada, en este caso el builder y se le concatena el nombre del Stub para poder obtener la ruta completa del archivo. Lnea 28: guardamos espacio suficiente en la variable stub para guardar el archivo. Lnea 29: pasamos los valores del archivo a la variable. Lnea 30: cerramos el archivo. Lnea 31: abrimos el archivo elegido binariamente. La ruta la tenamos guardada en el TextBox txtArchivo. Lnea 32: guardamos espacio suficiente en la variable datos para guardar el archivo. Lnea 33: pasamos los valores del archivo a la variable. Lnea 34: cerramos el archivo. Lnea 35: en esta lnea es cuando hacemos la encriptacin del archivo usando la instancia del mdulo y la funcin EncryptString. Y guardamos el resultado en la variable archEncriptado. Lnea 36: abrimos el archivo que elegimos para guardar binariamente. Lnea 37: metemos en el archivo el stub, el archivo encriptado y la key. Todos los datos separados por un delimitador que nos va a ser de mucha ayuda ms adelante. Lnea 38: cerramos el archivo. Lnea 39: vaca. Lnea 40: informamos mediante un MsgBox que el procedimiento fue hecha con xito. Lnea 41: cerramos el if. Ya hemos finalizado con el builder, pero no podemos probar la encriptacin porque no hace falta el archivo Stub.exe. 4. PROGRAMANDO EL STUB Ahora trabajaremos con el stub. Abrimos VB6, elegimos EXE estndar y luego Abrir.

Agregamos dos mdulos al proyecto. Podemos hacerlo yendo al men Proyecto y despus elegir Agregar mdulo o como se ve en la siguiente imagen.

Al Form1 no lo vamos a necesitar, as que lo podemos quitar dndole click derecho y Quitar Form1. Cambio el nombre del proyecto por Stb y el de los mdulos por Principal y sRunPE.

El runpe es el cdigo que nos va a permitir ejecutar archivos sin necesidad de que se encuentre en disco, directamente desde memoria. Para elegir hay una gran variedad, unos ms viejos que otros. Cada uno pone el que desee, yo eleg el siguiente que es de iCodeInVB6. Al cdigo lo pongo en el mdulo sRunPE.

Por otro lado vamos a necesitar la funcin que haga el procedimiento inverso de la encriptacin a la usada en el builder. Agregamos un Mdulo de clase al proyecto llamado clsXor y ponemos el mismo cdigo del algoritmo de encriptacin Xor que usamos en el builder. Nos vamos al mdulo Principal. Como estamos trabajando con mdulos, debemos agregarle un procedimiento Main y que es el que que contiene el cdigo que se ejecutar primero.

Dentro de l vamos a poner las lneas para realizar la tarea deseada.

Lnea 2, 3 y 4: declaramos dos variables de tipo String, llamadas stub y archDesencriptado y una tercera que es un arreglo tambin de tipo String llamado datos. Lnea 5: declaramos un arreglo de tipo Byte llamado arreglo. Lnea 6: vaca. Lnea 7: generamos una instancia del mdulo clsXor. Lnea 8: vaca. Lnea 9: se abre binariamente a si mismo. Con App.Path se obtiene la ruta del ejecutable y con App.EXEName el nombre del archivo. Lnea 10: guardamos espacio suficiente en la variable stub para guardar el archivo. Lnea 11: pasamos los valores del archivo a la variable. Lnea 12: cerramos el archivo. Lnea 13: vaca. Lnea 14: aqu es donde usamos el delimitador que vimos en el builder. La funcin Split va separando los datos teniendo el cuenta el delimitador, y los va guardando en un arreglo ordenadamente segn vayan apareciendo. Lnea 15: desencriptamos el archivo usando la funcin DecriptString del mdulo clsXor. Si recordamos en el builder el archivo final que creamos tena este formato:

Cuando se aplica la lnea anterior, Split genera este arreglo: datos(0) = Stub datos(1) = archEncriptado

datos(2) = txtPass.Text Ya sabiendo eso podemos entender mejor esta lnea. Cuando llamado a la funcin DecriptString le pasamos como parmetros datos(1) que es el archivo encriptado y datos(2) que corresponde a la key con la que encriptamos en el builder. Lnea 14: hacemos una conversin de String a Byte mediante StrConv. Lnea 15: vaca. Lnea 16: llamamos al runpe para que ejecute el arreglo de byte. Ya finalizamos. 5. PROBANDO EL CRYPTER Para compilar el builder y el stub, abrimos los proyectos con VB6, vamos al men Archivo y luego Generar Builder.exe en el caso del builder y Generar Stb.exe en el caso del stub. Ya tenemos los dos archivos creado. Recuerden guardar el proyecto del Stb con el nombre Stub. Si lo guardaron con otro nombre renombrenlo despus.

Si ejecutamos el stub, es muy comn que nos salte este error:

Y se debe a que quiere acceder a un elemento del arreglo que no existe. Por lo tanto no se asusten si les sale, ya que en el encriptado no va a ocurrir. Ejecutamos el Builder.exe, seleccionamos un archivo, generamos una key y presionamos en el botn btnEncriptar. Elegimos el nombre del archivo para guardar y apretamos en Guardar

Se nos va a crear el nuevo archivo que va a tener un peso que va a ser igual a la suma de los pesos del archivo elegido y el stub.

Ejecutamos y...

Corre correctamente, sin ningn error. Ya tenemos terminado nuestro crypter bsico. Se le podra agregar muchas mas opciones pero eso les queda para practicar. Espero que les haya servido y que este todo bien explicado. Cualquier consulta no duden en hacrmela llegar. Saludos, Expermicid.