28.04.2013 Views

Ingineria inversă

Ingineria inversă

Ingineria inversă

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Exemple: ingineria <strong>inversă</strong> a programelor Java<br />

}<br />

}<br />

Codul dezasamblat este mult mai mare, dar informaţiile nefolositoare au fost şterse. Lăsăm ca<br />

temă cititorului decompilarea celorlalte 7 metode din această clasă. Exemplul expus mai sus este unul<br />

simplu, iar decompilarea s-a desfăşurat într-o manieră secvenţială. Există însă situaţii care presupun o<br />

analiză semantică a codului de octeţi. La nivelul limbajului Java, valorile de adevăr true şi false nu<br />

pot fi substituite prin 1 şi 0 ca în alte limbaje, însă, la nivelul codului de octeţi, true şi false sunt<br />

reprezentate de numerele 1 şi 0 de tipul int. Acest lucru generează dificultăţi în decompilare, unde<br />

tipul variabilei trebuie dedus printr-o analiza semantică şi în loc de if(i==1) să putem scrie if(b), unde<br />

b este o variabilă booleană. Propunem cititorului să scrie o clasă simplă, cu o singură metodă care să<br />

conţină o instrucţiune de forma if((a1 && a2 && … && an) || (b1 && b2 && … && bn) || …. || (z1<br />

&& z2 && … && zn)), unde a1, a2, …, b1, b2,…, etc, sunt toate variabile booleane. Să compileze<br />

clasa, iar apoi să decompileze codul de octeţi obţinut.<br />

Cum am văzut, procesul de decompilare nu este simplu, dar este posibil de realizat. Toate<br />

aceste operaţii, făcute “manual” mai sus, sunt realizate instantaneu de către un decompilator.<br />

Creatorul decompilatorului trebuie să ţină seama însă de toate situaţiile ce pot să apară într-un cod de<br />

octeţi. Decompilarea este “completă” atunci când, codul sursă obţinut poate fi recompilat fără<br />

modificări, obţinându-se o clasă care funcţionează identic cu cea originală. De la acest punct se poate<br />

trece mai departe la studiul codului decompilat, se poate identifica uşor funcţionalitatea anumitor<br />

segmente de cod prin comentare, recompilare şi execuţie.<br />

- 43 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!