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.

Posto znamo da se prilikom enkripcije koriste XOR komande ovaj deo koda<br />

mora biti vazan za ceo proces enkripcije. Primeticemo da su sadrzaji adresa<br />

EDI, EDI+4, EDI+8, EDI+C, EDI + 10, ESI Hex vrednosti ASCII kodova slova<br />

iz passworda kojim enkriptujemo fajl. Iz ovoga zakljucujemo da je:<br />

EAX = Pass[1] xor Pass[2] xor Pass[3] xor Pass[4] xor Pass[5] xor Pass[6]<br />

gde su Pass[1..6] ASCII vrednosti 1..6 slova iz passworda. Posle ovog<br />

xorovanja vrednost iz EAX se prebacuje u ESI. Ispod ovoga sledi petlja iz<br />

koje zakljucujemo sledece:<br />

00453C01 |. 33C0<br />

00453C03 |. 8A45 FF<br />

00453C06 |. 33C6<br />

00453C08 |. 33449F FC<br />

00453C0C |. 43<br />

00453C0D |. 83FB 06<br />

00453C10 |. /7E 05<br />

00453C12 |. |BB 01000000<br />

|XOR EAX,EAX<br />

|MOV AL,BYTE PTR SS:[EBP-1]<br />

|XOR EAX,ESI<br />

|XOR EAX,DWORD PTR DS:[EDI+EBX*4-4]<br />

|INC EBX<br />

|CMP EBX,6<br />

|JLE SHORT encryptF.00453C17<br />

|MOV EBX,1<br />

- Na adresi 00453C03 se u AL smesta jedan po jedan karakter iz fajla<br />

original.exe (MZ....)<br />

- Na sledecoj adresi se EAX xoruje sa vrednoscu iz ESIja<br />

- Ispod ovoga se EAX xoruje sa ASCII vrednoscu slova prolaza. Primera<br />

radi ako je ovo prvi prolaz od sest mogucih (jer toliko ima slova u<br />

passwordu) EAX ce biti xorovan sa ASCII vrednoscu prvog slova iz<br />

passworda.<br />

- EBX se povecava za jedan i on predstavlja brojac prolaza<br />

- Ako je prolaz veci od 6 prolaz (EBX) ce biti resetovan na 1<br />

- Posle se EAX pretvara u ASCII slovo koje se zapisuje u novi fajl<br />

Ovaj loop ce se ponavljati 4096 puta jer toliko bajtova ima originalni fajl. Kao<br />

sto se vidi enkripcija se vrsi na svakih 6 bajtova a onda se postupak<br />

ponavlja. To jest prvi bajt se xoruje sa ESIjem i sa ASCII vrednoscu prvog<br />

slova, drugi bajt sa drugim, a kada brojac slova predje sest, to jest dodje do<br />

sedam onda se on resetuje i krece ponovo od jedan. Tako ce sedmi bajt biti<br />

xorovan sa ESIjem i sa ASCII vrednosu prvog karaktera. Na osnovu detalja<br />

koje smo saznali mozemo napraviti deo algoritma za bruteforceing. Pre<br />

pisanja algoritma moramo da znamo unapred kako cemo ga napisati.<br />

Najjednostavniji nacin je da dekriptujemo samo 6 prvih bajtova iz originalnog<br />

fajla i da ih uporedimo sa bajtovima iz neenkriptovanog fajla. Zasto uzimamo<br />

prvih sest bajtova Prosto posto se enkripcija ponavlja svakih sest bajtova,<br />

prvi i sedmi bajt ce biti enkriptovani na isti nacin.<br />

Kada konstruisemo algoritam prvo moramo da definisemo tablicu slova<br />

koja ce biti koriscena da se od njih napravi password. Ova tablica je velika 26<br />

karaktera i sadrzi sva velika slova od A-Z. Posto imamo sest karaktera koji<br />

cine password moramo imati i sest petlji od 1 do 26 koje se ponavljaju jedna<br />

unutar druge. Zasto ovo radimo Jer se kombinacije koje prave password<br />

krecu od AAAAAA pa do ZZZZZZ menjajuci pri tome zadnje slovo 26 puta, a<br />

kada zadnje slovo dodje do 27tog onda se krece iz pocetka i umesto 27og<br />

slova koristi se prvo slovo, slovo A, dok se drugo A od kraja povecava za<br />

jedan i postaje B. Tada ce kombinacija izgledati ovako AAAABA.<br />

Ono sto mi moramo da proverimo je da li je xorovana vrednost svih<br />

slova iz passworda (ESI) xorovana slovom passworda (Pass[i]) koje se<br />

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

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

Saved successfully!

Ooh no, something went wrong!