Pasivní SMC - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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

Pasivní SMC

9. srpna 2001, 00.00 | V poslední době se v mnoha programech zaměřeným nejenom proti crackerům začala objevovat poměrně stará, ale přesto ne moc známá a málo využívaná metoda, jak zmást případného útočníka. Ano, řeč je o využití mnohotvárnosti vyjádření kódu v assembleru.

V poslední době se v mnoha programech zaměřeným nejenom proti crackerům začala objevovat poměrně stará, ale přesto ne moc známá a málo využívaná metoda, jak aspoň částečně zmást případného útočníka. Ano, řeč je o využití mnohotvárnosti vyjádření kódu v assembleru. I přesto, že tato technika není tak účinná jako její "aktivní" varianta, je využívána mnohem častěji.
Domnívám se, že asi neexistují žádné obecné rady pro tvorbu pasivních SMC algoritmů. Vždy to chce určité množství času, zkušeností a trpělivosti. Podívejte se na následující algoritmus - tvořil jsem ho asi 20 minut a je typickou ukázkou "znepřehlednění" kódu.

00401005: 50 push eax
00401006: E801000000 call 00040100C 
0040100B: D2908B042483 rcl [eax+08324048B],cl
00401011: C01B89 rcr [ebx],089 
00401014: 0424 add al,024 
00401016: EB01 jmps 000401019 
00401018: 2348EB and ecx,[eax-0015]
0040101B: 01D2 add edx,edx
0040101D: EB04 jmps 000401023
0040101F: A3E940C3EB mov [0EBC340E9],eax
00401024: FC cld
00401025: E99058EB01 jmp 001EB5CBA
0040102A: C3 retn
0040102B: ..normální pokračování kódu

Po zpracování instrukce call vypadá kód takto:

0040100C: 90 nop
0040100D: 8B0424 mov eax,[esp] //načteme hodnotu uloženou funkcí call
00401010: 83C01B add eax,1B //zvětšíme
00401013: 890424 mov [esp],eax //zápíšeme zpátky do stacku
00401016: EB01 jmps 000401019 
00401018: 2348EB and ecx,[eax-0015]
0040101B: 01D2 add edx,edx
……

Výše zmíněný kód zvětší návratovou hodnotu, která byla do stacku uložena díky volání funkce call. Po zavolání funkce ret se proto zpracování kódu přesune dál (konkrétně na adresu 00401026), než za instrukci call, jak tomu běžně je . Tuto metodu proto můžete využít k nečekaným skokům v programovém kódu.

Po skoku na adrese 00401016 vypadá kód takto:


00401019: 48 dec eax
0040101A: EB01 jmp 0040101D
0040101C: D2EB shr bl,cl
0040101E: 04A3 add al,a3
…..

Po dalším skoku:

0040101D: EB04 jmp 00401023
0040101F: A3E940C3EB mov [EBC340E9],eax
00401024: FC cld
…..

Po skoku:

00401023: EBFC jmp 00401021


Po předchozím skoku se konečně dostáváme na konec callu:

00401021: 40 inc eax
00401022: C3 ret
….

Po instrukci ret:

00401026: 90 nop
00401027: 58 pop eax
00401028: EB01 jmp 0040102B
0040102A: C3 ret
0040102B: ….normální pokračování kódu

Jistě jste už přišli na to, že tento algoritmus nedělá naprosto nic!! Ale svůj účel - tedy zmatení a znepřehlednění samotného kódu plní dokonale. Bez jakýkoliv okolků ho použijte kdekoli chcete, ale ručím vám za to, že pokud se aspoň na půl hodiny zamyslíte, vymyslíte jistě něco mnohem lepšího. 
Více bych vám ale doporučoval nějaký opravdu funkční SMC, který plní třeba nějakou výpočtovou úlohu nebo něco podobného. Na druhou stranu, pokud vložíte více podobných algoritmů, jako je ten můj, mezi kriticky důležité části programového kódu, svůj účel jistě splní.
No a pokud se někomu z vás podaří sestavit nějaký opravdu dobrý SMC algoritmus a budete se chtít podělit s ostatními, klidně mi jej zašlete. Vyberu ty nejlepší a rád je uveřejním.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Assembler  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: