× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Cracking – 4. část

[ http://programujte.com/profil/3632-michal-blazek/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-michal-zima/ ]Google [ ?rel=author ]       29. 9. 2006       21 298×

  • PE souborový formát
  • Co je to PE šifrér/kompresor?
  • Popis nejdůležitějších částí PE hlavičky
  • Software pro práci s PE

PE, nebo-li Portable Executable, je univerzálním formátem všech spustitelných souborů Win32 platforem (Windows 95, 9x, ME, 2k, XP). Operační systém dokáže s PE souborem pracovat bez ohledu na procesor, narozdíl třeba od MS-DOSu.

Základní struktura PE

Základní struktura PE
DOS MZ hlavička
Úsek pro DOS
PE hlavička
Tabulka sekcí
Sekce 1
Sekce 2
Sekce n

DOS MZ hlavička, Úsek pro DOS

DOS MZ hlavička je v PE souboru pouze pro zachování kompatibility s operačním systémem MS-DOS. Pokud je tento program v DOSu spuštěn, tak program pokračuje spouštěním úseku pro DOS, ve kterém se v současnosti v naprosté drtivé většině případů zobrazuje hlášení „This program can not be run in DOS mode“, ale dříve zde někdy byl i program pro DOS.

PE hlavička

Je v ní uložena struktura IMAGE_NT_HEADER, ale o té až později.

Tabulka sekcí, Sekce

Sekce jsou logické celky dat (ve většině případů). Data jsou v nich uložena podle charakteristických atributů. Tabulka sekcí je pole struktur. Každý prvek obsahuje informace o jedné sekci.

Co je to PE šifrér a jak pracuje?

V současné době jsou PE-šifréry/kompresory nejpoužívanější možností ochrany programů před crackery. Základní myšlenka spočívá v zašifrování dat a jejich dešifrování při spuštění. V jednom tutoriálu na internetu jsem nalezl následující pokračování: „Tím nástroje jako je disassembler nebo HEX editor ztrácejí smysl, protože nač je nesmyslný kód.“ Pro upřesnění tohoto tvrzení ještě musím dodat, že existují také programátoři, kteří dokáží ze zdrojového kódu zašifrovaného programu rozeznat o jaký PE šifrér se jedná a dokáží i tento nesmyslný kód pochopit, ale myslím, že mezi ně čtenáři tohoto seriálu nepatří (jestli jo, tak se vám omlouvám). Co se týká HEX editoru, je občas nutné, než začnete kód zkoumat v debuggeru, odstranit ochranu, a to by bez HEX editoru nešlo, ale pro vás, kteří s crackingem začínáte, je tvrzení, které jsem teď upřesnil v podstatě správné. Některé kompresory jsou zaměřeny spíše na zmenšení souboru než na jeho ochranu (ASPack). PE šifréry/kompresory standardně obsahují triky proti debuggerům a různým programům používaných crackery (FileMonitor, ProcDump, …). PE šifréry/kompresory se převážně používají ve spojení s nějakou jinou ochranou, což je vcelku logické, protože na co by byl zašifrovaný soubor, když by šel jednoduše spustit. Jak to na světě bývá, tak existují kvalitní a nekvalitní produkty. Ty nejkvalitnější, které si rozebereme podrobněji, využívají různé triky proti debuggerům (nejvíce Soft-Ice a TRW), používají pasivní nebo aktivní SMC a další věci, které znepříjemňují crackerům život. V příští lekci plánuji test PE šifrérů (v rámci freeware, shareware) a podrobnější rozebrání jejich funkcí, ale teď zpět k PE formátu.

Ověření PE formátu

Díky neuvěřitelnému rozsahu PE formátu nelze vždy přesně říci, zda-li se jedná o soubor s platným PE formátem. Nejlepším kompromisem bude spokojit se s nejdůležitější strukturou PE hlavičky, a to IMAGE_NT_HEADERS, jejíž výtah je zde:

IMAGE_NT_HEADERS
{
	DWORD Signature;
	IMAGE_FILE_HEADER FileHeader;
	IMAGE_OPTIONAL_HEADER32 OptionalHeader;
}
Signature obsahuje hodnotu 50h, 45h, 0, 0, tedy text PE ukončený nulami. Microsoft definoval tuto hodnotu jako konstantu s názvem IMAGE_NT_SIGNATURE.
Struktura FileHeader obsahuje informace o fyzickém rozčlenění PE souboru (např. počet sekcí, bližší informace o souboru, …).
Struktura OptionalHeader obsahuje informace o logickém rozčlenění PE-souboru (např. adresu Program Entry Point, …).

Teď popíši jednotlivé struktury podrobněji. Nejdůležitější struktury jsem vybíral na základě nabídky programu PEditor [ http://www.softpedia.com/progDownload/PEditor-Download-28.html ].

Optional Header

Base of Code – Virtual address sekce Code
Base of Data – Virtual address sekce Data
Size of Image – celková velikost obrazu souboru po načtení do paměti, je určena součtem velikostí všech hlaviček a sekcí včetně zarovnání
Size of Headers – součet velikostí všech hlaviček (včetně úseku pro DOS) a tabulky sekcí. Je tedy Raw umístěním první sekce v souboru.
Section Alignment – určuje zarovnání sekcí v paměti. Většinou je nastaven na hodnotu 1000h, což znamená, že musí každá sekce začínat v paměti na násobku 1000h. Pokud tedy první sekce začíná třeba na adrese 00407000 a má velikost byť jen jediný bajt, musí druhá sekce začínat na adrese 00408000.
File Alignment – téměř totéž co SectionAlignment, ale namísto v paměti určuje fyzické zarovnání jednotlivých sekcí přímo v souboru. Většinou má hodnotu 200h.
Subsystem – určuje NT subsystém, pro který je daný soubor určen. Většina Win32 programů obsahuje buďto hodnotu Windows GUI nebo Windows CUI (konzolová aplikace).

File Header

Machine Type – informuje o hostujícím stroji. Pro platformu Intel je tato hodnota 14Ch.
Number of section – počet sekcí
Time Date Stamp – datum a čas vytvoření souboru
Pointer To Symbol Table a Number of Symbols – používá se při debuggingu
Size of Optional Header – určuje velikost struktury Optional Header
Charakteristics – je charakteristika souboru a udává, jestli se jedná o soubor EXE nebo DLL

File info

EntryPoint – vstupní bod do programu
ImageBase – preferovaná nahrávací adresa pro PE soubor do paměti

V souboru PEditor můžete jednotlivé položky, jak už napovídá název programu, i editovat. Velice užitečnou funkcí je v pravém menu položka Checksum. Vy už znáte API funkci MapFileAndCheckSum, která provádí kontrolní součet souboru a kontroluje ho s tím, který je uveden v PE hlavičce. Ten se do PE zapíše automaticky v době překladu. Zde můžete součet modifikovat nebo jedním tlačítkem srovnat s tím správným. Dále je v programu také oblast Tables, ale té se budu věnovat až v příští části tohoto seriálu. Pokud chcete podrobnější informace o PE hlavičce, tak vám mohu doporučit skvělý EXESCOPE [ www.softpedia.com/progDownload/eXeScope-Download-5210.html ]. Pokud se vám nelíbí tyto profesionální produkty, tak si můžete vytvořit svůj vlastní, protože to není nic těžkého (myslím po stránce programátorské). Pokud otevřete jakýkoliv spustitelný soubor (EXE) v nějakém HEX editoru, tak určitě najdete někde na začátku řetězec PE, a pokud budete zkoumat déle, tak určitě rozpoznáte i další struktury.

Pro crackera, i když se vám to třeba nezdá, je dobrá znalost PE hlavičky smrtelně důležitá. Pokud mi teď nechcete dát zapravdu, tak vám můžu slíbit, že po přečtení další části se mnou budete souhlasit.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2006091801-cracking-4-cast/ ].