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
PE cryptor
22. října 2001, 00.00 | Úvod do podrobného návodu, jak naprogramovat váš první PE cryptor. Aneb pokračování úspěšného seriálu "Cracker proof".
Jak jste si jistě všimli, probrali jsme snad všechny možné "anti-…" metody a tak nadešel čas všechny získané vědomosti zúročit a tak nějak sjednotit. Pokud jste pečlivě nestudovali doprovodný seriál PE file format, budete tak muset učinit, aby jste rozuměli následujícím dílům seriálu.Naprogramujeme totiž náš první PE cryptor.
Co je to PE cryptor/compressor ?
Pokusím se to vysvětlit tak jednoduše, jak to jen půjde.
PE cryptor je v současné době asi nejpoužívanější možností obrany před softwarovým pirátstvím. Základní myšlenka spočívá v zakódování (v případě compressoru zkomprimování) jednotlivých sekcí v PE souboru a jejich dekódování při jeho spuštění. Za tímto účelem je do programu přidán režijní kód, který může obsahovat také řadu anti-cracking prvků. Může a nemusí - některé dnešních PE compressory jsou zaměřeny pouze na zmenšení, nikoli ochranu programu.
Dalo by se tedy říct, že PE cryptor je jakousi komplexní ochranou, která umožní spojení všech "anti-…" prvků v jeden.
Zní to zajímavě, co říkáte? Musím vás ale upozornit, že naprogramovat kvalitní PE cryptor není nic jednoduchého a budete k tomu potřebovat poměrně hodně času, úsilí a hlavně silné nervy!!
Jako programovací prostředí využívám kombinaci C++ a ASM., čehož jste si už jistě všimli z ukázkových příkladů. Na oba jazyky jsem si zvykl už na tolik, že nevidím důvod, proč je od sebe oddělovat. Přece jenom, proč nevyužít ty nejlepší vlastnosti obou jazyků. A vůbec - pokud se to někomu nelíbí, nenutím ho k tomu, aby četl následující řádky.
Jak pracuje PE cryptor - základy
Základem je již zmiňované zakódování (popř. zkomprimování) jednotlivých sekcí PE souboru. Následně musí být do souboru přidán režijní kód s požadovanými funkcemi. Teď ovšem vyvstává otázka - kam ho přidat ? Nelze spoléhat na to, že bude v nějaké sekci dostatek volného místa a proto přidáme novou sekci s požadovanou velikostí do souboru. Aby vše fungovalo správně, musíme přesměrovat tok dat při spouštění soboru na nově vloženou sekci a po provedení potřebného kódu skočit zpět.
Dalším problémem jsou funkce (nejčastěji API), které režijní kód využívá. PE soubor, do kterého kód přidáváme nemusí nutně importovat všechny požadované funkce a tak se o jejich importování musíme postarat sami. Způsobů řešení tohoto problému je vícero, ale dle mého názoru je nejlepším způsobem napsat vlastní tabulky importů, která obsahuje nezbytné funkce pro režijní kód (samozřejmě musíme přesměrovat patřičné hodnoty) a do kódu pak vložit manuální importovač funkcí, který zpracuje funkce z původní tabulky.
Je třeba mít na mysli, že data potřebná pro PE loader jako např. TLS (thread local storage), resources, tabulka exportů, relokace, tabulka importů...atd. nesmí být zakódována.
Nevýhody PE cryptorů
Mezi největší nevýhody PE cryptorů patří fakt, že poté, co jsou prolomeny, může být na většinu z nich napsán a následně použit univerzální decryptor/decompressor. Dalo by se tak říct, že se člověk při jejich používání pohybuje mezi dvěma extrémy - bezpečnost a bezúčelnost. Řádově je ale doba prolomení několikanásobně vyšší (samozřejmě u kvalitního cryptoru) než u běžných tipů ochran (kdo ale dnes používá "běžné ochrany"..?!). Nenechte se znepokojit faktem, že každý PE cryptor je po čase prolomen - tak to máte dnes se vším. A nebudeme znova začínat s tou ohranou písničkou, že nemá cenu chránit software.
Obsah seriálu (více o seriálu):
- Ochrana software - Úvod
- Obecné rady k ochraně softwaru
- Ochrana před debuggingem - základy
- Ochrana před debuggingem – standardy
- Ochrana před debuggingem - detekce breakpointů
- Ochrana před debuggingem - detekce hardwarových breakpointů
- Ochrana před debuggingem - detekce hardwarových breakpointů 2
- Poslední poznámky k SEHu
- Anti-disassembling - základy
- Pasivní SMC
- Aktivní SMC
- Anti-code editing
- Anti-FrogsICE
- Anti-ProcDump
- PE cryptor
- PE cryptor - přidání nové sekce do souboru
- PE cryptor - kódování
- Přesměrování Program Entry Pointu
- Přesměrování Program Entry Pointu - pokračování
-
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