vorweg:
das ist ein tut für erfahrene user, und auch kein copy & paste tut ;)
die vorraussetzungen hierfür sind:
grundkenntnisse über den aufbau des PE formats (wobei ich darauf nochmal kurz eingehe)
filemapping (auf bestimmte adressen zugreifen) ODER kompliziertes normales file handling.
etwas methematik wissen ;)
was ihr besitzen solltet:
einen pc :p
eine gute IDE
windows.h, winnt.h
und eine test.exe
die theorie:
in der theorie ist alles wie immer ganz einfach.
man öffnet die datei, liest die wichtigen header ein (DOS, PE), und dann liest man die section header.
das wars sogar schon mit der theorie o.O
die praxis:
in der praxis ist es in diesem fall genau so einfach wie in der theorie.
als erstes muss die datei via CreateFile geöffnet, via CreateFileMapping gemappt, und mit MapViewOfFile der pointer geholt werden.
zum start der datei steht der MZ (DOS) header. den liest man ganz einfach mit
ein. (ptr = MapViewOfFile ;))
um zu prüfen ob das überhaupt eine "echte" datei ist, muss e_magic im header überprüft werden. (abgleich mit IMAGE_DOS_SIGNATURE)
am offset 0x3C steht ein DWORD mit dem offset des PE headers. (oder einfach nur e_lfanew aus dem dos header)
mit
kommt man auch gleich an den pe header.
dieser wird ebenfalls überprüft. (nt->Signature==IMAGE_NT_SIGNATURE)
von nun an wird alles ganz einfach: es gibt ein macro, mit dem man den header der ersten section bekommt:
sobals man den hat, muss man nurnoch eine schleife starten, die alle sections abarbeitet. in nt->FileHeader.NumberOfSections steht die anzahl der sections.
mit pSection++ kann man direkt auf die nächste section zugreifen ;)
pSection->Name ist ein 8 byte array mit dem namen der section ;)
hoffe mal dass es wenigstens einer von euch versteht, und es auch geholfen hat XD
das ist ein tut für erfahrene user, und auch kein copy & paste tut ;)
die vorraussetzungen hierfür sind:
grundkenntnisse über den aufbau des PE formats (wobei ich darauf nochmal kurz eingehe)
filemapping (auf bestimmte adressen zugreifen) ODER kompliziertes normales file handling.
etwas methematik wissen ;)
was ihr besitzen solltet:
einen pc :p
eine gute IDE
windows.h, winnt.h
und eine test.exe
die theorie:
in der theorie ist alles wie immer ganz einfach.
man öffnet die datei, liest die wichtigen header ein (DOS, PE), und dann liest man die section header.
das wars sogar schon mit der theorie o.O
die praxis:
in der praxis ist es in diesem fall genau so einfach wie in der theorie.
als erstes muss die datei via CreateFile geöffnet, via CreateFileMapping gemappt, und mit MapViewOfFile der pointer geholt werden.
zum start der datei steht der MZ (DOS) header. den liest man ganz einfach mit
Code:
PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)ptr;
um zu prüfen ob das überhaupt eine "echte" datei ist, muss e_magic im header überprüft werden. (abgleich mit IMAGE_DOS_SIGNATURE)
am offset 0x3C steht ein DWORD mit dem offset des PE headers. (oder einfach nur e_lfanew aus dem dos header)
mit
Code:
PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)(ptr+dos->e_lfanew);
dieser wird ebenfalls überprüft. (nt->Signature==IMAGE_NT_SIGNATURE)
von nun an wird alles ganz einfach: es gibt ein macro, mit dem man den header der ersten section bekommt:
Code:
PIMAGE_SECTION_HEADER pSection = (PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION(nt);
mit pSection++ kann man direkt auf die nächste section zugreifen ;)
pSection->Name ist ein 8 byte array mit dem namen der section ;)
hoffe mal dass es wenigstens einer von euch versteht, und es auch geholfen hat XD