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
Přesměrování Program Entry Pointu
3. ledna 2002, 00.00 | Novou sekci už do souboru umíme přidat, ale tím to samozřejmě ještě nekončí. Je třeba ji také něčím zaplnit a v neposlední řadě také na tyto data loader přesměrovat. Dnes se podíváme jak na to.
Novou sekci už do souboru umíme přidat, ale tím to samozřejmě ještě nekončí. Je třeba ji také něčím zaplnit a v neposlední řadě také na tyto data loader přesměrovat. Jdeme na to.Pro začátek vyplníme novou sekci nějakým bezúčelným kódem - např. několika NOPy. Aby se ale tento kód zpracoval, je třeba přepsat hodnotu Program Entry Point struktury IMAGE_NT_HEADERS RVA adresou požadovaných dat (pokud nevíte proč, odkazuji vás na seriál PE file format).
Data se sice zpracují, ale…..no samozřejmě, původní data nikoli. Proto musíme po zpracování dat skočit zpět na původní kód. K tomu postačí instrukce JMP. To už se však dostáváme za hranice tohoto dílu.
Ukázkový příklad přidá do souboru novou sekci s několik NOPy a přesměruje položku Program Entry Point. O skok zpět se zatím nestará (místo toho je přidána instrukce RET, aby nedošlo k výjimce - soubor se po spuštění prostě jen ukončí) - to bude náplní příštího dílu.
Příklad bude použit jako základ pro další ukázky, jejímž výsledkem bude první PE cryptor. Nedivte se proto, že některé procesy provádí příliš složitě - myslíme do budoucna.
Pokud někdo z výše uvedeného nepochopil, jak funguje přesměrování zpracování instrukcí v souboru, z obrázku je to snad patrné:
Samozřejmě, že můžete původní kód zavolat instrukcí CALL z vloženého kódu a následně se do něj vrátit, ale tím se budeme zabývat až později.
Na tomto místě bych také rád upozornil ještě na jednu věc.
V normálním souboru by se SizeofRawData + PointerToRawData poslední sekce mělo rovnat celkové velikosti souboru. Bohužel tomu tak vždy není - některé soubory tuto podmínku nesplňují (vypadá to jako by byly uloženy ve větší velikosti, než tomu ve skutečnosti je). Proto raději místo hodnoty velikosti souboru používejte součet SizeofRawData a PointerToRawData.
Kód ukázky obsahuje spoustu poznámek a vychází z minulého příkladu pro přidání sekce, takže doufám, že s jeho pochopením nebudou žádné problémy.
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