The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ReCrypt 0.80<br />
Najnovija verzija ReCrypta je donela jos par veoma zanimljivih novina<br />
koje su dizajnirane da nas sprece da otpakujemo ovu metu. Bilo kako bilo<br />
zahvaljujuci Cruddu koji mi je poslao najnoviju verziju ovog kriptera<br />
naucicemo nesto novo. Meta za ovaj deo poglavlja je Genesis.ReCrypt80.exe i<br />
nalazi se u folderu Cas10. Kada otvorimo ovu metu pomocu Ollyja videcemo<br />
da format .exe fajla ne zadovoljava PE standard zbog cega cemo se naci<br />
ovde:<br />
77F767CE C3 RET<br />
Posto zbog ove cinjenice necemo biti u mogucnosti da pristupamo sekcijama<br />
moracemo da otvorimo fajl pomocu LordPEa da bismo videli u kojoj sekciji se<br />
nalazi OEP i na kojoj je on adresi. Dakle adresa OEPa je 00405000 a on se<br />
nalazi u poslednjoj sekciji RE-Crypt. Zbog ovoga cemo pritisnuti CTRL+G u<br />
Ollyju i otici cemo na adresu 00405000, na kojoj cemo postaviti obican<br />
breakpoint. Klikom na F9 stizemo do naseg breakpointa, odnosno nalazimo<br />
na packer OEPu:<br />
00405000 60 PUSHAD<br />
00405001 E8 00000000 CALL Genesis_.00405006<br />
00405006 5D POP EBP<br />
00405007 81ED F31D4000 SUB EBP,Genesis_.00401DF3<br />
Sada bismo trebali da postavimo memorijski breakpoint na glavnu sekciju, ali<br />
posto nismo u mogucnosti to da uradimo (Olly ne vidi ni jednu sekciju)<br />
iskoristicemo nas STACK trik. Dok se nalazimo na PUSHAD komandi<br />
pritisnucemo F8 posle cega ce ESP registar dobiti novu vrednost. Ispraticemo<br />
tu vrednost u dumpu posle cega cemo selektovati prva cetiri bajta u hex<br />
dump prozoru:<br />
0012FFA4 FF FF FF FF 6A 16 F5 77 ....j..w<br />
0012FFAC F0 FF 12 00 C4 FF 12 00 ........<br />
na ova cetiri cemo postaviti Hardware breakpoint -> On access -> dword…<br />
Kada sada pokusamo da startujemo metu klikom na F9 doci cemo do sledece<br />
lokacije:<br />
0040501B 60 PUSHAD<br />
0040501C E8 00000000 CALL Genesis_.00405021<br />
Nismo bas daleko otisli, ali ako kliknemo na F9 jos jedan put naci cemo se<br />
ovde:<br />
004053F6 50 PUSH EAX ; Genesis_.00401000<br />
004053F7 33C5 XOR EAX,EBP<br />
004053F9 E8 1D000000 CALL Genesis_.0040541B<br />
Naravno vidimo da EAX sadrzi vrednost koja moze biti ili vrednost prve<br />
adrese u prvoj sekciji ili adresa OEPa. Iz ovog razloga cemo traceovati kroz<br />
kod sa F7, traceujuci kroz CALL na adresi 004053F9, stizuci do sledeceg<br />
koda:<br />
0040541B 58 POP EAX ; Genesis_.004053FE<br />
0040541C C3 RET<br />
Sada je vec ocigledno da je 00401000 pravi OEP iz razloga sto ce se posle<br />
izvrsavanja komande PUSH EAX, adresa 00401000 naci na STACKu, a posle<br />
izvrsavanja RET komande i sam program ce skociti na adresu 00401000, na<br />
kojoj se bez sumnlje nalazi pravi OEP:<br />
00401000 6A 00 PUSH 0<br />
00401002 E8 D9000000 CALL Genesis_.004010E0 ; JMP to kernel32.GetModuleHandleA<br />
00401007 A3 40304000 MOV DWORD PTR DS:[403040],EAX<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 230 <strong>of</strong> 293