Sunteți pe pagina 1din 13

10.

Aplicaia PolyProtect
Aplicaia PolyProtect este construit ca o exemplificare practic a demersurilor teoretice i a prilor practice expuse pn acum n aceast lucrare. Autorii au folosit n realizarea aplicaiei tehnologia construirii unui motor polimorfic expus n capitolul 6. i tehnologia obfuscrii expus n capitolul 8. mpreun cu diverse optimizri menionate la concluziile din capitolul 9.. Menionm c aplicaia PolyProtect trebuie considerat un prototip de aplicaie pentru protejarea programelor i nu implementeaz toate tehnicile descrise n capitolele anterioare. Ealizarea unui motor polimorfic / metamorfic evoluat combinat cu o parte puternic de analiz de cod i de obfuscare este un proiect foarte complex ce se realizeaz de ctre echipe ntregi pe perioade lungi de timp. Scopul nostru a fost exemplificarea tehnicilor i demonstrarea practic a posibilitilor descrise teoretic.

10.1. Aria de aplicabilitate


Aplicaia PolyProtect are ca int un program software executabil cruia i va aplica o serie de transformri n scopul de a proteja algoritmii folosii mpotriva unei decompilri. Ca date de intrare, aplicaia PolyProtect va primi numele i calea pn la fiierul care trebuie protejat. Prototipul construit de noi poate aciona numai asupra fiierelor n cod maina 80x86 pe 32 de bii scrise pentru sistemul de operare Windows, fiiere aflate n formatul PE (Portable Executable). Se poate face relativ uor o extindere pentru prelucrarea fiierelor de tip COM iar cu un efort suplimentar mai mare aplicaia poate fi adaptat pentru prelucrarea aplicaiilor n cod intermediar .Net sau Java. Testele efectuate au luat n considerare aplicaii avnd un fiier executabil PE de dimensiuni mici i medii, pn n 7 Mbytes. Se pot folosi i fiiere mai mari dar timpul de procesare va crete din cauza prii de analiz de cod iniial i a duratei mai mari necesare pentru transformrile obfuscatoare i crearea decriptorului polimorfic.

10.2. Tehnologiile i tehnicile de protecie aplicate


Pentru a proteja un executabil, PolyProtect face o serie de operaii reprezentate schematic n figura 10.2.1.. n primul rnd face o verificare a tipului de fiier primit ca parametru. Apoi este apelat o rutin de analiza a codului programului ce trebuie protejat. Aceast rutin va calcula gradul de folosire a tipurilor de instruciuni cod main din programul iniial. Se calculeaz procentele aferente categoriilor de instruciuni de pe trei criterii de categorisire: tipul instruciunii: aritmetice normale, instruciuni pentru coprocesorul matematic, de salt, logice, de apel / revenire din rutine, de apel ntreruperi, de adresare a irurilor; 161

numrul de octei ai instruciunii; tipul de regitrii folosii: de 16 sau de 32 de bii.

Figura 10.2.1. Operaiile efectuate de PolyProtect mprite pe etape.

Procentele de folosire a fiecrui tip de instruciune calculate de rutina de analiz a codului sunt memorate i folosite n faza urmtoare. Tot n aceast faza de analiz se studiaz tipul de salturi (near sau far) efectuate de codul iniial i tipul de apeluri de rutine. La apelul rutinelor se ncearc de asemenea i detectarea modului de pasare a parametrilor pe stiv i se trage o concluzie dac exist sau nu o abordare sistematic n ntreaga aplicaie. Urmtorul pas este obfuscarea codului iniial care este fcut de o rutin separat. Dintre transformrile obfuscatoare prezentate n aceasta teza se folosesc obfuscrile de flux i cele preventive. Transformrile obfuscatoare de formatare nu sunt folosite n acest caz deoarece lucrnd direct la nivel de limbaj main formatarea este deja greu de 162

urmrit pentru un cititor uman al programului respectiv. De asemenea, nu sunt folosite nici transformrile obfuscatoare de date. i aici, codul main face deja foarte criptic organizarea datelor folosite n program. Dintre obfuscrile de flux, cele mai folosite n PolyProtect sunt cele de agregare (Inline i Outline) i cele de ordonare. Prin agregare / dezagregare ingreunm urmrirea logicii aplicaiei iar prin permutarea grupurilor de instruciuni ne asigurm c programele care ncearc reconstruirea de instruciuni din limbaje avansate prin recunoatere de secvene nu vor putea s gseasc abloane cunoscute. La transformrile peventive se folosesc att cele generale ct i cele intite. La transformrile generale intr introducerea de instruciuni junk i de apeluri ctre rutine false, apelarea de ntreruperi nefolositoare i folosirea de regitrii aleatori pentru instruciuni. Generarea de instruciuni junk se face astfel nct s se respecte procentele deja calculate de folosire pentru fiecare categorie de instruciuni astfel nct instruciunile nou adugate s fie ct mai asemntoare cu cele din programul existent. Acelai lucru este valabil i pentru apelurile de rutine i salturile condiionate sau nu. La transformrile preventive intite folosite de noi intr ncercarea de a detecta dac aplicaia este urmrit ntr-un debugger sau nu. n acest scop facem modificarea adreselor lui int 01h (single step) i int 03h (breakpoint) dup care verificm interrupt table pentru a vedea dac tentiva a avut sau nu succes. Dac tentativa nu a fost reuita nseamn c cineva face trace pe cod i facem un jump ntr-o rutin fals adugat odat cu instruciunile junk, rutin ce executa o serie de calcule complexe ntr-o bucl cu un numr mare de pai. O alt transformare preventiv pe care o folosim este tehnica Wrap Around Zero (utilizm valori obinute prin adunarea sau scderea la un registru a unui numr care genereaz depire). Din acest motiv, n regitrii pointer nu pstrm adresele reale ale procedurilor folosite ci nite adrese care nu au nici o legatura cu acestea. Adresele reale le obinem doar la nevoie prin adunare sau scdere. Aceasta tehnica deruteaz analizoarele de cod care verific adresele stocate n regitrii pointer citind valoarea acestora direct. Dac am extinde aplicaia PolyProtect i la cod intermediar de orice tip (Java sau .Net) va trebui s implementm i transformri obfuscatoare de formatare i de date pentru c, n noile condiii, acestea ar avea sens. Odat ce s-a terminat i execuia rutinei de obfuscare, PolyProtect salveaz ntr-un fiier temporar codul obfuscat obinut dup parcurgerea pailor acestei prime faze a protejrii aplicaiei iniiale. Menionm c n acest moment deja avem o protecie destul de bun i s-ar putea crea direct un fiier executabil coninnd codul obfuscat generat. Pn la acest moment urmrim un scenariu clasic de obfuscare dei nu sunt cunoscute pn n acest moment obfuscatoare create pentru limbaj main. De aici va ncepe etapa a doua a proteciei care implic criptarea codului obinut de la faza anterioar. PolyProtect cunoate a priori o schem de criptare de o complexitate medie pe care este ns capabil s o modifice uor pentru a mri puterea proteciei oferite. Primul pas din aceast etapa este deci alegerea unei scheme de criptare, alegere ce se face prin generarea unui numr aleator ce va fi folosit pentru crearea unei uoare mutaii n algoritmul cunoscut. Mutaia produsa algoritmului de criptare este efectuat cu mare grij pentru a nu genera o schema de criptare ce ar corespunde unei funcii care s nu mai fie bijectiv, caz n care decriptarea ar deveni imposibil. Odat creat schema de criptare, se apeleaz rutina care va folosi aceast schem pentru a cripta ntregul cod din fiierul temporar obinut mai devreme. Rezultatul criptrii este salvat i el ntr-un nou fiier temporar. Rezultatul acestei faze nu mai poate avea nici o utilizare practic deoarece n acest moment nu mai reprezint o form de cod executabil i are nevoie de decriptare pentru a putea fi folosit n vreun fel. 163

Am ajuns astfel la a treia i ultima etap a procesului de protecie aplicat de PolyProtect programului iniial. n aceast etapa se va genera un decriptor polimorfic ce va conine implementarea unei funcii inverse celei de criptare. Rutina care genereaz acest decriptor funcioneaz n doi pai. n primul pas creaz decriptorul ca atare iar n al doilea pas aplic transformri obfuscatoare acestui decriptor pentru a-l proteja ct mai bine mpotriva unor ncercri de dezasamblare. Pentru obfuscarea decriptorului se folosete aceeai rutin ce a obfuscat codul iniial al aplicaiei, rutin folosit i n prima etapa a protejrii. Aceasta va aplica aceleai transformri de flux i preventive ca i cele aplicate codului aplicaiei iniiale aici punndu-se ns un accent mai mare pe transformrile peventive generale i intite. La transformrile generale cantitatea de instruciuni junk, de apeluri ctre rutine false i ntreruperi nefolositoare va fi mult mai mare dect n prima faz deoarece decriptorul nu va mai fi protejat de un al doile strat (criptare) dup obfuscare. De data aceasta generarea de instruciuni junk nu mai respect procentele calculate de folosire pentru fiecare categorie de instruciuni pentru c nu mai este necesar pstrarea omogenitii cu vreo alta parte de cod. Astfel, instruciunile nou adugate nu vor fi asemntoare dect cu cele din decriptorul creat. Acelai lucru este valabil i pentru apelurile de rutine i salturile folosite. La transformrile preventive intite folosite se face din nou ncercarea de a detecta dac aplicaia este urmrit ntr-un debugger sau nu prin aceeai metod ca i mai devreme, la prima etap. Tehnica Wrap Around Zero (utilizm valori obinute prin adunarea sau scderea la un registru a unui numr care genereaz depire) este folosit i aici aleator, n diverse seciuni din decriptor. i la aceast etap trebuie avut n vedere faptul c o extindere a aplicaiei PolyProtect pentru a opera pe cod intermediar de tip Java sau .Net va trebui s implementm i transformri obfuscatoare de formatare i de date. De fapt, n cazul extinderii se va extinde rutina de obfuscare care este folosit n etapele unu i trei pentru obfuscarea codului iniial i, respectiv, pentru obfuscarea decriptorului polimorfic. La momentul n care avem decriptorul polimorfic obfuscat i protejat astfel ct mai bine mpotriva atacurilor de dezasamblare PolyProtect nu mai are de efectuat dect construirea unui fiier Portable Executable care s conin codul iniial obfuscat i apoi criptat pe care l-am salvat n fiierul intermediar i decriptorul polimorfic generat mai devreme. Acest fiier va deveni noul executabil al aplicaiei protejate.

10.3. Limbajele folosite


Mediul de dezvoltare folosit pentru a crea aplicaia PolyProtect este Borland Delphi versiunea 7.0. Ca unelte suplimentare pentru crearea anumitor module s-a folosit Turbo Assembler versiunea 5.0 mpreun cu Turbo Linker i Turbo Debugger, versiunile pe 32 de bii. Toate rutinele de application logic sunt scrise n limbaj de asamblare interfaa fiind dezvoltat n Delphi. Avantajul oferit de limbajul de asamblare i motivul pentru care s-a ales aceast soluie este posibilitatea de optimizare maxim a codului rutinelor create i viteza mult sporit cu care acesta se va executa. Pe de alt parte a trebuit s se treac peste dezavantajele evidente ale limbajului de asamblare: greutatea urmririi codului i elasticitatea redus a implementrii acestor rutine care nu folosesc structuri de date evoluate orientate pe obiecte. 164

Pentru interfa s-a folosit Delphi pentru c n ciuda apariiei unei multitudini de unelte noi de rapid application development n ultimii ani autorii au considerat c Delphi a rmas nc cea mai bun suluie n acest domeniu. Un alt criteriu este faptul c oricum s-a intenionat crearea unui prototip de aplicaie care s lucreze focalizat pe o platforma anume (Windows) i nu ar fiu avut rost folosirea unor unelte capabile s genereze con intermediar, independent de platform.

10.4. Utilizarea aplicaiei PolyProtect din linie de comanda


Aplicaia PolyProtect a fost construita astfel nct s ofere posibilitatea unui control ct mai bun asupra procesului de protecie aplicat. Concepia iniial a prevzut att modul de funcionare silent din linie de comand, ct i lucrul cu o interfa grafic prietenoas. n cazul lucrului din linie de comand, apelul se face de la MS-DOS1 prompt n modul urmtor: polyprotect file_name [flags] Parametrii au urmtoarele semnificaii:

file_name - Este numele fiierului care urmeaz a fi protejat. Acest parametru trebuie s includ calea completa pna la respectivul fiier.
[flags] - Sunt parametrii opionali de apel ai aplicaiei. n caz c acetia nu sunt specificati se va folosi setul de parametrii folosii la ultima rulare sau parametrii implicii. Putem avea urmtoarele valori pentru flags: - oi {obfuscations_enabled} determin tipul de obfuscri ce se vor aplica pentru codul iniial. Pentru obfuscations_enabled pot fi specificate una sau mai multe dintre valorile A, O, C, G, T, care nseamn: transformri de agregare/dezagregare, transformri de ordonare, transformri de calcul, transformri preventive generale i, respectiv, transformri preventive intite. Existena uneia dintre cele 5 litere menionate anterior semnaleaz activarea folosirii respectivei transformri iar absena semnaleaz dezactivarea (respectiva transformare nu va fi folosit). - c algorithm_name [<algorithm_params>] determin algoritmul de criptare ce va fi folosit. n parametrul algorithm_name se specific numele algoritmului dintr-unul din pluginurile deja instalate iar <algorithm_params> va fi completat numai n cazul c algoritmul respectiv necesita trimiterea unor parametrii. n cazul transmiterii de parametrii pentru algoritmul de criptare acetia vor fi specificai n ordinea exacta n care sunt ateptati de funcia de criptare expus de algoritm i vor fi delimitati la nceput i la sfrit prin < i >.
MS-DOS = Microsoft Disk Operating System marca nregistrat a firmei Microsoft. Referim aici generic o fereastr de comand care simuleaz modul de operare al acestui system sub sisteme de operare Windows pe 32 de bii.
1

165

- p {[size: decryptor_size] | [jprc: junk_percent]} determin doi dintre parametrii de generare a decriptorului polimorfic i anume dimensiunea i procentul de instruciuni junk folosite. Dac se folosete parametrul p va trebui ca obligatoriu s se specifice unul dintre cei doi parametrii menionai. Prin size: decryptor_size se specific dimensiunea decriptorului, care va fi o valoare ce nlocuiete cuvntul decryptor_size. Aceast dimensiune va trebui s fie mai mare de 1024 kBytes, n caz contrar nefiind luat n considerare de ctre aplicaie. Prin jprc: junk_percent se specific procentul de instruciuni junk din dimensiunea decriptorului. Procentul este o valoare intreag ce va nlocui cuvntul junk_percent. Acesta va fi ntre 20 i 95%, n caz contrar nefiind luat n considerare de ctre aplicaie. De asemenea, semnul % nu trebuie folosit, valoarea fiind considerat automat un procent. - od {obfuscations_enabled} determin tipul de obfuscri ce se vor aplica decriptorului. Pentru obfuscations_enabled pot fi specificate una sau mai multe dintre valorile A, O, C, G, T, care nseamn: transformri de agregare/dezagregare, transformri de ordonare, transformri de calcul, transformri preventive generale i, respectiv, transformri preventive intite. Existena uneia dintre cele 5 litere menionate anterior semnaleaz activarea folosirii respectivei transformri iar absena semnaleaz dezactivarea (respectiva transformare nu va fi folosit). - sp {params_saved} determin salvarea sau nu a parametrilor folosii n decursul procesului de protejare aplicat. Parametri suplimentari params_saved pot conine una sau mai multe din valorile O, C, P, D, n funcie de dorina de a salva parametrii de obfuscare a codului iniial, parametrii de criptare (algoritm + parametrii), parametrii de generate a decriptorului polimorfic i, respectiv, parametrii de obfuscare a decriptorului. Existena uneia dintre cele 4 litere menionate anterior semnaleaz activarea salvrii respectivului set de parametrii iar absena semnaleaz dezactivarea (respectivul set de parametrii nu va fi salvat). - sf protected_file_name determin salvarea fiserului protejat rezultat n urma procesului sub numele de protected_file_name. Trebuie mentionat numai numele fiierului, nu i extensia, aceasta fiind completat automat cu .exe. Absena oricruia dintre parametrii opionali va determina automat folosirea valorilor implicite ale aplicaiei PolyProtect pentru respectivul parametru. n cazul parametrilor de obfuscare iniial i a parametrilor de obfuscare a decriptorului, n mod implicit se folosesc transformri de agregare/dezagregare, transformri ale ordonrii, transformri preventive generale i intite (nu se folosesc transformrile de calcul). Ca algoritm de criptare se va folosi cel implicit cu cheie variabil i incrementare a cheii cu o valoare fix aleas aleator iar lungimea implicit a decriptoului va fi de 2048 kBytes n timp ce procentul implicit de instruciuni junk folosit va fi 40%. Ca nume al fiierului protejat se va folosi implicit numele original al aplicaiei primit ca parametru la care se va adauga un p iar implicit, parametrii folosii nu vor fi salvai. Modul de lucru din linie de comanda al aplicaiei PolyProtect a fost prevzut pentru cazul n care acest utilitar ar putea fi apelat din aplicaii third party cum ar fi medii de dezvoltare sau utilitare pentru construirea de kituri de instalare. Avantajul obinut va consta n funcionarea fr a afia o interfa duferit de cea a programului apelant i posibilitatea controlului bun asupra parametrilor procesului de protecie.

166

10.5. Utilizarea interfeei aplicaiei PolyProtect


PolyProtect are o interfaa intuitiv, uor de folosit i configurat pentru obinerea rezultatelor dorite n protejarea aplicaiilor. Prezentarea funcionalitilor principale este sub form de butoane mari i foarte vizibile plasate n partea stng a ferestrei principale a aplicaiei (figura 10.5.1.). Toate aceste funcionaliti pot fi accesate i prin folosirea meniului principal al aplicaiei sau prin activarea modului de lucru Wizard.

Figura 10.5.1. Fereastra principala a aplicaiei PolyProtect Pasul 1: Selectarea fiierului pe care se va aplica protecia.

Operaia curent efectuat de ctre utilizator este afiat n status bar, n partea din dreapta jos (vezi figura 10.5.1.). Numele fiierului iniial pe care se lucreaz la un moment dat este afiat pe parcursul tuturor pailor impreun cu calea complet n partea din stnga jos a aceluiai status bar. Protejarea unei aplicaii folosind PolyProtect presupune trecerea prin ase pai n care sunt alese diverse opiuni ale procesului desfurat. Fiecare dintre aceti pai folosete un ecran separat de configurare. La lansarea aplicaiei, ecranele pentru toi paii sunt iniializate cu valorile implicite folosite de PolyProtect. Pentru accesarea unui anumit ecran de configurare se folosesc butoanele din partea stng sau meniul principal al aplicaiei. Primul pas const n selectarea fiierului care se dorete a fi protejat de ctre aplicaie. Aceast operaie se realizeaz n primul ecran, care este prezentat n figura 10.5.1. i care ofer posibilitatea de a vizualiza n stil browse toate discurile i celalalte periferice destinate stocrii de date instalate pe maina pe care ruleaz aplicaia i coninutul acestora. n partea stnga a ferestrei este un combo pentru selecia directorului 167

radacin sub care se afla un treeview ce prezint coninutul directorului ales la un moment dat. Atunci cnd un subdirector din treeview este selectat, n partea dreapta sunt afiate toate fiierele coninute n acesta folosind un control de tip listview i o afiare de tip lista detaliata ce prezint: numele fiierului, dimensiunea acestuia, tipul fiierului i data ultimei modificri. Navigarea se poate face prin click cu mouse-ul pe directoare sau prin folosirea tastelor sgei. Selectarea fiierului de lucru se face prin dublu click sau apasarea butonului OK din partea de jos a ferestrei. Nu se pot selecta dect fiiere executabile, PolyProtect anulnd automat orice selecie a unui fiier de alt tip. Odat ce o selecie valid (selecie a unui fiier executabil de tip .exe) a fost efectuat, numele acestui fiier va aparea n statul bar n partea din dreapta jos. Pentru a schimba fiierul de lucru se poate reveni oricnd n acest ecran apasnd pe butonul Fiier din partea stnga sau folosind meniul principal. Al doilea pas este analiza codului executabil al fiierului pe care se lucreaz. Aceast analiz va calcula gradul de folosire a tipurilor de instruciuni cod main din programul iniial. Se calculeaz procente aferente celor categoriilor de instruciuni n funcie de cele trei criterii de categorisire descrise n capitolul 10.2. din lucrare. Procentele calculate sunt memorate i folosite n faza urmtoare. Tot aceasta analiza studiaz tipul de salturi (near sau far) efectuate n cod i tipul de apeluri de rutine. La apelul rutinelor se ncearc i detectarea modului de pasare a parametrilor pe stiv i se trage o concluzie despre existena sau nu a unei abordri sistematice n ntreagul cod analizat. Fereastra folosit pentru pasul de analiz nu va mai fi una de configurare parametrii ci una de prezentare grafic a rezultatelor analizei codului. Aceast fereastra este prezentat n figura 10.5.2..

Figura 10.5.2. Fereastra de prezentare a rezultatelor analizei codului iniial.

168

Graficele prezente n aceast fereastra prezint tipul instruciunilor folosite n jumtatea superioar a ferestrei iar numrul de octei per instruciune i tipul regitrilor folosii sunt prezentai n partea de jos. Tipul instruciunilor folosite este reprezentat ntrun grafic cu bare i culori diferite pe cele 7 categorii prezentate la capitolul 10.2.: aritmetice, pentru coprocesorul matematic, de salt, logice, de apel / revenire din rutine, de apel ntreruperi, de adresare a irurilor. Numrul de octei ai instruciunilor i tipul regitrilor sunt prezentate n grafice PieChart care folosesc i ele culori diferite pentru fiecare categorie. Toate graficele prezente au cte o legenda i menionarea valoric i procentual a rezultatelor analizei. Analiza este declanata de apasarea butonului Analiz Cod din partea de jos a ecranului. nainte de apsarea acestui buton nici unul din cele trei grafice nu afieaz nici o valoare. La apsarea butonului se lanseaz procesul de analiz care, pentru fiiere mei mari poate lua de la cteva secunde pna la zeci de minute. Progresul procesului de analiz este prezentat ntr-un gauge situat n partea din dreapta sus a ecranului. Accesarea acestui ecran se face de la butonul mare Analiz Cod din partea stng a ferestrei principale a aplicaiei sau folosind meniul principal. Pasul al treilea al procesului de protejare a aplicaiilor este obfuscarea codului iniial. Aceasta se efectueaz din ecranul de Obfuscare ce este prezentat n figura 10.5.3. i poate fi accesat de la butonul Obfuscare din partea stng a ecranului sau din meniul principal al aplicaiei.

Figura 10.5.3. Fereastra de obfuscare a codului iniial.

n aceast ecran se pot parametra tipurile de transformri obfuscatoare care se vor aplica asupra executabilului selectat la pasul nti. Pentru a activa folosirea unei anumite transformri trebuie bifat checkbox-ul corespunztor din ecranul prezentat. n partea stng se afl cte un checkbox pentru cele doua categorii de transformri obfuscatoare aplicabile: obfuscrile de flux i cele preventive. Activarea sau dezactivarea unuia dintre 169

aceste doua controale va provoca activarea i dezactivarea posibilitii de a folosi ntreaga categorie de transformri obfuscatoare corespunztoare. n partea dreapt avem cte un checkbox pentru fiecare dintre obfuscrile de flux i preventive din PolyProtect. Pentru cele de flux avem checkbox-uri pentru transformrile de agregare (Inline i Outline), cele de ordonare i cele de calcul. La transformrile peventive avem checkbox-uri i folosim att transformrile generale ct i cele intite. Declanarea procesului de obfuscare este fcut prin apsarea butonului Obfuscare Cod Iniial din partea de jos a ecranului. La apsarea acestuia se lanseaz procesul de obfuscare care i el poate dura de la cteva secunde pna la zeci de minute n funcie de dimensiunea programului pe care se lucreaz. Progresul procesului de obfuscare este prezentat asemntor celui de analiz a codului ntr-un gauge situat n partea din dreapta sus a ecranului. Pasul urmtor dup obfuscarea codului este criptarea (pasul al patrulea). Aici se va prelua codul obfuscat i se va cripta folosind un algoritm simplu de criptare cu cheie incrementat (n acest prototip). Ecranul folosit pentru acest pas este prezentat n figura 10.5.4. care urmeaz.

Figura 10.5.4. Fereastra de parametrare a criptrii.

Aplicaia este prevzut pentru a permite instalarea de plugin-uri care s conin i ali algoritmi de criptare dar n prototipul iniial nu exist dect un singur algoritm care este i implicit. Algoritmii din plugin-urile care vor putea fi instalate sunt prezentai ntrun listview din partea stng a ecranului impreun cu detalii despre ei. Se marcheaz algoritmul care este folosit implicit la un moment dat precum i dat de creare a fiecrui algoritm de criptare instalat. Urmtorul pas este crearea unei rutine polimorfice de decriptare ce va conine implementarea unei funcii inverse celei folosite pentru de criptare. Rutina care genereaz acest decriptor funcioneaz n doi pai. n primul pas creaz decriptorul ca 170

atare iar n al doilea se aplic transformri obfuscatoare acestui decriptor pentru a-l proteja ct mai bine mpotriva unor ncercri de dezasamblare. i aici se folosete un ecran de parametrare a acestui proces, ecran prezentat n figura 10.5.5..

Figura 10.5.5. Fereastra de parametrarea a generrii decriptorului polimorfic.

Ecranul este mprit n dou pri, n stnga sunt parametrii de generare a decriptorului iar n dreapta sunt parametrii de obfuscare a acestui decriptor. Parametrii de generare a decriptorului sunt dimensiunea acestuia i procentul de instruciuni junk ce va fi folosit. Parametrii de obfuscare sunt aceiai cu parametrii de obfuscare a codului iniial doar c de aceast dat transformrile respective se vor aplica rutinei de decriptare. Dimensiunea decriptorului va trebui s fie mai mare de 1024 kBytes, controlul de editare de tip spinedit folosit nepermind valori mai mici. Procentul de instruciuni junk este o valoare intreag ce va fi ntre 20 i 95% aceste limite fiind, de asemenea, impuse prin validarea automat a controlului de editare. Obfuscarea decriptorului se face cu aceeai rutin ce a obfuscat codul iniial al aplicaiei, rutin folosit i n prima etapa a protejrii. Aceasta va aplica aceleai transformri de flux i preventive ca i cele aplicate codului aplicaiei iniiale aici punndu-se ns un accent mai mare pe transformrile peventive generale i intite. La transformrile generale cantitatea de instruciuni junk, de apeluri ctre rutine false i ntreruperi nefolositoare va fi mult mai mare dect n prima faz deoarece decriptorul nu va mai fi protejat de un al doile strat (criptare) dup obfuscare. De data aceasta generarea de instruciuni junk nu mai respect procentele calculate de folosire pentru fiecare categorie de instruciuni pentru c nu mai este necesar pstrarea omogenitii cu vreo alta parte de cod. Astfel, instruciunile nou adugate nu vor fi asemntoare dect cu cele din decriptorul creat. Acelai lucru este valabil i pentru apelurile de rutine i salturile folosite. Al aselea i ultimul pas al procesului de protecie este obinerea fiierului protejat. La momentul acesta avem decriptorul polimorfic obfuscat i protejat mpotriva atacurilor 171

de dezasamblare iar PolyProtect nu mai are de efectuat dect construirea unui fiier Portable Executable care s conin codul iniial obfuscat i apoi criptat pe care l-am generat la paii anteriori i decriptorul polimorfic generat mai devreme. Acest fiier va deveni noul executabil al aplicaiei protejate. Ecranul pentru acest pas este prezentat n figura 10.5.6..

Figura 10.5.6. Fereastra de generare i salvare a exevutabilului rezultat.

n aceast fereastr avem n partea de sus un editbox n care se va alege calea i numele complet al fiierului care va conine programul protejat (extensia va fi ntotdeauna .exe). n partea de jos a aceleiai ferestre avem posibilitatea s alegem salvarea parametrilor folosii la paii descrii anterior i care au fost parcuri pentru realizarea proteciei. Dac se bifeaz checkboxul Salvare parametrii folosii n procesul de protejare a aplicaiei atunci vom avea posibilitatea s alegem care dintre acesti parametrii vor fi salvai. Salvarea parametrilor se va face ntr-un fiier de tip text care va avea numele format din prefixul params_ urmat de numele fiierului protejat, data curent i un numr de secven autoincrementat de ctre PolyProtect. Paii descrii anterior pot fi parcuri in ntr-o ordine modificat dar un anumit pas se va aplica mereu rezultatelor existente de la cei aplicai anterior. Aplicaia mai poate fi folosit i n stilul Wizard care va parcurge n ordinea descris de noi mai devreme toate cele ase etape ale procesului de protecie. n acest caz se folosesc butoanele de navigare situate n partea de sus a ecranului, imediat sub meniul principal. Primul dintre aceste butoane: Start va porni procesul de protecie prin activarea ecranului de alegere a fiierului de lucru. Apoi se avanseaz cu fiecare pas n ordine prin apsarea butonului Pasul Urmtor pn cnd se ajunge la ultimul pas (pasul ase). Se poate reveni napoi n orice moment prin apasarea butonului Pasul Anterior i se pot modifica parametrii care sunt considerai nepotrivii. 172

Prin apsarea butonului Stop se va reiniializa ntreg procesul de protecie i se vor terge toate fiierele intermediare generate pn n acel moment de ctre PolyProtect. Dup acest moment, procesul de protecie poate fi nceput numai prin reluarea tuturor pailor, ncepnd cu alegerea fiierului de lucru.

173