malware - creando crypter vb6

Upload: marcelo-gustavo

Post on 08-Aug-2018

323 views

Category:

Documents


9 download

TRANSCRIPT

  • 8/22/2019 Malware - Creando Crypter Vb6

    1/17

  • 8/22/2019 Malware - Creando Crypter Vb6

    2/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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    3/17

    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:

  • 8/22/2019 Malware - Creando Crypter Vb6

    4/17

    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)

  • 8/22/2019 Malware - Creando Crypter Vb6

    5/17

    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...

  • 8/22/2019 Malware - Creando Crypter Vb6

    6/17

    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 deusar 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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    7/17

    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 , 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 (ShowOpen). 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 cerradopor 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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    8/17

    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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    9/17

    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:

  • 8/22/2019 Malware - Creando Crypter Vb6

    10/17

  • 8/22/2019 Malware - Creando Crypter Vb6

    11/17

    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 ifverificamos el texto del TextBox txtArchivo, para saber si ya se ha elegido un

    archivo o no. Si no se a elegido entramos al if.

  • 8/22/2019 Malware - Creando Crypter Vb6

    12/17

    Lnea 10: si estamos ac es porque entr al ifanterior 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 ifverificamos 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 ifanterior 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 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 separadospor 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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    13/17

    Agregamos dos mdulos al proyecto. Podemos hacerlo yendo al men Proyecto y despus elegirAgregar 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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    14/17

  • 8/22/2019 Malware - Creando Crypter Vb6

    15/17

    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

  • 8/22/2019 Malware - Creando Crypter Vb6

    16/17

    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 elbotn 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.

  • 8/22/2019 Malware - Creando Crypter Vb6

    17/17

    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.