Autor
|
Tema: [C/SRC] Realign PE (Actualizado) (Leído 5,329 veces)
|
The Swash
Desconectado
Mensajes: 194
Programmer
|
/* ----------------------------------------------------------- - Function: RealignPE v2 - - Programmer: The Swash - - Web: http://www.h-sec.org - - Dedicated: Thor, Psymera, Steve10120, [Zero], Karcrack - ----------------------------------------------------------- */ #include <windows.h> #include <stdio.h> #include <stdlib.h> #define ReadWriteBinary "r+b" int AlingNum(int num, int aling); char * BytesAling(int number); int main(void) { printf("%i ",RealignPE ("C:\\hi.exe")); } int RealignPE(char * lpFile) { IMAGE_DOS_HEADER IDH; IMAGE_FILE_HEADER IFH; IMAGE_OPTIONAL_HEADER IOH; IMAGE_SECTION_HEADER ISH; DWORD PESignature = 0; FILE * lFile; int OriSize = 0; int ActSize = 0; int Alingned = 0; lFile = fopen(lpFile ,ReadWriteBinary ); if (lFile == NULL) {return -1;} else { fread(&IDH , 64, 1, lFile ); fseek(lFile , IDH. e_lfanew , SEEK_SET ); fread(&PESignature , 4, 1, lFile ); if (IDH. e_magic != IMAGE_DOS_SIGNATURE ) {fclose (lFile ); return -2;} else { if(PESignature != IMAGE_NT_SIGNATURE ) {fclose (lFile ); return -3;} else { fseek(lFile , IDH. e_lfanew + 4, SEEK_SET ); fread(&IFH , sizeof(IFH ), 1, lFile ); fseek(lFile , IDH. e_lfanew + 4 + sizeof(IFH ), SEEK_SET ); fread(&IOH , IFH. SizeOfOptionalHeader, 1, lFile ); fseek(lFile , IDH. e_lfanew + 4 + sizeof(IFH ) + IFH. SizeOfOptionalHeader + (sizeof(ISH )*(IFH. NumberOfSections-1)),SEEK_SET ); fread(&ISH , sizeof(ISH ), 1, lFile ); fseek(lFile , 0, SEEK_END ); OriSize = ISH.PointerToRawData + ISH.SizeOfRawData; if (ActSize - OriSize > 0) { Alingned = AlingNum(ActSize - OriSize, IOH.FileAlignment); ISH.SizeOfRawData += Alingned; ISH.Misc.VirtualSize += Alingned; IOH.SizeOfImage = ISH.Misc.VirtualSize + ISH.VirtualAddress; IOH.SizeOfInitializedData += Alingned; if (ISH.VirtualAddress == IOH.DataDirectory[2].VirtualAddress) { IOH.DataDirectory[2].Size += Alingned; } fseek(lFile , IDH. e_lfanew + 4 + sizeof(IFH ), SEEK_SET ); fwrite(&IOH , 1, IFH. SizeOfOptionalHeader, lFile ); fseek(lFile , IDH. e_lfanew + 4 + sizeof(IFH ) + IFH. SizeOfOptionalHeader + (sizeof(ISH )*(IFH. NumberOfSections-1)),SEEK_SET ); fwrite(&ISH , 1, sizeof(ISH ), lFile ); if (Alingned - (ActSize - OriSize) > 0) { fseek(lFile , ActSize , SEEK_SET ); fwrite(BytesAling (Alingned -(ActSize - OriSize )), 1, Alingned -(ActSize - OriSize ), lFile ); } return 0; } else {return 1;} } } } } int AlingNum(int num, int aling) { if(num % aling == 0) { return num; } else if(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; }
Bueno amigos, ya había trabajado en la versión 1 de esta funcion, la mejore mucho en cuanto al código y lo mejor que corregí los fallos que tenía! Saludos
|
|
« Última modificación: 14 Febrero 2011, 20:49 pm por The Swash »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. Ya que estas con este tema para que sirve?, jamas lo entendi realmente, se que Realinea los Header pero para que?.
Dulces Luans!¡.
|
|
« Última modificación: 27 Enero 2011, 03:42 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
The Swash
Desconectado
Mensajes: 194
Programmer
|
Vale BlackZeroX te explico. Te lo pongo de la siguiente forma, las secciones definen la estructura del archivo, entendiendo de tal forma que la suma de todas ellas, más los parámetros (Cabecera PE) dan como resultado el peso del archivo, cuando se agrega información extra al final del archivo, la suma de los valores de las secciones mas la cabecera no dará el peso final del archivo, por ende antivirus suelen poner firmas al detectar este desbalance como Avira o F-PROT, Así que lo que este código hace es detectar el tamaño de la información extra agregada y la balancea en base al FileAlignment, luego se actualizan los valores de la ultima sección (VirtualSize y SizeOfRawData) y el SizeOfImage, balanceando el archivo como si fuera información natural de la última sección, evitando así detecciones.
Espero que te aya quedado claro, cualquier duda con gusto tendrá su respuesta.
|
|
|
En línea
|
|
|
|
|
titan6146
Desconectado
Mensajes: 72
|
¿¿¿¿¿¿¿¿¿¿¿¿WTF???????????????
|
|
« Última modificación: 8 Febrero 2011, 03:13 am por titan6146 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Tutorial actualizado
Ingeniería Inversa
|
ruben0909
|
3
|
2,949
|
25 Febrero 2006, 01:46 am
por ruben0909
|
|
|
[+] Skull MSN Man. V 0.2 Actualizado 9/04/08!!
« 1 2 3 4 »
Programación Visual Basic
|
[SMT]
|
32
|
16,416
|
27 Julio 2008, 21:46 pm
por seba123neo
|
|
|
Change Icon + PE realign (both fixed) [SRC]
Programación Visual Basic
|
cobein
|
3
|
4,862
|
25 Noviembre 2008, 21:32 pm
por SONIC88
|
|
|
wlandecrypter v1.3.1 ACTUALIZADO!!!!
« 1 2 ... 9 10 »
Wireless en Linux
|
*dudux
|
95
|
116,115
|
4 Diciembre 2010, 16:23 pm
por NirozMe|on
|
|
|
Nod 32 actualizado
Software
|
mapers
|
6
|
4,509
|
10 Marzo 2011, 16:28 pm
por Edu
|
|