07.02.2015 Views

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ste sigurno zaboravili na registar ESI. Da vas podsetim registar ESI se dobija<br />

tako sto se xoruju sve ASCII vrednosti iz pretpostavljenog passworda. Zato<br />

nismo mogli da iskoristimo tehniku koju smo upotrebili za Trillian, jer se<br />

svaki bajt iz fajla enkriptuje ne samo slovom iz passworda nego i ESI<br />

vrednoscu. Naravno sama ESI vrednost se razlikuje za svaki password, ali ne<br />

i za svaki redosled slova :) Ovo znaci da ce ESI biti isti za AAABBB i za<br />

BBBAAA jer jer xor funkcija reverzibilna to jest A xor A xor A xor B xor B xor<br />

B = 3 ali je i B xor B xor B xor A xor A xor A = 3 tako da cemo ovo iskoristiti.<br />

Pogledajmo malo sta ta xor funkcija radi.<br />

65 xor 65 = 0<br />

0 xor 65 = 65<br />

65 xor 66 = 3<br />

3 xor 66 = 65<br />

65 xor 66 = 3<br />

Dakle iz ovoga zakljucujemo da ako imamo sest razlicitih slova bez obzira na<br />

to koje je slovo na kom mestu rezultat xorovanja to jest ESI se krece u<br />

vrednostima od 0 pa do 91. Zasto Zato sto ako se na kraju xoruju dva ista<br />

slova onda ce rezultat biti minimalan to jest 0, a ako su slova najudaljenija<br />

jedna od drugog onda je maksimum 90 xor 1 to jest 91. Ovo je jako<br />

zanimljivo jer sada ne moramo racunati ESI jer znamo u kojim se on<br />

granicama krece. Naravno ovo moze da se sredi i preko integrala posto<br />

znamo granice kojima je odredjen ESI ali necemo to tako. Imamo kompjuter<br />

ispred sebe pa cemo ga maksimalno iskoristiti.<br />

Moracemo samo malo da promenimo princip razmisljanja kako bismo ubrzali<br />

onaj nas algoritam za bruteforceovanje. Dakle vec smo dosli do formule:<br />

ESI xor ASCII(SLOVO1) xor BAJT1 = 4D<br />

i tako dalje za svako sledece slovo i sledeci bajt. Ono sto cemo mi iskoristiti<br />

je cinjenica da ESI moze da ima vrednosti od 0 do 91. Zbog ovoga vise ne<br />

moramo da racunamo sam ESI nego cemo ga pretpostaviti u intervalu od 0<br />

do 100. Dakle dekriptovacemo samo prvo slovo po formuli:<br />

ESI xor ASCII(SLOVO1) xor BAJT1 = 4D<br />

gde je ESI od 0 do 100 a SLOVO1 je takodje pretpostavljena vrednost od A<br />

do Z. To bi u Visual Basicu izgledalo ovako:<br />

For j = 0 To 100<br />

For i = 65 To 90<br />

chk = i Xor j Xor tab2(1)<br />

If chk = tab1(1) <strong>The</strong>n<br />

<br />

End If<br />

Next i<br />

Next j<br />

Ovim smo definisali kod sve do onih upitnika. Sada treba da napravimo<br />

algoritam koji ce dekriptovati i sva ostala slova iz passworda. Imajte na umu<br />

da smo vec odredili ESI kao promenljivu j i da se ona u predelu upitnika nece<br />

promeniti. Ostatak algoritma je jednostavan samo treba da napravite jos<br />

jednu petlju koja ide od A do Z i da proverite da li je j xor SLOVOx (x je broj<br />

od 2 do 6) xor BAJTx jednako originalnom BAJTUx. Ovaj primer sam ja vec<br />

iskodirao i nalazi se u folderu ...\Cas9\Source2\bforce with dict - optimized\<br />

Mozete slobodno analizirati ovaj kod da biste stekli kompletnu sliku o ovom<br />

naprednom pisanju algoritma.<br />

<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 181 <strong>of</strong> 293

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

Saved successfully!

Ooh no, something went wrong!