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
Aktivní SMC
24. srpna 2001, 00.00 | Pokračování povídání o SMC - tentokrát jeho aktivní podobě. Ke článku je samozřejmě přiložena i praktická ukázka.
Jedním z mých nejoblíbenějších způsobů, jak zabránit nejenom disassemblování, je plně dynamické generování programového kódu.Možná to bude znít trochu nereálně, ale čistá teorie praví, že právě s využitím aktivního SMC se dá vytvořit částečně "neprolomitelná" ochrana.
Ne nesmějte se, vysvětlím to na praktické ukázce. Představte si, že program pomocí zadaného sériového čísla (hesla..) teprve rozšifruje další kód - třeba celou funkci pro obsluhu správně zadaného hesla. Pokud je tedy tento kód dostatečně dobře zašifrován a je zvolena náležitá délka klíče, je pak bezpečnost vašeho programu přímo úměrná bezpečnosti samotného šifrovacího algoritmu. Například při použití algoritmu RSA a klíče o délce 1024, bude váš program dostatečně chráněn i před vládními organizacemi - tedy pokud nebude dosaženo zásadních pokroků v řešení úlohy faktorizace (nebo nebude-li nalezen nějaký jiný postup).
Ale má to jeden obrovský háček - toto všechno bude platit jen do té doby, než vydáte první platné sériové číslo či heslo. I když je to paradoxní, je v tomto případě vaším největším nepřítelem legální uživatel vašeho programu - ten může správné číslo dát svému kamarádovi crackerovi nebo si přímo on zaregistruje váš program. Dostane tak data v dekódované podobě a vše je ztraceno - během několika minut pracuje program i se špatnými sériovými čísli.
Dost však bylo teorie - jak tedy vložit SMC kód do programu?
Základem je volání API funkce VirtualProtect, která změní přístupová práva (PAGE_READWRITE - čtení i zápis) v určité paměťové oblasti - v našem případě do oblasti, kde je načten spustitelný kód programu. Pak už jen patřičná místa přepíšeme požadovanými hodnotami.
A pokud se vám nechce nebo nemůžete přepisovat paměť programu, bez jakýchkoli okolků můžete alokovat paměť novou - třeba funkcí GlobalAlloc a tam následně přesměrovat tok dat.
Jak vidíte, možnosti jsou opravdu neomezené. Člověk by ani nevěřil, jak neuvěřitelných výsledků může dosáhnou s tak jednoduchou konstrukcí.
Podívejte se na následující ukázku:
|
Kdyby výše zmiňovaná ukázka začínala až příkazem if, zcela logicky by se zobrazila hláška: "SMC neaktivní".
Nejdříve se však zavolá funkce VirtualProtect, která umožní patřičný přístup do paměti programu, která obsahuje spustitelný kód. Hodnoty parametrů této funkce, by se měli obecně zjistit z PE hlavičky souboru, ale pro tento ukázkový příklad bohatě stačí pevně nastavené hodnoty. Následně je obrácena logika cyklu if - příkaz memcpy přepíše patřičný bajt.
A výsledkem je hláška "SMC aktivní". Potom se ještě opraví logika cyklu do původní podoby.
Tento velice jednoduchý příklad pouze demonstruje opravdovou sílu SMC. Jako vždy záleží jen na vás, jak hluboko sáhnete do své mysli a kolik času věnujete návrhu programového kódu.
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í
Diskuse k článku
-
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