#include #include #include #include #include #include #include void print_banner(void); void die(int line,char *err,int code); int is_elf(Elf32_Ehdr *elf); char* check_type(Elf32_Ehdr *elf); int main(int argc,char *argv[]) { int fd; unsigned int size; unsigned char * buf; struct stat stats; /* Elf32 Structure */ Elf32_Ehdr *elf_header; if (!argv[1]) die(__LINE__,"bad usage",-1); print_banner(); printf( "@ File name \t: %s .\n", argv[1] ); if ((fd = open(argv[1],0x00)) < 0 ) /* Apro il file in modalità solo lettura O_RDONLY (fcntl.h) */ die(__LINE__,"error opening file",-1); printf( "@ File descriptor \t: %d .\n", fd ); if( stat( argv[1], &stats ) < 0 ) /* Trovo la grandezza del file tramite stat */ die(__LINE__,"error getting file size",-1); size = stats.st_size; printf( "@ File size \t: %d bytes .\n", size ); buf = (char*)malloc(sizeof(char)*size+1); /* Alloco tot memoria quanto è grande il file */ if ( read(fd,buf,size) != size) /* Leggo tanti bytes dal file quanto è grande */ die(__LINE__,"error reading bytes",-1); close(fd); elf_header = (Elf32_Ehdr *)buf; /* Copio il buffer nella struttura Elf32_Ehdr */ if (is_elf(elf_header) == -1) die(__LINE__,"bad elf file",-1); printf("@ Entry point \t: 0x%X .\n", elf_header->e_entry ); /* Ed ecco l'entry point del nostro file */ printf("@ Type \t: %s .\n",check_type(elf_header)); free(buf); /* Libero la memoria del buffer */ return 0; } void die(int line,char *err,int code) { printf("[-]Line %d: %s.\n",line,err); exit(code); } void print_banner(void) { printf("\t~~~ .text Finder 0.0.1 ~~~\nnex { www.0x80cd.netsons.org }\nReleased Under GNU Public License 3.0\n\n"); } int is_elf(Elf32_Ehdr *elf) { if ((elf->e_ident[0] != 0x7f) || (elf->e_ident[1] != 'E' ) || (elf->e_ident[2] != 'L' ) || (elf->e_ident[3] != 'F' ) || (elf->e_ident[4] != 1 ) || (elf->e_ident[5] != 1 )) return -1; return 0; } char* check_type(Elf32_Ehdr *elf) { char *types[] = { "None" , "Relocatable" , "Executable" , "Shared Object" , "Core" , "Defined Types" }; if (is_elf(elf) == 0) { return (char*)types[elf->e_type]; } return NULL; }