Ascunderea Codului Binary Java prin Ofuscare

Referat
7/10 (1 vot)
Conține 1 fișier: doc
Pagini : 81 în total
Cuvinte : 1749
Mărime: 15.22KB (arhivat)
Publicat de: Ivan Neagu
Puncte necesare: 7
Profesor îndrumător / Prezentat Profesorului: Tambulea Laurentiu

Cuprins

  1. 1. Introducere
  2. 2. Metode de ofuscare a codului
  3. 2.1. Name obfuscation
  4. 2.2. Criptarea string-urilor
  5. 2.3. Data flow obfuscation
  6. 2.4. Ofuscare prin code morphing
  7. 2.5. Ofuscare in software-uri malitioase
  8. 2.6. Ofuscare pentru migrarea masinilor virtuale
  9. 3. Avantajele generale ale ofuscarii codului
  10. 3.1. Protejarea proprietatii intelectuale
  11. 3.2. Reducerea expunerii securitatii
  12. 3.3. Reducerea marimii
  13. 4. Dezavantajele generale ale ofuscarii codului
  14. 4.1. Debugging
  15. 4.2. Portabilitatea
  16. 4.3. Cand e folosit singur
  17. 5. Best practices pentru folosirea unui program de ofuscare a codului binary
  18. 5.1. Ofuscarea incrementala
  19. 5.2. Optimizarea fisierelor ce contin clasele
  20. 5.3. Debug
  21. 6. Programe de ofuscare a codului
  22. 7. Bibliografie

Extras din referat

1. Introducere

Codul ofuscat este un cod sursa greu de citi si inteles, adeseori facut in felul acesta in mod intentionat. Unele limbaje sunt mai predispuse spre ofuscare decat altele. C,C++ si Perl sunt cele mai cunoscute limbaje ca fiind usor de ofuscat. Macro procesoare sunt adesea folosite pentru a crea cod greu de citit, prin mascarea sintaxei si gramaticii limbajului.

Ofuscarea codului este in general folosita pentru ca algoritmii, ideile, licentele, si cel mai important, datele clientului sa fie protejate impotriva actiunilor malitioase ale hackerilor, care prin diverse mecanisme de inversare a decompilarii pot sa aiba acces la aceste date.

In acest sens limbajul Java este extrem de fragil. Fiind conceput pentru a compila programele intr-un format binary independent de platforma, multa din informatia continuta de catre codul sursa se regaseste in codul binar generat la compilare. Astfel decompilarea este o treaba extrem de usor de facut. Ierarhia de clase, numele claselor, metodelor si atributelor pot fi obtinute din fisierele .class facute de compilatorul standard javac. Orice persoana cu aptitudinii medii de programare poate downloada un decompilator de java, poate rula programul dat prin acest decompilator si sa obtina un cod aproape perfect identic cu cel initial inainte de compilare.

Exista numeroase decompilatoare disponibile pentru download pe Internet, dar primul decompilator disponibil catre public a fost Mocha. Acesta dezvaluie codul inainte de compilare a programului dat, printr-o singura comanda. Dar adeseori codul generat nu este perfect identic cu codul initial. Daca inainte de compilare am avea codul :

private int member = 10;

public Foo()

{

int local = returnInteger();

System.out.println(“foo constructor”);

priv(local);

}

dupa comanda “$ java mocha.Decompiler Foo.class” codul va arata rezultat va fi pus intr-un fisier cu denumirea Foo.mocha si va arata in felul urmator:

private int member;

public Foo()

{

member = 10;

int local = returnInteger();

System.out.println(“foo constructor”);

priv(local);

}

Decompilatorul Mocha nu reuseste sa decompileaza intotdeauna corect codul. In schimb exista alte programe de decompilat mult mai corecte.

Pentru a evita situatiile de expunere a codului compilat se pot folosi diverse tehnici de ofuscare a codului.

2. Metode de ofuscare a codului

Ofuscarea codului reprezinta o ascundere a codului. Un ofuscator Java schimba programul in moduri subtile, astfel incat acesta se comporta identic din punct de vedere al masinii virtuale, dar este confuz pentru omul care incearca sa inteleaga acest cod ofuscat.

2.1. Name obfuscation

Toate programele de ofuscare fac simbolurile de neinteles prin schimbarea numelui variabilelor si metodelor, uneori si a claselor si pachetelor, aceasta metoda fiind cunoscuta si sub numele de “name obfuscation”. Pentru a asigura consistenta schimbarii denumirilor in toate clasele si jar-urile, programul de ofuscare trebuie sa parcurga intreaga aplicatie. Crema, un program de ofuscare foarte popular, inlocuia simbolurile cu alte stringuri cum ar fi “private” sau chiar mai rau cu stringuri fara inteles ca ****, care nu sunt interpretate de unele masini virtuale. Acest program de ofuscare a fost punctul de pornire pentru multe alte programe de ofucare. Un avantaj al ofuscarii este reducerea marimii fisierelor de tip .class, care rezulta in download-uri mai mici si porniri mai rapide a aplicatiilor desktop Java. Dar ca si orice alta tehnica, name ofuscation are limitarile ei cum ar fi:

- Nu se pot ofusca numele claselor standard Java API, care sunt parte din JRE, deci toate folosirile acestior clase raman vzibile in codul decompilat.

- Entitatile accesate prin reflectie sau JNI in timpul rularii s-ar putea sa nu fie redenumite.

- Numele claselor serializabile nu pot fi ofuscate. Cele mai multe programe de ofuscare exclud automat clasele care implementeaza interfata java.io.Serializable.

2.2. Criptarea string-urilor

Criptarea string-urilor este trasatura adesea intalnita in programele de ofuscare Java. Inlocuirea string-urilor cu apeluri la metode ce decripteaza parametru face viata hacker-ilor mai interesanta. Problema o reprezinta faptul ca string-urile trebuie decriptate in timpul rularii,deci respectivul cod trebuie inclus in aplicatie. Mai mult un hacker in acest caz nu trebuie sa faca o decompilare a codului, ci poate pur si simplu sa scrie un program care sa apeleze metodele de decriptare pentru toate string-urile.

2.3. Data flow obfuscation

Flow obfuscation se refera la faptul ca output-ul programului este acelasi, dar este imposibil de decompilat intr-un cod sursa Java bine structura si usor de inteles. Cele mai multe programe de ofuscat cod ar inlocui instructiunile produse de compilatorul Javacu secvecte goto sau alte instructiuni care nu pot fi decompilate in cod Java valid. Un decompilator care asteapta o iesire conventionala javac fie ar esua fie ar produce pseudocod cu o multime de etichete si secvente goto.

Cu toate acestea, chiar daca folosesti un un program de ofuscare a codului care face sa esueze toate decompilatoarea, un dissasembler de bytecode va functiona intotdeauna.

Cele ma avansate tehnici de ofuscare includ schimbarea ierarhiei claselor, “desfasurarea”(unrolling) a claselor, etc.

Preview document

Ascunderea Codului Binary Java prin Ofuscare - Pagina 1
Ascunderea Codului Binary Java prin Ofuscare - Pagina 2
Ascunderea Codului Binary Java prin Ofuscare - Pagina 3
Ascunderea Codului Binary Java prin Ofuscare - Pagina 4
Ascunderea Codului Binary Java prin Ofuscare - Pagina 5
Ascunderea Codului Binary Java prin Ofuscare - Pagina 6
Ascunderea Codului Binary Java prin Ofuscare - Pagina 7
Ascunderea Codului Binary Java prin Ofuscare - Pagina 8

Conținut arhivă zip

  • Ascunderea Codului Binary Java prin Ofuscare.doc

Ai nevoie de altceva?