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 - přidání nové sekce do souboru
5. prosince 2001, 00.00 | Dnešním článkem pokračujeme v seriálu Cracker proof, konkrétně rozborem zaměřeným na tvorbu vlastního PE cryptoru. V tomto díle přidáme novou sekci do souboru.
V minulém díle jsem uvedl základní problematiku PE cryptorů a také objasnil, jak takový PE cryptor pracuje. Nyní se budeme věnovat jednotlivým problémům pěkně
zvlášť.
Jak už bylo řečeno minule, nejdříve přidáme do souboru novou sekci, kde bude později uložen náš režijní kód. Jak na to?
Přidání sekce do souboru
Základem všeho je načtení souboru do paměti a získání struktury IMAGE_NT_HEADERS:
|
V prvé řadě musíme zjistit, jestli je v tabulce sekcí dostatek místa na přidání nové sekce. To uděláme tak, že sečteme velikosti hlaviček v souboru, připočítáme novou sekci (respektive její deklaraci v tabulce sekcí) a porovnáme s hodnotou SizeOfHeaders.
|
Novou sekci přidáme za poslední sekci v souboru, proto o ní potřebujeme znát nějaké informace.
Protože víme, že do většiny sekcí budeme později zapisovat (kódování/dekódování), nastavíme jejich charakteristiku na "writeable", tedy možnost zápisu:
|
Pokud nechcete použít funkci ImageRvaToSection, musíte jednotlivé proměnné nahrávat manuálně (např. již použitou funkcí memcpy).
Nyní použijeme informace o poslední sekci v souboru k výpočtu důležitých dat naší nové sekce:
|
Vše je více než jasné, akorát bych rád upozornil na funkci PEAlign - ta má za úkol výpočet nejbližšího možného násobku zadaných čísel. Použijeme ji k tomu, abychom řádně zarovnali sekci v paměti (viz. seriál PE file format). Správně bychom ji měli použít také při výpočtu SizeOfRawData (se zarovnáním na FileAlignment), ale tím si teď komplikovat situaci nebudeme.
Nyní už stačí jen upravit několik hodnot ve struktuře IMAGE_NT_HEADERS, aby zůstal soubor funkční. Samozřejmě musíme zvýšit NumberOfSections o jedna. Hodnoty SizeOfImage, SizeOfCode a SizeOfInitializedData zvětšíme o velikost přidaných dat.
|
Obsah paměti uložíme do souboru a dílo je dokonáno. Ukázkový příklad, který do souboru pokus.exe přidá novou sekci si můžete stáhnout zde.
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