elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
24 Mayo 2012, 18:38  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [SRC] Builder Simple en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SRC] Builder Simple en C  (Leído 1,742 veces)
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.059


CALL DWORD PTR DS:[0]


Ver Perfil WWW
[SRC] Builder Simple en C
« en: 10 Octubre 2009, 17:33 »

Bueno, a petición de SharkI hice éste código de un Builder en C y lo dejo aquí tambien por si a alguien le sirve. No es la única ni la mejor forma de hacerlo, pero puede que si una de las más sencillas. Se pueden mejorar varias cosas pero no quise hacerlo para no liar el código y que sea comprensible para los que empiezan  :P. De todas formas, con éste mismo método es sencillo hacer un realineamiento de la cabecera para que los datos no se queden en el EOF, quien tenga curiosidad el Little Joiner lo hace tal cual.

El builder:

Código
#include <stdio.h>
#include <cstdlib>
#include <windows.h>
 
LPSTR AbrirArchivo(LPSTR ruta,LPDWORD szFile);
void GuardarArchivo(LPSTR ruta,LPSTR lpDatos,DWORD szDatos);
 
int main(int argc,char* argv[])
{
system("cls");
printf("---------------------------------------------------------------------------\n");
printf("\t\t\tEjemplo Builder Simple en C\t\t\n");
printf("---------------------------------------------------------------------------\n\n");
 
//Pedimos al usuario que introduzca el tipo de MessageBox
DWORD tipo;
printf("Seleccione el tipo de MessageBox (numero)\n");
scanf_s("%d",&tipo);
 
//Pedimos al usuario que introduzca el titulo del MessageBox
DWORD szTitulo=1024;
char *titulo=(LPSTR)malloc(1024);
printf("Seleccione el titulo del MessageBox (string)\n");
scanf_s("%s",titulo,1024);
//Obtenemos el tamaño del titulo
szTitulo=lstrlenA(titulo);
 
//Pedimos al usuario que introduzca el mensaje del MessageBox
DWORD szMensaje=1024;
char *mensaje=(LPSTR)malloc(1024);
printf("Selecicone el mensaje del MessageBox (string)\n");
scanf_s("%s",mensaje);
//Obtenemos el tamaño del mensaje
szMensaje=lstrlenA(mensaje);
 
 
printf("Configurando Stub...\n\tTipo:%d\n\tTitulo:%s\n\tMensaje:%s\n\n",tipo,titulo,mensaje);
 
//Copiamos stub.dll a generado.exe, si no se encuentra stub.dll salimos
if(!CopyFileA("stub.dll","generado.exe",FALSE))
{
MessageBoxA(0,"No se encontró stub.dll!","Error",0);
return 0;
}
 
//Leemos el stub
DWORD szFile;
LPSTR lpFile=AbrirArchivo("generado.exe",&szFile);
 
//Reservamos un buffer en memoria para el Stub y los Datos que añadiremos al final de éste
LPSTR lpNewFile=(LPSTR)GlobalAlloc(GPTR,szFile+4+4+4+szMensaje+szFile);
 
///////////////////////////////////////
//    ESTRUCUTRA ARCHIVO GENERADO    //
//-----------------------------------//
//Archivo -> szFile Bytes  //
//Tipo Mensaje -> 4 Bytes       //
//Tamaño Titulo -> 4 Bytes       //
//Tamaño Mensaje    -> 4 Bytes       //
//Titulo -> szTitulo      //
//Mensaje -> szMensaje     //
//-----------------------------------//
///////////////////////////////////////
 
//Copiamos el Stub al Buffer
CopyMemory(&lpNewFile[0],&lpFile[0],szFile);
//Copiamos el tipo de MessageBox al Buffer
CopyMemory(&lpNewFile[szFile],&tipo,4);
//Copiamos el tamaño del titulo al Buffer
CopyMemory(&lpNewFile[szFile+4],&szTitulo,4);
//Copiamos el tamaño del mensaje al Buffer
CopyMemory(&lpNewFile[szFile+8],&szMensaje,4);
//Copiamos el titulo al Buffer
CopyMemory(&lpNewFile[szFile+12],&titulo[0],szTitulo);
//Copiamos el mensaje al buffer
CopyMemory(&lpNewFile[szFile+12+szTitulo],&mensaje[0],szMensaje);
 
//Sobreescribimso generado.exe con nuestro Buffer
GuardarArchivo("generado.exe",lpNewFile,szFile+12+szTitulo+szMensaje);
 
printf("Hecho!\n\n");
 
system("pause");
 
return 0;
}
 
LPSTR AbrirArchivo(LPSTR ruta,LPDWORD szFile)
{
HANDLE hFile=CreateFileA(ruta,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
 
DWORD dwBytes;
*szFile=GetFileSize(hFile,0);
LPSTR lpFile=(LPSTR)GlobalAlloc(GPTR,*szFile);
ReadFile(hFile,lpFile,*szFile,&dwBytes,0);
CloseHandle(hFile);
return lpFile;
}
 
void GuardarArchivo(LPSTR ruta,LPSTR lpDatos,DWORD szDatos)
{
DWORD dwBytes;
HANDLE hFile=CreateFileA(ruta,GENERIC_READ+GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
WriteFile(hFile,lpDatos,szDatos,&dwBytes,0);
CloseHandle(hFile);
}
 

El Stub:
Código
#pragma comment(linker,"/ENTRY:main")
#pragma comment(linker,"/NODEFAULTLIB")
 
#include <windows.h>
 
//Definición de dipo para la API RtlMoveMemory
typedef VOID (WINAPI *_CopyMemory)(PVOID Destination,CONST VOID *Source,SIZE_T Length);
 
void main()
{
//Cargamos dinamicamente la API RtlMoveMemory
_CopyMemory miCopyMemory=NULL;
miCopyMemory=(_CopyMemory)GetProcAddress(GetModuleHandleA("KERNEL32.DLL"),"RtlMoveMemory");
 
//Obtenemos nuestor nombre completo (incluída ruta)
char FileName[MAX_PATH];
GetModuleFileNameA(NULL,FileName,MAX_PATH);
 
//Nos leemos
HANDLE hFile=CreateFileA(FileName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
DWORD dwBytes;
DWORD FileSize=GetFileSize(hFile,0);
char *lpFileBuffer=(char*)GlobalAlloc(GPTR,FileSize);
ReadFile(hFile,lpFileBuffer,FileSize,&dwBytes,0);
CloseHandle(hFile);
 
//Reservamos memoria para los datos que extraeremos el final del stub
DWORD Tipo;
DWORD szTitulo;
DWORD szMensaje;
char *Titulo=(char*)GlobalAlloc(GPTR,1024);
char *Mensaje=(char*)GlobalAlloc(GPTR,1024);
 
//Tamaño del stub original (sin los datos añadidos en el EOF)
DWORD StubSize=0xA00;
 
//Obtenemos el tipo de MessageBox
miCopyMemory(&Tipo,&lpFileBuffer[StubSize],4);
//Obtenemos el tamaño del titulo
miCopyMemory(&szTitulo,&lpFileBuffer[StubSize+4],4);
//Obtenemos el tamaño del mensaje
miCopyMemory(&szMensaje,&lpFileBuffer[StubSize+8],4);
//Obtenemos el titulo del MessageBox
miCopyMemory(&Titulo[0],&lpFileBuffer[StubSize+12],szTitulo);
//Obtenemos el mensaje del MessageBox
miCopyMemory(&Mensaje[0],&lpFileBuffer[StubSize+12+szTitulo],szMensaje);
 
 
//Mostramos el MessageBox con los datos obtenidos
MessageBoxA(0,Mensaje,Titulo,Tipo);
}
 

Descargar Proyecto

Compilado en Microsoft Visual C++ 2008

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: [SRC] Builder Simple en C
« Respuesta #1 en: 10 Octubre 2009, 18:01 »

Sacar los datos por el tamaño puede hacer que se deñe muy facilmente es mejor usar firmas si usas EOF , aunque prefiero usar resource ;)

Saludos
En línea



Yo le enseñe a Kayser a usar objetos en ASM
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.059


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [SRC] Builder Simple en C
« Respuesta #2 en: 10 Octubre 2009, 18:05 »

Hombre, lo idea es crear una sección para los datos o usar el resouce, pero no lo hice así para que sea algo más sencillo, aunque dependiendo de cómo se mire, puede ser más sencillo hacerlo con resource  :xD.

Yo prefiero sacarlos por tamaño que por firma, es código es más sencillo y la única desventaja que le veo es que si por ejemplo quieres añadir opción para cambiar el icono no puedes saber el tamaño del stub de antemano y no se pordía hacer, pero no es el caso.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
Re: [SRC] Builder Simple en C
« Respuesta #3 en: 10 Octubre 2009, 18:49 »

Te amo, llevo 8 dias buscando algo igual a esto  :-* :-* :-* :-*  :P
En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: [SRC] Builder Simple en C
« Respuesta #4 en: 10 Octubre 2009, 18:51 »

Te amo, llevo 8 dias buscando algo igual a esto  :-* :-* :-* :-*  :P

Nada de cosas gay en este foro :¬¬ .

Yo sigo pensando que con resource es mas rapido , facil y mejor ;) Yo lo codearia si tuviera mi HD :(
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
Re: [SRC] Builder Simple en C
« Respuesta #5 en: 10 Octubre 2009, 18:52 »

gay

:¬¬ :¬¬ :¬¬

Lo peor es que acabo de verlo y no es lo que me esperaba, aun asi me sera util :P
En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
Karcrack
Moderador
***
Desconectado Desconectado

Mensajes: 2.190


Se siente observado ¬¬'


Ver Perfil
Re: [SRC] Builder Simple en C
« Respuesta #6 en: 11 Octubre 2009, 15:38 »

Muy bueno, muy util para quien este empezando ;D :xD

Por supuesto va al recopilatorio ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines