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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C/SRC] Realign PE (Actualizado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C/SRC] Realign PE (Actualizado)  (Leído 5,291 veces)
The Swash

Desconectado Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
[C/SRC] Realign PE (Actualizado)
« en: 27 Enero 2011, 01:24 am »

Código
  1. /*
  2.   -----------------------------------------------------------
  3.   - Function: RealignPE v2                                  -
  4.   - Programmer: The Swash                                   -
  5.   - Web: http://www.h-sec.org                               -
  6.   - Dedicated: Thor, Psymera, Steve10120, [Zero], Karcrack  -
  7.   -----------------------------------------------------------
  8. */
  9.  
  10. #include <windows.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #define ReadWriteBinary "r+b"
  14.  
  15. int AlingNum(int num, int aling);
  16. char * BytesAling(int number);
  17.  
  18. int main(void)
  19. {
  20.    printf("%i ",RealignPE("C:\\hi.exe"));
  21.    getchar();
  22.  
  23. }
  24.  
  25. int RealignPE(char * lpFile)
  26. {
  27.    IMAGE_DOS_HEADER IDH;
  28.    IMAGE_FILE_HEADER IFH;
  29.    IMAGE_OPTIONAL_HEADER IOH;
  30.    IMAGE_SECTION_HEADER ISH;
  31.  
  32.    DWORD PESignature = 0;
  33.    FILE * lFile;
  34.    int OriSize = 0;
  35.    int ActSize = 0;
  36.    int Alingned = 0;
  37.  
  38.    lFile = fopen(lpFile,ReadWriteBinary);
  39.    if (lFile == NULL) {return -1;}
  40.    else
  41.    {
  42.        fread(&IDH, 64, 1, lFile);
  43.        fseek(lFile, IDH.e_lfanew , SEEK_SET);
  44.        fread(&PESignature, 4, 1, lFile);
  45.        if (IDH.e_magic != IMAGE_DOS_SIGNATURE) {fclose (lFile); return -2;}
  46.        else
  47.        {
  48.            if(PESignature != IMAGE_NT_SIGNATURE) {fclose (lFile); return -3;}
  49.            else
  50.            {
  51.  
  52.                fseek(lFile, IDH.e_lfanew + 4, SEEK_SET);
  53.                fread(&IFH, sizeof(IFH), 1, lFile);
  54.                fseek(lFile, IDH.e_lfanew + 4 + sizeof(IFH), SEEK_SET);
  55.                fread(&IOH, IFH.SizeOfOptionalHeader, 1, lFile);
  56.                fseek(lFile, IDH.e_lfanew + 4 + sizeof(IFH) + IFH.SizeOfOptionalHeader + (sizeof(ISH)*(IFH.NumberOfSections-1)),SEEK_SET);
  57.                fread(&ISH, sizeof(ISH), 1, lFile);
  58.                fseek(lFile, 0, SEEK_END);
  59.                ActSize = ftell(lFile);
  60.                OriSize = ISH.PointerToRawData + ISH.SizeOfRawData;
  61.                if (ActSize - OriSize > 0)
  62.                {
  63.                    Alingned = AlingNum(ActSize - OriSize, IOH.FileAlignment);
  64.                    ISH.SizeOfRawData += Alingned;
  65.                    ISH.Misc.VirtualSize += Alingned;
  66.                    IOH.SizeOfImage = ISH.Misc.VirtualSize + ISH.VirtualAddress;
  67.                    IOH.SizeOfInitializedData += Alingned;
  68.                    if (ISH.VirtualAddress == IOH.DataDirectory[2].VirtualAddress)
  69.                    {
  70.                        IOH.DataDirectory[2].Size += Alingned;
  71.                    }
  72.                    fseek(lFile, IDH.e_lfanew + 4 + sizeof(IFH), SEEK_SET);
  73.                    fwrite(&IOH, 1, IFH.SizeOfOptionalHeader, lFile);
  74.                    fseek(lFile, IDH.e_lfanew + 4 + sizeof(IFH) + IFH.SizeOfOptionalHeader + (sizeof(ISH)*(IFH.NumberOfSections-1)),SEEK_SET);
  75.                    fwrite(&ISH, 1, sizeof(ISH), lFile);
  76.                    if (Alingned - (ActSize - OriSize) > 0)
  77.                    {
  78.                       fseek(lFile, ActSize, SEEK_SET);
  79.                       fwrite(BytesAling(Alingned-(ActSize - OriSize)), 1, Alingned-(ActSize - OriSize), lFile);
  80.                    }
  81.                    return 0;
  82.                }
  83.                else {return 1;}
  84.            }
  85.        }
  86.    }
  87. }
  88.  
  89.  
  90. int AlingNum(int num, int aling)
  91. {
  92.    if(num % aling == 0)
  93.    { return num; }
  94.    else if(num < aling)
  95.    { return aling; }
  96.    else { return (num / aling) * aling + aling; }
  97. }
  98.  
  99. char * BytesAling(int number)
  100. {
  101.     char * sTemp = (char *) malloc(number + 1);
  102.     int i;
  103.     for (i=0; i<number; i++)
  104.     {
  105.         sTemp[i] = '\0';
  106.     }
  107.     return sTemp;
  108. }

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 Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [C] Realign PE function
« Respuesta #1 en: 27 Enero 2011, 03:39 am »

.
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 Desconectado

Mensajes: 194


Programmer


Ver Perfil WWW
Re: [C] Realign PE function
« Respuesta #2 en: 27 Enero 2011, 04:26 am »

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

kasiko

Desconectado Desconectado

Mensajes: 218



Ver Perfil
Re: [C] Realign PE function
« Respuesta #3 en: 27 Enero 2011, 13:49 pm »

con tu permiso, me guardo este code  :rolleyes:
En línea

Nos vemos...

titan6146

Desconectado Desconectado

Mensajes: 72



Ver Perfil
Re: [C] Realign PE function
« Respuesta #4 en: 8 Febrero 2011, 03:10 am »

¿¿¿¿¿¿¿¿¿¿¿¿WTF??????????????? :(
« Última modificación: 8 Febrero 2011, 03:13 am por titan6146 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutorial actualizado
Ingeniería Inversa
ruben0909 3 2,909 Último mensaje 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,255 Último mensaje 27 Julio 2008, 21:46 pm
por seba123neo
Change Icon + PE realign (both fixed) [SRC]
Programación Visual Basic
cobein 3 4,847 Último mensaje 25 Noviembre 2008, 21:32 pm
por SONIC88
wlandecrypter v1.3.1 ACTUALIZADO!!!! « 1 2 ... 9 10 »
Wireless en Linux
*dudux 95 115,643 Último mensaje 4 Diciembre 2010, 16:23 pm
por NirozMe|on
Nod 32 actualizado
Software
mapers 6 4,427 Último mensaje 10 Marzo 2011, 16:28 pm
por Edu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines