Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Assembler
Jak ověřit platnost PE souboru??
12. července 2001, 00.00 | Pokračování popisu struktury a formátu PE souboru. Potřebného k pochopení některých partií seriálu Cracker proof.
Odpověď na tuto otázku je poněkud složitější a nejednoznačná. Záleží na požadovaném stupni přesnosti. Prověřovat však všechny datové struktury, které PE formát nabízí, by bylo vysoce neefektivní. Spokojíme se proto s platností jen těch nejdůležitějších. Tou bezesporu nejdůležitější je samotná PE hlavička souboru. Jak už bylo řečeno v minulém díle, je tvořena strukturou IMAGE_NT_HEADERS. Ta vypadá takto (winnt.h):
|
DWORD Signature obsahuje hodnotu 50h, 45h, 00h, 00h. Přepsáno do textu - "PE" ukončené nulami. Pro naše pohodlí definoval Micro$oft tuto hodnotu jako konstantu pod názvem IMAGE_NT_SIGNATURE.
Struktura FileHeader obsahuje informace o fyzickém rozčlenění PE souboru - např. počet sekcí, informace o hostujícím stroji...atd.
Struktura OptionalHeader obsahuje informace o logickém rozčlenění PE souboru - např. adresu tzv. EntryPointu.
K získání struktury IMAGE_NT_HEADERS v C++, můžete využít volání funkce ImageNtHeader, nejdříve však musíte soubor nahrát do paměti. Vše to vypadá asi takto:
|
Pokud volání funkce ImageNtHeader uspěje, je PE soubor platný. Pokud ne, struktura v souboru není => nejedná se o platný PE soubor.
V assembleru musíme zvolit poněkud odlišný postup.
V podstatě ale opět stačí získat strukturu IMAGE_NT_HEADERS. Potom porovnáme hodnotu Signature v této struktuře a konstantu IMAGE_NT_SIGNATURE.
Jak ale zjistit adresu struktury IMAGE_NT_HEADERS? Jednoduchá odpověď - DOS MZ hlavička je definována strukturou IMAGE_DOS_HEADER a právě v její proměnné e_lfanew nalezneme námi požadovanou adresu.
V prvním WORDu struktury IMAGE_DOS_HEADER a tím i v prvním WORDu celého souboru se nachází hodnota 4Dh,5Ah (textem - "MZ", odtud taky DOS MZ hlavička), kterou Micro$oft opět nadefinoval jako strukturu IMAGE_DOS_SIGNATURE. Pro jistotu zkontrolujeme platnost struktury IMAGE_DOS_HEADER (porovnáme první WORD souboru a výše zmiňovanou konstantu) a teprve potom z její proměnné e_lfanew použijeme adresu PE hlavičky.
Obsah seriálu (více o seriálu):
- Obecná struktura PE souboru
- Jak ověřit platnost PE souboru??
- PE hlavička
- Tabulka sekcí
- Tabulka importů - první část
- Tabulka importů - druhá část
- Tabulka exportů
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007