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.

JDPack 1.x / JDProtect 0.9<br />

Ovaj paker / protektor se moze naci u dve verzije i pod dva imena ali<br />

se u oba slucaja kod uopste ne razlikuje, naravno ako se izuzme deo koda<br />

koji predstavlja deo koda koji se direktno koristi za odlazak na OEP<br />

otpakovanog programa. Ova razlika u JDProtect nije velika i predstavlja samo<br />

varijaciju na OEP jump iz JDPacka. Ono sto je bitno kada otpakujemo ovaj<br />

paker je da uocimo cesto koriscenu rutinu za dekriptovanje odredjenog dela<br />

koda. Ovaj deo koda je standardan i sastoji se ili od dve MOV/MOVS<br />

komande ili para LODS i STOS komande. Ove komande ne rade nista drugo<br />

osim ucitavanja i snimanja bajtova na odredjene adrese. Ono sto je bitno je<br />

deo koda koji se izvrsava izmedju ove dve komande a odnosi se na<br />

dekriptovanje nekog dela koda. Ovaj postupak bi izgledao ovako:<br />

• Ucitavanje bajta sa neke adrese pomocu komande MOV ili LODS<br />

• Dekripcija bajta pomocu niza komandi<br />

• Snimanje dekriptovanog bajta na lokaciju sa koje je iscitan pomocu<br />

komandi MOV ili STOS.<br />

Ovakav kod se lako identifikuje u kodu JDProtectora jer je koristena obicna<br />

petlja koja dekriptuje odredjeni niz bajtova. Posto se petlje u ASMu prave ili<br />

pomocu uslovnih skokova skokova ili pomocu LOOPD komande, ovaj deo<br />

koda se veoma lako identifikuje:<br />

00405043 8A85 383C4000 MOV AL,BYTE PTR SS:[EBP+403C38]<br />

00405049 8A1E MOV BL,BYTE PTR DS:[ESI]<br />

0040504B 32C3 XOR AL,BL<br />

0040504D 8806 MOV BYTE PTR DS:[ESI],AL<br />

0040504F 889D 383C4000 MOV BYTE PTR SS:[EBP+403C38],BL<br />

00405055 46 INC ESI<br />

00405056 ^ E2 EB LOOPD SHORT crackme_.00405043<br />

Posto ovaj deo koda sluzi za direktnu dekripciju koda ispod, drzacemo F8 da<br />

bismo dekriptovali prvih par komandi ispod ovog loopa. Kada se dekriptuje<br />

prva komanda mozemo da postavimo breakpoint na tu novu dekriptovanu<br />

adresu i pritisnemo F9 kako bismo dosli do nje. Prva sledeca adresa je:<br />

00405058 9C PUSHFD<br />

00405059 58 POP EAX<br />

Sledece sto treba da uradimo je da nadjemo skok ka OEPu. Ovde cemo<br />

iskoristiti mali trik. Naime posto program prikazuje shareware NAG u<br />

takozvanom Warning modu (prikazuje tu ikonu) parametar koji se mora<br />

proslediti MessageBoxA APiju je PUSH 30. Kada ovo uradimo pomocu CTRL+L<br />

pronacicemo drugo pojavljivanje ove komande posto se prvo ocigledno<br />

odnosi na prijavljivanje gresaka u procesu otpakivanja. Dakle, ovde smo:<br />

0040550F 6A 30 PUSH 30<br />

00405511 8D9D 58394000 LEA EBX,DWORD PTR SS:[EBP+403958]<br />

Primeticete da se ove PUSH komande odnose na prikazivanje NAGa, a sledeci<br />

kod na pripremu i izvrsavanje skoka ka OEPu. Ovde se desavaju sledece<br />

analizirane operacije:<br />

00405527 8B95 3D3C4000 MOV EDX,DWORD PTR SS:[EBP+403C3D] /*Load ImageBase<br />

0040552D 8B85 F8384000 MOV EAX,DWORD PTR SS:[EBP+4038F8] /*Load OEP base<br />

00405533 03C2 ADD EAX,EDX /* Get OEP RVA<br />

00405535 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX<br />

00405539 61 POPAD<br />

0040553A 50 PUSH EAX /* PUSH OEP<br />

0040553B C3 RET /* JMP to OEP<br />

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

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

Saved successfully!

Ooh no, something went wrong!