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 - pokračování
16. ledna 2002, 00.00 | Dnešní díl dokončí vložení dat do souboru, přesměrování na tyto data při spuštění soboru a úspěšný skok zpět na původní data.Soubor tak zůstane zcela funkční.
V minulém díle jsme se zabývali přesměrováním PEP(Program Entry Point). Dnes si řekneme, jak se vrátit zpět na původní data.Skok zpět
Skok zpět na původní data můžeme provést několika způsoby. Pro ilustraci uvedu asi tu nejjednodušší možnost s využitím instrukce JMP.
Pokud chceme někam skočit, je třeba vědět adresu cíle - v našem případě je to adresa původního PEPu. Musíme ji proto někam uložit dřív, než ji přepíšeme novou hodnotou. To lze udělat mnoha způsoby.
Můžete upravit samotný režijní kód na patřičné hodnoty dřív, než jsou vloženy do souboru - zapsané hodnoty jsou pak ale "přímo na očích". Také můžete vyhradit určité místo v režijním kódu, kam zapíšete potřebné proměnné a pak je odtamtud nahrát. Ukázkový příklad vám ukáže jak na to. Práce s daty je sice trochu složitější než kdybychom programovali přímo v ASM, ale na funkčnosti samotné to nic nemění.
K úspěšnému přesunu na původní data, ale nebude stačit pouze originální PEP. Je třeba znát také hodnotu ImageBase, protože PEP je pouze RVA adresou a pro skutečnou adresu skoku tedy musíme přičíst právě hodnotu ImageBase.
Můžeme sice uložit až konečnou hodnotu součtu, ale hodnotu ImageBase budeme do budoucna ještě mnohokrát potřebovat, takže obě proměnné uložíme zvlášť.
Kam ukládat?
Je třeba si uvědomit, že proměnných bude postupně přibývat a z hlediska bezpečnosti opravdu není nejlepší nápad, všechny je ukládat na jedno místo. Na druhou stranu je to stejně jedno, protože při debuggingu kódu je umístění proměnných většinou zřejmé a tak bychom si pouze přidělávali práci. Lepší asi bude se potom řádně soustředit na ochranu proměnných (zakódování…).
Ukázkový příklad
Kód ukázkového příkladu je drobně vylepšen a také je konečně přidán skok zpět na původní data. Takto vypadá nový režijní kód přidaný do souboru:
|
Je třeba si uvědomit, že umístění instrukcí není stejné ve zdrojovém souboru odkud se režijní kód kopíruje (samotný PE cryptor) a v cílovém souboru. Tuto odchylku vypočítáme a následně použijeme k zjištění korektního umístění proměnných.
Samozřejmě je to jen jeden ze způsobů - fantazii se meze nekladou.
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