Hola gente ¡¡, siento acaparar la seccion c++ , pero postean poco en esta zona :(

Bueno pues sigo aprendiendo para codear mis herramientas , y estaba mirandome mas sobre el formato PE , intentaba hacer un lector PE
como el que posteo @linkgl http://www.indetectables.net/foro/viewt ... p?p=258352

Bien , pues intente sacar algunos datos , encontre el principio de la cabezera PE , con sus 2 letritas y las saco por pantalla ,
saco el Number of Sections , y sale bien tambien , saco el Sice of Optional Header y también . Pero cuando intento sacar el Size of image o Image Base (por ejemplo) simpre me da 0 . Por que me ocurre este error o como puedo solucionarlo ??

Asi saco lo demás y sale bien :

Código: Seleccionar todo

//buscar offset e_lfanew (pos 0x3c (60)del exe)
       fich.seekg (60, ios::beg);
       int dir=0;
       dir=fich.get();
       fich.seekg (dir, ios::beg);
 //primeros 2 bytes (chars PE) 
       char P='a',E='a';
       P=fich.get();
       fich.seekg (dir+1, ios::beg);
       E=fich.get();
       cout<<P<<E<<endl;
//mostrar el numero de secciones (numberofsections)
       WORD NoS;
       fich.seekg(dir+6, ios::beg);
       NoS=fich.get();
       cout<<"NumberOfSections : "<<hex<<NoS<<endl;
Yo usaría WINAPI para Leer el archivo... CopyMemory para rellenar las Estructuras del formato PE y finalmente printf... En la MSDN tienes todas las estructuras necesarias ...

Saludos...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Gracias @poison ¡¡ , probare haber ;p

Pero igualmente , si alguien me puede explicar por que no me sale lo que toca , o como sacarlo con el metodo expuesto arriba , le estaria muy agradecido . Haber si pronto puedo empezar a postear cosas utiles jeje

Saludos
No encuentro nada sobre apis para la estructura PE :S , siempre encuentro cosas asi : IMAGE_DOS_HEADER idh; y otras , pero no se como utilizarlas

De todas maneras al hacerlo manualmente deveria salir :s , o es que se rellenan los campos al ejecutarse . La verda esque llebo tiempo buscando y leiendo sobre el PE y cuanto mas encuentro , menos sé jejeje me estoi haciendo un lio , alguien que me oriente a la luz ...

THNX
willyf escribió:No encuentro nada sobre apis para la estructura PE :S , siempre encuentro cosas asi : IMAGE_DOS_HEADER idh; y otras , pero no se como utilizarlas

De todas maneras al hacerlo manualmente deveria salir :s , o es que se rellenan los campos al ejecutarse . La verda esque llebo tiempo buscando y leiendo sobre el PE y cuanto mas encuentro , menos sé jejeje me estoi haciendo un lio , alguien que me oriente a la luz ...

THNX
Está muy difícil que vayas leyendo byte por byte para sacar la estructura PE, es decir aunque sepas que cada seccion tiene determinados bytes como que el nombre de la seccion sea de 8 bytes y el sizeOfRawData sea un dword y así se te hará complicado irtemoviendo de a bytes con fseek, lo mejor es que uses estructuras ya definidas para manejar el PE es lo que hice en ese programa (que pronto se convertirá en editor PE) lo que tienes que hacer es usar las estructuras

IMAGE_DOS_HEADER
IMAGE_NT_HEADERS
IMAGE_SECTION_HEADER

Documentate sobre estas secciones y poco a poco podras irlas leyendo, y modificando, así podrás crear un editor PE por ejemplo

estructura.AddressOfEntryPoint = 0x1111 //le damos un nuevo valor al entrypoint
fwrite(&estructura,0,sizeof(estructura),fp);

por un decir pues es masomenos como lograras escribir un nuevo valor en el PE de un archivo obviamente faltaria un buen pedazo de código y esta sintaxis es probable que este mal, pero es para que te des una idea, igual para leer el PE tienes que manejar esas estructuras

PD: Si no encuentras nada sobre estas estructuras (documentacion, y demás) mándame un mp, yo tengo un par de documentos igual te sirven.
//mHmm..
Responder

Volver a “C/C++”