Sie sind auf Seite 1von 9

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

Programando un Crypter en Visual Basic 6.0


Vamos a crear un Crypter en Visual Basic 6.0 para aqullos que no lo conoscan o no sepan
como se hace ;)
Empezemos por saber que es un crypter, que hace y como funciona:
*Un crypter es una aplicacin capaz de proteger a un fichero ejecutable para evitar su
descomposicin y/o depuracin. Lo proteje encriptando el original y dejando una referencia
a el en el Stub (Ya veremos que es), asi al ser ejecutado se abre primero el Stub, y luego
este con la referencia al ejecutable original, lo desencripta y ejecuta.
*Lo que hace, como ya explique, es proteger, su funcion es similar a la de un Binder.
*Ps Cmo funciona? - Al elegir el ejecutable que se quiere proteger, el crypter lo analiza
(tampoco le hace un analicis profundo, es solo para saber si es un ejecutable y si contiene
como minimo un Byte). Una vez que el crypter sabe que es un ejecutable y que tiene datos
para encriptar, lo que hace es leer sus bits, encriptarlos y almacenarlos en una variable
segura dentro de el. Luego el crypter se dedica a buscar su Stub, un Stub es un fichero
ejecutable que es configurado por el crypter para saber a que fichero debe hacer referencia,
y como lo debe desencriptar. Por lo general el Stub lo hacen pasar por librera o por
ficheros .dat para esconderlo un poco, pero a la hora de unirlo a un fichero encriptado, se
transformara de nuevo en un .exe. As que.. una vez que el crypter encontro el Stub, le pasa
los datos necesarios (los que ya dijimos) y lo antepone a los bits encriptados del fichero
ejecutable original. Asi ps queda un solo fichero .exe (con unos kb de mas, por lo general
cerca de 20).
Por ultimo, cuando se ejecute el fichero encriptado, el stub buscara los bits
correspondientes al fichero original. Los tomara,m y los desencriptara, generara un fichero
temporal con extencion .exe (correspondiente al fichero original) y lo ejecutara.
Bien, espero hallas entendido, sino quiza vallas entendiendo a lo largo del tutorial ^^.
Lo primero que haremos sera crear un proyecto nuevo en VB (Obviamente una aplicacin).
Guardamos el proyecto como Stub y luego le modificamos las propiedad Visible del
formulario y le ponemos False.
Ahora ps debemos programarlo para que al ser ejecutado, busque el comienzo de bits
encriptados y los lea hasta su fnal, para luego desencriptarlos, copiarlos a un archivo
temporal de tipo ejecutable y ejecutar dicho archivo temporal.
Cmo lo haremos? No te preocupes que te hire guiando, de todas formas veamos mas
detalladamente lo que necesitamos hacer:
1. Copiar el archivo en el que se esta ejecutando el Stub a un archivo temporal con
formato dat.
2. Abrimos de forma binaria el fichero .dat y buscamos el comienzo de bits
encriptados.
3. Leemos desde el principio de bits encriptados hasta su final.
4. Almacenamos los bits encriptado en una variable
5. Desencriptamos los bits de la variable, los bits desencriptados se reemplazaran a los
bits encriptados de dicha variable.
6. Se crea un fichero de forma binaria.

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

7. se le aplican los bits desencriptados y le agregaremos al final una firma ;)


8. Usamos la sentencia Shell para ejecutar el archivo temporal
9. Si no se produjo ningun error, nos cerramos y eliminamos el fichero .dat que
habiamos creado al principio.
Bueno ps, nos quedamos en 9 puntos quedemos cumplir para que funcione correctamente el
Stub. As que comenzemos a programar!!
Antes que nada hay que decir que es sumamente importante que comenzemos desde el sub
Form_Load o desde un sub Main si estas trabajando en un modulo. Ahora si, comenzemos!
Bueno ahora veremos el codigo del Form_Load, veran varias funciones que no las eh
mencionado, lo cual hare luego de que analicen el codigo del ejecucin del formulario:
[code=vb]
'Declaracion globar que almacena la ruta completa del _
fiochero DAT
Dim FicheroDAT As String
'Declaracion global que almacena la ruta completa del _
fichero Ejecutable.
Dim FicheroEXE As String
Declaracion global que almacena los bits desencriptados
'Cuando se ejecute el fichero.
Private Sub Form_Load()
'Llamamos a la funcion CopiarParaLeer que nos copia a un _
fichero .dat
SiError1 = CopiarParaLeer(App.Path & "\" & App.EXEName & ".exe")
If SiError1 = False Then: Exit Sub: MsgBox "Se ah producido un error en la apertura.", 0,
App.EXEName
'Llamamos a la funcion que lee y almacena los bits encriptado _
en una variable y los desencriptamos.
SiError2 = LeerlosAlmacenarlos(FicheroDAT)
If SiError2 = False Then: Exit Sub: MsgBox "Se ah producido un error en la apertura.", 0,
App.EXEName
'Llamamos a la funcion que crea un fichero temporal que contendra _
los bits encriptados.
SiError3 = CrearloMarcarlo
If SiError3 = False Then: Exit Sub: MsgBox "Se ah producido un error en la apertura.", 0,
App.EXEName
'Ejecutar el fichero ejecutable temporal..
SiError4 = EjecutarloAhora
If SiError4 = False Then: Exit Sub: MsgBox "Se ah producido un error en la apertura.", 0,
App.EXEName
'Eliminamos el fichero DAT y nos finalizamos
Kill FicheroDAT: End
End Sub
[/code]

ANYD00M

Programacin en VB6

Crypter

maxigile_tl@hotmail.com

La primera funcion que veremos y explicaremos sera la primera a la que se llama:


CopiarParaLeer. Como veran, a esta funcion le estamos pasando un parmetro:
App.Path & \ & App.EXEName & .exe lo que corresponde a la ruta del fichero
ejecutable al que contenemos encriptado. Pero luego hacemos una verificacin para saber si
esta funcion nos devolvio False es decir que devuelve un valor booleano. Este valor
correspondera a si se produce algun error. Entonces la funcion se declararia de esta forma:
[code=vb]
Private Function CopiarParaLeer(MiRuta As String) As Boolean
End Function
[/code]
Bueno, ya la tenemos declarada, ahora le daremos un proposito en esta aplicacin que sera
copiar el fichero actual a otro fichero en el directorio temporal con un nombre aleatorio
numerico (puede ser tambien con letras, lo explicare al final del articulo). As que
comenzemos, la unica funcion que cumple es de FileCopy y le agregaremos algunas
cosas necesarias mas:
*Obviamente la explicacipon de cada linea la encontraran en el codigo:
[code=vb]
Private Function CopiarParaLeer(MiRuta As String) As Boolean
Declaramos las variables
Dim n% as integer, i as integer
Dim FSO as Object
'Si se produce algun error salta a la etiqueta "NoCopio"
On Error GoTo NoCopio
'Creamos objeto FileSystemObject para obtener el directorio _
temporal (FSO.GetSpecialFolder(2))
Set FSO = CreateObject("Scripting.FileSystemObject")
'Activamos randomize para que VB sepa que vamos a crear una _
funcion que corresponde al "azar"
Randomize
'La variable "n%" va a contener un nombre al azar para _
la copia, dicho nombre tendra 5 numeros:
For i = 1 To 5
't va a tener un numero al azar del 0 al 9
t = Int(Rnd * 9)
n% = n% & t
Next i
'Nos copiamos al directorio temporal con un nombre aleatorio.
FileCopy MiRuta, FSO.GetSpecialFolder(2) & "\" & n% & ".dat"
'Si todo anduvo bien (porque llegamos a esta linea) _
debovemos trae y almacenamos el fichero DAT en variable
CopiarParaLeer = Trae
FicheroDAT = FSO.GetSpecialFolder(2) & \ & n% & .dat

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

'Terminamos el sub
Exit Sub
'Escribimos la etiqeta NoCopio
NoCopio:
CopiarParaLeer = False
Exit Sub
End Function
[/code]
Muy bien, hasta aqu ya hemos copiado el fichero para poder leerlo posteriormente y hemos
contralo los posibles errores..
Ahora sigamos con la funciona que abrira el fichero dat y obtendra los bits que
correspondan al fichero encriptado. Para esto debo explicar que al encriptar el fichero, se
puso una marca para separar el Stub del fichero encriptado. En mi caso la marca ah sido |
CodeMakers| aunque es recomendable usar una marca mas chica ya que cada carcter sera
un byte que le agregaremos al archivo ;)
Entonces esta funcion leera el fichero y buscara la marca (|CodeMakers|) , al encontrarla
tomara todos los bits que halla desde alli hasta el final de la marca que se indica con la
misma marca (|CodeMakers|). Para hacer esta separacion usaremos la funcion Split,
quedando en el segundo indice (1 ya que el primer indice es 0) los bits encriptados.
As que a la funcion se le pasa como parmetros el fichero DAT y su declaracion seria:
[code=vb]
Private Function LeerlosAlmacenarlos(ArchivoTemp As String) As Boolean
End Function
[/code]
Lo que debemos hacer es abrir de forma inaria el fichero DAT, y almacenar todo su
contenido en una variable a la que llamaremos Contenido luego usaremos la funcion Split
para separar a lo leido (que esta en Contenido) en dos partes. Dichas partes seran
almacenadas en una variable que llamaremos ContDividido y sera un array, pero no le
daremos un valor la dejaremos con los parntesis vacios (Dim ContDividido() as String)
Se entiende? Espero que si porque no estamos chateando y no te podre escuchar ;)
Asi al utilizar Split, la variable ContDividido se dividira en 2, una con indice 0 y otra con
indice 1. La que tiene indice 1 es las que nos interesa, y cambiaremos el valor que tiene la
variable Contenido por ContDividido(1). Luego debemos desencriptar la variable
contenido. Esta variable que tiene los bits desencriptados es la que esta declarada
globalmente para que podamos acceder a ella desde otra funcion. Ya que eso es lo que
necesitaremos Comenzemos a codear esta funcion:
[code=vb]
Private Function LeerlosAlmacenarlos(ArchivoTemp As String) As Boolean
'Declaramos el array ContDividido
Dim ContDividido() As String
'Si hya error saltamos a la etiquero "Fallo"
On Error GoTo Fallo

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

'Abrimos el arcihvo DAT de forma binaria


Open ArchivoTemp For Binary Access Read As #1
'Almacenamos en "Contenido" los bits del stub y del fichero original
Get #1, , Contenido
'Cerramos el archivo
Close #1
'Separamos la variable Contenido en dos, segun la marca |CodeMakers|
'y almacenamos cada parte en el array ContDividido
ContDividido = Split(Contenido, "|CodeMakers|")
'Reeplazamos el actual dato de la variable Contenido por los bits del _
fichero original que se encuentran encriptados
Contenido = ContDividido(1)
'Ahora desencriptamos los bits con la funcion t
Contenido = t(Contenido)
'Ya tenemos en la variable global "conenido" los bits desencriptados _
asique ahora devolvemos true a la funcion y temrinamos la funcion
LeerlosAlmacenarlos = True
'Escribimos la etiqueta Fallo
Fallo:
LeerlosAlmacenarlos = False
Exit function
Exit Function
[/code]
Ahora, como si fueran ramificaciones en una red conceptual estamos viendo otra funcion.
La funcion t que lo que hace es desencriptar y encriptar los bits. Claro que si estan
encriptados los desencripta y si estan desencriptados los encripta, por ello usamos la misma
funcion tanto en el crypter como en el stub. La funcion es la siguiente no tiene mucho que
explicar ya que no va al tema, simplemente toma uno por uno los caracteres de la cadena
pasada y se los encripta con la funcion Xor, pasandolos por el numero 9:
[code=vb]
Function t(C)
On Error Resume Next
For i = 1 To Len(C)
t = t & Chr(Asc(Mid(C, i, 1)) Xor 27)
Next i
End Function
[/code]
Bueno, ya tenemos en la variable Contenido los bits desencriptados, solo nos falta convertir
esos bits sueltos en un fichero ejecutable y ejecutarlo.. Para esto tenemos la funcion
CrearloMarcarlo con la que tomaremos los bits, se los aplicaremos a un fichero temporal en
el directorio Temp que tendra el mismo nombre que nosotros para luego ejecutarlo. A este
archivo le agregaremos una firma al final, solo para joder ya que no cambia en nada, pero

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

es como para que quede Marcado :P (esto no es necesario hacerlo y es algo estupido, as
que si quieren no lo hagan).. Bien bien, codiemos la funcion:
[code=vb]
Private Function CrearloMarcarlo() As Boolean
'Declaramos variables
Dim FSO As Object
'Si hay error saltamos a la etiqueta "UboError"
On Error GoTo UboError
'Creamos objeto fSO com ya explique para obtener _
el directorio temporal.
Set FSO = CreateObject("Scripting.FileSystemObject")
'Creamos un fichero binario con nuestro mismo nombre _
en el directorio temporal.
Open FSO.GetSpecialObject(2) & "\" & App.EXEName & ".exe" For Binary Access Write
As #1
'Le aplicamos los bits desencriptados
Put #1, , Contenido
'Aplicamos firma
Put #1, , "Code-Makers.es"
'Cerramos
Close #1
'Todo salio bien, asique hacemos lo mismo que con las otras
CrearloMarcarlo = True
Exit Function
'Escribimos la etiqueta UboError
UboError:
CrearloMarcarlo = False
Exit Function
End Function
[/code]
Asi pos ya tenemos mucho jeje, solo nos falta ejecutar el archivo que acabamos de crear en
el directorio temporal, y pos eso es lo ultimo, ya que luego se elimina el fichero DAT y nos
terminamos con End pero eso ya lo hemos puesto en el Form_Load. As que sigamos ocn
la funcion que ejecutara este fichero temporal: EjecutarloAhora. Lo unico que haremos sera
utilizar Shell para ejecutarlo y ps, lo otro es la creacin del objeto FileSystemObject para
obtener el directorio temporal y la creacin de la etiqueta de error Come on!
[code=vb]
Private Function EjecutarloAhora() As Boolean
'Delcracion de variables
Dim FSO As Object
'Si hay error, bla bla bla
On Error GoTo SiHayError
'Creamos el onjeto FSO

ANYD00M

Programacin en VB6

Crypter

maxigile_tl@hotmail.com

Set FSO = CreateObject("Scipting.FileSystemObject")


'Ejecutamos el fichero
Shell FSO.GetSpecialFolder(2) & "\" & App.EXEName & ".exe", vbNormalFocus
'Lo que hicimos ya, devolvemos true y nos terminamos
EjecutarloAhora = True
Exit Function
'Escribimos la etiqueta
SiHayError:
EjecutarloAhora = False
Exit Function
End Function
[/code]
Y con esto ya terminamos el Stub. Le pido que lo analizen bien, Este codigo completo y
explicado lo pueden descargar desde aqu:
http://rapidshare.com/files/87715779/Codig_Fuente_Stub_Code-Makers_.zip.html

Bueno, me eh quedado en el Stub, que ya lo tendriamos que tener terminado, sino no sigas
leyendo y terminalo
Ahora comenzaremos con el crypter, que es la parte grafia y en la que el usuario eligira un
fichero ejecutable qu dece encriptar. Luego debemos abrir ese fichero de forma binaria,
tomar sus bits y encriptarlos. Esos bits encriptados se almacenaran en una variable, luego
de encriptarlos, copiamos el fichero original tal y ocmo es inclusive con la extencion .exe
pero luego le damos una doble extencion y le ponemos .bak (si no te diste cuenta hemos
creado un Buck Up del archivo) asi aseguramos el fichero original. Luego basiamos el
fichero original que el usuario eligio, y abrimos de forma binaria el Stub. Obtenemos los
bits del stub y los aplicamos a una variable. Luego abrimos el fichero que esta vacio (el que
eligio elk usuario) y le aplicamos primero los bits del Stub, luego una marca (en mi caso
sera |CodeMakers|) y luego los bits encriptados y para finalizar otra marca (en mi caso sera
de nuevo |CodeMakers|) aunque esta ultima marca no es necesaria, y yo la pongo solo para
dar un modelo grafico de lo que hacemos
Los controles que utilizaremos seran:
Un TextBox
Un Frame
Un CommandButton
Y debido a que el crypter que aremos es una base para que creen el suyo no agregaremos
mas controles. Estos controles los pueden ubicar de la forma que quieran, claro que no hay
mucha magia en esto, menos con la cantidad de controles que usamos. A mi me ah quedado
asi:
ACA VA LA IMAGEN QUE DEBES SUBIR A IMAGESHACK!!!
Bueno, veran la sencilles de esto, ya que no usaremos un control CommondDialog para
elegir el fichero, esto es porque, como les vuelvo a repetir, lo que quiero es que tengan una
base para que creen su propio crypter ;)

ANYD00M

Programacin en VB6

Crypter

maxigile_tl@hotmail.com

Comenzaremos con el evento Clic del CommndButton, lo que hara aca el crypter es
verificar copiar el fichero elegido a su misma ruta con su mismo nombre y su extencion
pero abregandole al final un .bak. Como veraz no verifico si existe o no el archivo o si se
ah introducido o no algun dato en el textbox, hace falta que te repita porque? ..
Asi ps, ya que hemos creado el Buck, lo que aremos sera obtener sus bits y almacenarlos en
una variable a la que llamaremos BitsOriginal y luego nos dedicaremos a vaciar el
fichero original. Luego abrimos de forma binaria el Stub y obtenemos sus bits, los cuales
almacenaremos en una variable llamada BitsStub (que original no? :P) y luego los bits
del fichero que abiamos guardado en la variable BitsOriginal los encriptamos. Para
finalizar abrimos de forma binaria el fichero que esta actualmente vacio y le aplicamos
primero los bits del stub, luego la marca y por ultimo los bits encriptado y una marca final..
As que dare el codigo del evento clic completo pero cada linea que necesite ser explicada
lo estara en un comentario ubicado sobre dicha linea:
[code=vb]
Private Sub Command1_Click()
Dim BitsOriginal As String
Dim BitsStub As String
'Cremos el Back Up
FileCopy Text1.Text, Text1.Text & ".bak"
'Obtenemos los bits del fichero y los almacenamos _
en la variable.
Open Text1.Text For Binary Access Read As #1
Get #1, , BitsOriginal
'Cerramos
Close #1
'Vaciamos el fichero original:
Open Text1.Text For Output As #2
Print #2, ""
Close #2
'Obtenemos los bits del stub y los almacenamos _
en su variable correspondiente
Open App.Path & "\Stub.exe" For Binary Access Read As #3
Get #3, , BitsStub
'Cerramos
Close #3
'Encriptamos los bits del fichero original
BitsOriginal = t(BitsOriginal)
'Armamos de nuevo el fichero del usuario:
Open Text1.Text For Binary Access Write As #4
'Le aplicamos el stub
Put #4, , BitsStub
'Le aplicamos una marca
Put #4, , "|CodeMakers|"

Programacin en VB6

Crypter

ANYD00M
maxigile_tl@hotmail.com

'Le aplicamos el fichero encriptado


Put #4, , BitsOriginal
'Le ponemos la marca final
Put #4, , "|CodeMakers|"
'Cerramos
Close #4
End Sub
[/code]
Beno, yo se que es muy sencillo, ya lo se, pero les sirve para aprende mierda! :P bueno ps,
la funcion para encriptar es la misma que usamos en el stub para desencriptar:
[code=vb]
Function t(C)
On Error Resume Next
For i = 1 To Len(C)
t = t & Chr(Asc(Mid(C, i, 1)) Xor 27)
Next i
End Function
[/code]
Bueno, ps espero les halla servido. Como podran ver, si analizan un pcoo el programa, la
ciencia esta mas en el Stub que en el crypter propio ;)
Ahora, pos como este tutorial esta hecho medio a las apuradas, quiero que me notifiquen
cualquier error que encuentre eh?, cualquier cosa me mandan un mail..

Das könnte Ihnen auch gefallen