Resultados 1 al 2 de 2

Tema: Problema analizando la IAT de los ejecutables en Dev C++

  1. #1 Problema analizando la IAT de los ejecutables en Dev C++ 
    Iniciado
    Fecha de ingreso
    Jun 2008
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Hola a todos.

    Tengo un problema y no se como resolverlo. Agradeceria muchisimo cualquier ayuda.

    Vereis he copiado este codigo tal cual y al compilarlo con el Dev C++ 4 me ha soltado algunos errores. Los he resuelto casi todos, pero hay uno que se me resiste.

    El codigo es el siguiente:

    #include <stdio.h>
    #include <windows.h>
    #include <stdlib.h>

    int main(int argc, char *argv[]){
    int i;
    if(argc != 2){
    printf("Pasale un parametro !");
    return 0;
    }
    HANDLE fichero = CreateFile((LPCTSTR)argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(fichero == INVALID_HANDLE_VALUE){
    printf("Error abriendo el fichero");
    return 0;
    }
    printf("IAT de %s\n", argv[1]);
    DWORD size = GetFileSize(fichero, NULL);
    BYTE *buf = (BYTE *)malloc(size);
    DWORD bytesleidos;
    ReadFile(fichero, buf, size, &bytesleidos, NULL);
    if(size == bytesleidos){
    PIMAGE_DOS_HEADER pIDH = (PIMAGE_DOS_HEADER)buf;
    if(pIDH->e_magic == IMAGE_DOS_SIGNATURE){ //MZ
    PIMAGE_NT_HEADERS pINH = (PIMAGE_NT_HEADERS)&buf[pIDH->e_lfanew];
    unsigned long ITdir = pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
    PIMAGE_SECTION_HEADER pISH;
    for(i = 0; i < pINH->FileHeader.NumberOfSections; i++){
    pISH = (PIMAGE_SECTION_HEADER)&buf[pIDH->e_lfanew + sizeof(IMAGE_NT_HEADERS) + i*sizeof(IMAGE_SECTION_HEADER)];
    if(pISH->VirtualAddress <= ITdir && pISH->VirtualAddress + pISH->SizeOfRawData > ITdir){
    printf("Tabla IAT encontrada en sección: %s\n", pISH->Name);
    break;
    }
    }
    if(i != pINH->FileHeader.NumberOfSections){
    printf("Inicio FisicalAddress de la IAT: 0x%08X\n", pISH->PointerToRawData + ITdir - pISH->VirtualAddress);
    printf("Inicio VirtualAddress de la IAT: 0x%08X\n", pINH->OptionalHeader.ImageBase + ITdir);
    PIMAGE_IMPORT_DESCRIPTOR pIID = (PIMAGE_IMPORT_DESCRIPTOR)&buf[ITdir - pISH->VirtualAddress + pISH->PointerToRawData];
    while(pIID->Characteristics != 0){
    printf("%s:\n", &buf[pIID->Name - pISH->VirtualAddress + pISH->PointerToRawData]);
    PIMAGE_THUNK_DATA pITD = (PIMAGE_THUNK_DATA)&buf[pIID->OriginalFirstThunk - pISH->VirtualAddress + pISH->PointerToRawData];
    while(pITD->u1.AddressOfData != NULL){
    if((DWORD)pITD->u1.AddressOfData & 0x80000000)
    printf(" Ord: %d\n", (DWORD)pITD->u1.AddressOfData & 0x7FFFFFFF);
    else{
    PIMAGE_IMPORT_BY_NAME pIIBN = (PIMAGE_IMPORT_BY_NAME)&buf[(DWORD)pITD->u1.AddressOfData - pISH->VirtualAddress + pISH->PointerToRawData];
    printf(" %s\n", pIIBN->Name);
    }
    pITD++;
    }
    pIID++;
    }
    }
    }
    }
    free(buf);
    CloseHandle(fichero);
    return 1;
    }



    Hay un error que no consigo resolver y me tiene loco. He buscado por internet pero no acabo de aclararme.

    El error es el siguiente:

    invalid types 'BYTE *[_IMAGE_THUNK_DATA *]' for array subscript

    y me lo da en esta linea:

    PIMAGE_THUNK_DATA pITD = (PIMAGE_THUNK_DATA)&buf[pIID->OriginalFirstThunk - pISH->VirtualAddress + pISH->PointerToRawData];

    No entiendo muy bien que esta pasando, pero calculo que se trata de alguno de los parametros entre los corchetes del buf, pero ni idea.

    Alguien puede ayudarme con este error.

    Gracias
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Yo lo compile con el Dev-C++ (Mingw32 3.4.2) y no da ningun error, solo un warning pero no en esa linea, y ademas no tiene nada que ver con lo que te aparece. De hecho funciona aparentemente bien.

    Ademas, sintacticamente parece correcto.


    Precisá que compilador estas usando.


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

Temas similares

  1. convertir archivos en ejecutables
    Por 54yk3r en el foro INTRUSION
    Respuestas: 0
    Último mensaje: 03-02-2009, 01:56
  2. Sub7 / Netbus Problema con los ejecutables
    Por pedroriveraa en el foro APLICACIONES
    Respuestas: 2
    Último mensaje: 14-01-2008, 10:16
  3. Ayuda con ubicacion de ejecutables en Visual Basic
    Por martinss en el foro GENERAL
    Respuestas: 0
    Último mensaje: 05-04-2006, 18:19
  4. Linux, disponible en 18 variantes ejecutables desde el CD
    Por diarrea en el foro LINUX - MAC - OTROS
    Respuestas: 5
    Último mensaje: 01-03-2005, 07:09
  5. ejecutables en c
    Por defcondos en el foro PROGRAMACION DESKTOP
    Respuestas: 7
    Último mensaje: 02-07-2002, 22:02

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •