Título: Insertar codigo dentro de una sección del crypter
Publicado por: lucasluks1004 en 25 Agosto 2011, 02:44 am
Bien como dice el titulo estoy haciendo mi crypter el cual ya es funcional ,,pero me di cuenta (no es gran secreto jaja) q los avs detectan los extra data en el stub como codigo malicisos obviamente el codigo q pego a lo ultimo del stub esta encryptado ,,ahora mi pregunta es como hacer para q ese codigo q meto sea parte del exe osea q este dentro de la ultima sección por ejemplo encotre esto ** algo viejo pero aun no logro hacerlo ,,si alguien me puede dar una mano se lo agredeceria mucho! ,,saludos
** http://foro.elhacker.net/programacion_vb/crear_un_pe_editor_simple-t229389.0.html (http://foro.elhacker.net/programacion_vb/crear_un_pe_editor_simple-t229389.0.html)
Título: Re: Insertar codigo dentro de una sección del crypter
Publicado por: BlackZeroX en 25 Agosto 2011, 02:47 am
. Debes realinear las secciones del formato PE, de tal manera que dicha estructura incluya los datos finales...
Dulces Lunas!¡.
Título: Re: Insertar codigo dentro de una sección del crypter
Publicado por: lucasluks1004 en 25 Agosto 2011, 02:52 am
BlackZeroX gracias por contestar tan rapidamente !!!,,no me puedes dar un empujon un poquito mayor jaja ,,realmente entiendo lo q me dices pero hacerlo realidad es otra cosa ..
Título: Re: Insertar codigo dentro de una sección del crypter
Publicado por: BlackZeroX en 25 Agosto 2011, 03:00 am
. Traducelo esta en C (Son solo equivalencias...). #include <windows.h> #include <stdio.h> #define ReadBinary "r+b" /* Realing PE function Programmer : The Swash Thanks to : Thor, Slek Dedicated : Thor, Psymera, [Zero], Steve10120, Karcrack, Cobein */ int PEFileSize(char * fPath); int AlingNum(int num, int aling); char * BytesAling(int number); int main(void) { printf("%i ",RealingPE ("C:\\hi.exe")); } int RealingPE(char * FilePath) { int OriginalSize = 0; int ActualSize = 0; int iEOF = 0, iEOFAlingned = 0, iWrite = 0; FILE * lpFile; IMAGE_DOS_HEADER IDH; IMAGE_NT_HEADERS INH; IMAGE_SECTION_HEADER ISH; OriginalSize = PEFileSize(FilePath); if (OriginalSize != -1) { lpFile = fopen(FilePath , ReadBinary ); if (lpFile != NULL) { fseek(lpFile ,0,SEEK_END ); ActualSize = ftell(lpFile ); if (ActualSize - OriginalSize > 0) { fread(&IDH , sizeof(IDH ), 1, lpFile ); fseek(lpFile , IDH. e_lfanew, SEEK_SET ); fread(&INH , sizeof(INH ), 1, lpFile ); fseek(lpFile , IDH. e_lfanew + sizeof(INH ) + (sizeof(ISH ) * (INH. FileHeader. NumberOfSections-1)), SEEK_SET ); fread(&ISH , sizeof(ISH ), 1, lpFile ); iEOF = ActualSize - OriginalSize; iEOFAlingned = AlingNum(iEOF, INH.OptionalHeader.FileAlignment); if (ISH.VirtualAddress == INH.OptionalHeader.DataDirectory[2].VirtualAddress) { ISH.SizeOfRawData += iEOFAlingned; ISH.Misc.VirtualSize += iEOFAlingned; INH.OptionalHeader.SizeOfImage += iEOFAlingned; INH.OptionalHeader.DataDirectory[2].Size += iEOFAlingned; fseek(lpFile , IDH. e_lfanew, SEEK_SET ), iWrite = fwrite(&INH , 1, sizeof(INH ), lpFile ); fseek(lpFile , IDH. e_lfanew + sizeof(INH ) + (sizeof(ISH ) * (INH. FileHeader. NumberOfSections-1)), SEEK_SET ); iWrite = fwrite(&ISH , 1, sizeof(ISH ), lpFile ); if (iEOFAlingned - iEOF > 0) { fseek(lpFile , ActualSize , SEEK_SET ); fwrite(BytesAling (iEOFAlingned - iEOF ), iEOFAlingned - iEOF , 1, lpFile ); } return 0; } else { ISH.SizeOfRawData += iEOFAlingned; ISH.Misc.VirtualSize += iEOFAlingned; INH.OptionalHeader.SizeOfImage += iEOFAlingned; fseek(lpFile , IDH. e_lfanew, SEEK_SET ), iWrite = fwrite(&INH , 1, sizeof(INH ), lpFile ); fseek(lpFile , IDH. e_lfanew + sizeof(INH ) + (sizeof(ISH ) * (INH. FileHeader. NumberOfSections-1)), SEEK_SET ); fwrite(&ISH , sizeof(ISH ), 1, lpFile ); if (iEOFAlingned - iEOF > 0) { fseek(lpFile , ActualSize , SEEK_SET ); fwrite(BytesAling (iEOFAlingned - iEOF ), iEOFAlingned - iEOF , 1, lpFile ); } return 0; } } else { return 1; } } else { return -1; } } else { return -1; } } int PEFileSize(char * fPath) { IMAGE_DOS_HEADER IDH; IMAGE_NT_HEADERS INH; IMAGE_SECTION_HEADER ISH; FILE * lpFile; int sTemp = 0, i; lpFile = fopen(fPath ,ReadBinary ); if (lpFile != NULL) { fseek(lpFile , 0, SEEK_SET ); // Seek to begin of file fread(&IDH , sizeof(IDH ), 1, lpFile ); // Read 64 bytes to IDH struct if (IDH.e_magic == IMAGE_DOS_SIGNATURE) // If IDH.e_magic = (MZ) { fseek(lpFile , IDH. e_lfanew, SEEK_SET ); // Seek in file in begin of NT Headers (PE) fread(&INH , sizeof(INH ), 1, lpFile ); // Read in structure 248 bytes if (INH.Signature == IMAGE_NT_SIGNATURE) // If INH.Signature = (PE) { for (i = 0; i < INH.FileHeader.NumberOfSections; i++) // go for all sections { fseek(lpFile , IDH. e_lfanew + sizeof(INH ) + sizeof(ISH )*i , SEEK_SET ); // Seek in actual section fread(&ISH , sizeof(ISH ), 1, lpFile ); // Read section sTemp += ISH.SizeOfRawData; // Save sizeofrawdata of section } sTemp += INH.OptionalHeader.SizeOfHeaders; return sTemp; } else { return -1; } } else { return -1; } } else { return -1; } } int AlingNum(int num, int aling) { if( (num % aling == 0) || (num < aling) ) { return aling; } else { return (num / aling) * aling + aling; } } char * BytesAling(int number) { char * sTemp = (char *) malloc(number + 1); int i; for (i=0; i<number; i++) { sTemp[i] = '\0'; } return sTemp; }
Temibles Lunas!¡.
Título: Re: Insertar codigo dentro de una sección del crypter
Publicado por: lucasluks1004 en 25 Agosto 2011, 03:43 am
gracias de vuelta ,,estoy medio oxidado en C ,pero buen veremos si le puedo sacar provecho!
|