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 />

exemplu, pentru tipul int putem folosi ca identificator i, i1, i2, …, pentru tipul String putem folosi s,<br />

s1, s2, …, etc. Deoarece variabila locală 1 este folosită pentru prima dată, aici trebuie să avem o<br />

declaraţie. Prin urmare instrucţiunile ..store pot genera cod sursă. Prefixul a al instrucţiunii ne spune<br />

că este încărcată o valoare de tip referinţă. Deci, ţinând seama că metoda getParameter(), din clasa<br />

Applet, returnează un String, putem scrie instrucţiunea:<br />

String s = getParameter(“snows”);<br />

59 aload_1<br />

60 ifnonnull 72<br />

63 aload_0<br />

64 bipush 100<br />

66 putfield snow/snows I<br />

69 goto 83<br />

Instrucţiunea aload_1 încarcă în stivă variabila locală 1, deci, din punctul de vedere al<br />

decompilatorului, identificatorul s. Instrucţiunea ifnonnull extrage din stivă referinţa la un obiect, în<br />

cazul nostru s, şi o compară cu referinţa null. În cazul în care nu coincid, execuţia codului continuă de<br />

la offset-ul 72. Prin urmare, instrucţiunile ifnull şi ifnonnull generează cod sursă. Pentru ca<br />

decompilarea să continue de la offset-ul 63 şi nu de la 72, vom scrie testul invers. Deci avem<br />

structura:<br />

if(s==null){<br />

}<br />

Evoluţia stivei în timpul execuţiei instrucţiunilor de mai sus este:<br />

s<br />

this<br />

s<br />

100<br />

this<br />

s<br />

Instrucţiunea bipush 100 încarcă în stivă valoarea întreagă de tipul byte 100 care apoi va fi încărcată<br />

în atributul snows (şi deci obţinem cod sursă). Instrucţiunea goto 83 determină ca execuţia codului să<br />

contnue de la offset-ul 83. În concluzie, avem o structură de tipul if-else. Prin urmare avem codul:<br />

if(s==null){<br />

snows = 100;<br />

}else{<br />

}<br />

Pe varianta “else” se execută codul:<br />

- 27 -

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

Saved successfully!

Ooh no, something went wrong!