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
Anti-disassembling - základy
30. července 2001, 00.00 | Několik slov o základních technikách proti statickému rozkladu na assembler - tzv. disassemblingu.
V některém z prvních dílů tohoto seriálu jsme si řekli, že na začátku téměř každého úspěšného snažení crackera je rozklad programu na assembler. Také jsme si řekli, že toto rozložení může být buďto statické nebo dynamické. Až do teď jsme se věnovali tomu dynamické a tak nadešel čas, podívat se na zoubek druhé zmiňované technice - tzv.disassemblingu. I když se anti-disassembling v mnohém prolíná a doplňuje s jinými anti-cracking technikami a jeho použití není tak exaktní jako anti-debugging, budeme dále uvedené možnosti označovat jako anti-disasemblingové. Není proto vyloučeno, že nějaká anti-disassembligová technika vlastně stěžuje i jiné crackerské techniky a naopak.Vzhledem k tomu, že k rozložení na assembler při disassemblingu není třeba, aby byl program (soubor..) spuštěn, jak je tomu u debuggingu, nemůže se této technice nějak aktivně bránit. Může však obsahovat instrukce, které by compiler nikdy sám nevygeneroval a tak velice ztížit či dokonce znemožnit použití disassembleru. Mezi ty nejpoužívanější patří dnes již velice známá IDA a Win32Dasm. Ve svém vývoji se však již značně zdokonalily a naučily se obcházet mnoho druhů nejrůznějších anti-disassemblovacích algoritmů (hlavně IDA). Naše snaha se proto zaměří spíše na co možná největší "znepřehlednění" samotného kódu než na tvorbu algoritmů, které by znemožnily využití disassembleru .
Jednou z největších a také nejpoužívanějších zbraní proti disassemblingu je SMC neboli SELF MODIFYING CODE. Abych lépe vysvětlil o co jde, dovolím si rozdělit jeho použití na aktivní a pasivní. Aktivní SMC využívá plně dynamického generování kódu za běhu programu. Kód se tedy generuje RUN-TIME - a jak chcete disassemblovat něco, co v programu není (nebudu vás napínat-nejde to:-)))?? Naproti tomu pasivní SMC využívá mnohotvárnosti vyjádření instrukcí v assembleru. Podívejte se na následující ukázku:
|
Jistě jste si všimli něčeho velice zvláštního - hned první instrukce JMP skáče kamsi doprostřed té druhé!?!? Je tak přeskočen jeden bajt na adrese 00401002. Kód tedy po skoku ve skutečnosti vypadá takto :
|
Toto byl jen velice jednoduchý příklad, jistě jste ale pochopili o co jde. Compiler by nikdy takovýto kód nevygeneroval.
Následující kód jste již určitě viděli v mnoha aplikacích:
|
Určitě se nedá označit jako SMC, ale ve skutečnosti je ekvivalentem kódu JMP xxxxxxxx nebo chcete-li JMP EAX.
Pokud zvolíte k výpočtu adresy, na kterou chcete skočit nějaký složitější matematický postup, můžete dosáhnout zcela neuvěřitelných výsledků (nebylo to poprvé, co jsem nepochopil svůj vlastní programový kód:-)).
Toto bylo jen velice stručné seznámení s obecnými základy anti-disassembling technik. V příštích dílech se budeme daným tématům věnovat podrobněji.
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