Malware - Creando Crypter Vb6

October 22, 2017 | Author: Marcelo Gustavo | Category: Cryptography, Computer File, Window (Computing), Software Engineering, Areas Of Computer Science
Share Embed Donate


Short Description

Download Malware - Creando Crypter Vb6...

Description

1. INTRODUCCION Les doy la bienvenida a la lectura del primero de una serie de documentos, que tendrán como objetivo poder orientar y enseñar a los usuarios, sobre el desarrollo de diferentes herramientas usando Visual Basic 6. En esta primera ocasión nos vamos a centrar en lo que conocemos como Crypters. Antes de empezar, quisiera aclarar que este pdf está orientado a los más nuevo, no se encontrarán con métodos de indetectabilidad, sino que está totalmente canalizado a la programación 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 algún método criptográfico. 2.1 PARTES DE UN CRYPTER Los crypters poseen dos partes: Un Builder y un Stub. El Builder es la interfaz gráfica. Que tiene como objetivo cifrar la aplicación seleccionada. El Stub es el que se encargará de leer el código de la aplicación 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 físicamente 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 algún método criptográfico. En otras palabras, el builder toma el archivo elegido, lo cifra mediante algún 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 estándar 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. Quedándonos 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 títulos) Height → 1650 (alto del form) MinButton → True (habilitamos el botón minimizar) StartUpPosition → 2 - CenterScreen (posición por defecto del form) Width → 4065 (ancho del form) Ya tenemos la configuración 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 (alineación del texto) Height → 285 (alto de TextBox) Left → 120 (posición horizontal del TextBox respecto del borde del form) Locked → True (bloqueamos para que sea de solo lectura) Text → Ruta del Archivo (texto) Top → 120 (posición vertical del TextBox respecto del borde del form) Width → 3135 (ancho de TextBox) (2) Text2: (Nombre) → txtPass (nombre del TextBox) Alignment → 2 - Center (alineación del texto) Height → 285 (alto de TextBox)

Left → 120 (posición horizontal del TextBox respecto del borde del form) Text → Pass (texto) Top → 480 (posición 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 (posición horizontal del Button respecto del borde del form) Top → 120 (posición 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 (posición horizontal del Button respecto del borde del form) Top → 480 (posición 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 (posición horizontal del Button respecto del borde del form) Top → 840 (posición vertical del Button respecto del borde del form) Width → 3735 (ancho de Button) Para finalizar con la preparación 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 ejecución 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 diálogos como los de abrir y guardar archivos. Ya tenemos toda la parte gráfica con las configuraciones terminada. Ahora empezaremos con el código.

Hacemos doble click sobre el botón btnBuscar, automáticamente nos va a abrir la parte del código y nos va a agregar el evento click de dicho botón.

Este botón es el encargado de hacer uso del CommonDialog para buscar el archivo a encriptar. Para ello, el código es el siguiente:

La primera y última línea son las vistas anteriormente, así que explicare las restantes. Línea 2: en caso de ocurrir algún error hago un salto (GoTo) a la etiqueta Error: que se encuentra en la línea 10. Línea 3: abro un With , con esta línea es posible usar un componente en las líneas siguientes sin necesidad de nombrarlo, pudiendo usar sus propiedades con solo poner un punto (.). Línea 4: cambiamos el título del cuadro de diálogo (propiedad DialogTitle). Línea 5: usamos la propiedad Filter para limitar las extensiones aceptadas por el commonddialog. Línea 6: seteamos a True la propiedad CancelError, con esto vamos a poder captar el botón cancelar del cuadro de diálogo. Línea 7: esta Línea es para mostrar el cuadro de abrir archivo (ShowOpen). Más adelante veremos que si queremos usar el cuadro de guardar archivo tendremos que poner ShowSave. Línea 8: cerramos en With. Línea 9: vacía. Línea 10: etiqueta para saltar a esta línea usando algún GoTo. Línea 11: en esta línea comprobamos el error producido por el cuadro de diálogo. El error 32755 es el causado por el cerrado del cuadro mediante el botón cancelar, también se incluye el cerrado por el botón cerrar de la barra de títulos. Por lo tanto si el error no es el 32755 entra al if. Línea 12: coloco la ruta del archivo seleccionado en la propiedad Text del TextBox txtArchivo. Aquí utilizo en Cd porque ya estoy fuera del With. Línea 13: cierro el if. Para ir probando lo que ya hemos hecho podemos hacerlo mediante el botón Iniciar O mediante el menú Ejecutar → Iniciar.

Botón btnBuscar terminado. Ahora haremos el btnRn. La función de este último será crear una variable aleatoria para ser usada como key en la encriptación. Vamos a la interfaz gráfica y hacemos doble click sobre el botón btnRn. Se nos agrega el código del evento click.

Debemos colocar el código para generar la variable y colocarla en el TextBox txtPass. Yo lo hice así:

Línea 2 y 3: declaramos dos variables tipo String llamadas abecedario y variable. Línea 4: declaramos una variable tipo Integer llamada i. Línea 5: vacía. Línea 6: le agrego un string a abecedario con todos los caracteres con que se va a armar la variable deseada. Línea 7: seteo la variable variable con una cadena vacía. Línea 8: vacía. Línea 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.

Línea 10: esta línea es la que crea la variable. En cada vuelta del for agrega un nuevo carácter a la variable, que lo obtiene mediante la función mid. Esta función permite extraer cualquier parte de una cadena, dándole como parámetros la posición de comienzo y la cantidad de caracteres. Como en mi caso la cantidad de caracteres es 1, va extrayendo de a carácter. Y la posición se la obtiene aleatoriamente mediante la función Rnd. Línea 11: vacía. Línea 12: coloco el valor de la variable variable en la propiedad Text del TextBox txtPass. Pruebo el nuevo código.

Para terminar con el builder nos queda el botón btnEncriptar. Pero antes vamos a necesitar algún algoritmo de encriptación. Yo voy a utilizar Xor. Para ello agrego un módulo de clase, yendo al menú Proyecto y luego Agregar módulo de clase o como se muestra en la siguiente imagen.

Lo renombro clsXor. Y dentro del módulo pondremos el código, que es el siguiente:

Vamos al form para hacer doble click en el botón btnEncriptar y nos agregará el evento click.

Esta es la parte más interesante y es la que va a tomar el archivo, encriptarlo y crear el nuevo archivo que contenga el stub mas el archivo encriptado. Código entero:

Línea 2: en caso de ocurrir algún error hago un salto (GoTo) a la etiqueta Error: que se encuentra en la línea 19. Línea 3, 4 y 5: declaramos tres variables tipo String llamadas datos, stub y archEncriptado. Línea 6: vacía. Línea 7: generamos una instancia del módulo clsXor. Línea 8: vacía. Línea 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.

Línea 10: si estamos acá es porque entró al if anterior y es debido a que no hemos elegido ningún archivo, así que informamos mediante un MsgBox que debe hacerlo. Línea 11: salimos del sub. Línea 12: cerramos el if. Línea 13: usando un if verificamos el texto del TextBox txtPass, para saber si existe una key o no. Si no existe entramos al if. Línea 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. Línea 15: salimos del sub. Línea 16: cerramos el if. Línea 17: vacía. Línea 18: abro un With para el commonddialog. Línea 19: cambiamos el título del cuadro de diálogo (propiedad DialogTitle). Línea 20: usamos la propiedad Filter para limitar las extensiones aceptadas por el commonddialog. Línea 21: seteamos a True la propiedad CancelError, con esto vamos a poder cantar el botón cancelar del cuadro de diálogo. Línea 22: esta Línea es para mostrar el cuadro de guardar archivo (ShowSave). Línea 23: cerramos en With. Línea 24: vacía. Línea 25: etiqueta para saltar a esta línea usando algún GoTo. Línea 26: en esta línea comprobamos que el error producido por el cuadro de diálogo no sea el error 32755. Línea 27: abrimos el archivo Stub binariamente. App.Path contiene la ruta de la aplicación ejecutada, en este caso el builder y se le concatena el nombre del Stub para poder obtener la ruta completa del archivo. Línea 28: guardamos espacio suficiente en la variable stub para guardar el archivo. Línea 29: pasamos los valores del archivo a la variable. Línea 30: cerramos el archivo. Línea 31: abrimos el archivo elegido binariamente. La ruta la teníamos guardada en el TextBox txtArchivo. Línea 32: guardamos espacio suficiente en la variable datos para guardar el archivo. Línea 33: pasamos los valores del archivo a la variable. Línea 34: cerramos el archivo. Línea 35: en esta línea es cuando hacemos la encriptación del archivo usando la instancia del módulo y la función EncryptString. Y guardamos el resultado en la variable archEncriptado. Línea 36: abrimos el archivo que elegimos para guardar binariamente. Línea 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 más adelante. Línea 38: cerramos el archivo. Línea 39: vacía. Línea 40: informamos mediante un MsgBox que el procedimiento fue hecha con éxito. Línea 41: cerramos el if. Ya hemos finalizado con el builder, pero no podemos probar la encriptación porque no hace falta el archivo Stub.exe. 4. PROGRAMANDO EL STUB Ahora trabajaremos con el stub. Abrimos VB6, elegimos EXE estándar y luego Abrir.

Agregamos dos módulos al proyecto. Podemos hacerlo yendo al menú Proyecto y después elegir Agregar módulo o como se ve en la siguiente imagen.

Al Form1 no lo vamos a necesitar, así que lo podemos quitar dándole click derecho y Quitar Form1. Cambio el nombre del proyecto por Stb y el de los módulos por Principal y sRunPE.

El runpe es el código 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 más viejos que otros. Cada uno pone el que desee, yo elegí el siguiente que es de iCodeInVB6. Al código lo pongo en el módulo sRunPE.

Por otro lado vamos a necesitar la función que haga el procedimiento inverso de la encriptación a la usada en el builder. Agregamos un Módulo de clase al proyecto llamado clsXor y ponemos el mismo código del algoritmo de encriptación Xor que usamos en el builder. Nos vamos al módulo Principal. Como estamos trabajando con módulos, debemos agregarle un procedimiento Main y que es el que que contiene el código que se ejecutará primero.

Dentro de él vamos a poner las líneas para realizar la tarea deseada.

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

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

datos(2) = txtPass.Text Ya sabiendo eso podemos entender mejor esta línea. Cuando llamado a la función DecriptString le pasamos como parámetros datos(1) que es el archivo encriptado y datos(2) que corresponde a la key con la que encriptamos en el builder. Línea 14: hacemos una conversión de String a Byte mediante StrConv. Línea 15: vacía. Línea 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 después.

Si ejecutamos el stub, es muy común 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 botón 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 ningún error. Ya tenemos terminado nuestro crypter básico. Se le podría 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 hacérmela llegar. Saludos, Expermicid.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF