The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
dodelio status: Full Access, Read/Write, Read only,… Posto se nas inline<br />
patch rusi pri pokusaju da upise nas patch u glavnu sekciju zakljucujemo da<br />
je glavna sekcija zakljucana za pisanje od strane VirtualProtecta. Ovo bi<br />
trebalo da bude lako iz razloga sto se VirtualProtect vec nalazi u import<br />
tablici, odnosno ne ucitava se dinamicki. Logicno je da prvo sto nam pada na<br />
pamet je postavljanje break-pointa na taj import, ali to nije pravo resenje,<br />
pogotovo ne kada se radi o pakerima. Posto Olly nece zastati prilikom<br />
postavljanja break-pointa, moramo da primenimo sledeci trik.<br />
Naime posto se import vec nalazi u fajlu ocigledno je da program nema<br />
razloga za dinamickim ucitavanjem importa, odnosno packer mora prilikom<br />
pozivanje VirtualProtecta pristupiti adresi na kojoj se on nalazi. Ako<br />
pogledamo nasu tablicu importa videcemo da se VirtualProtect nalazi na<br />
adresi 004075B8 zbog cega bi bilo najbolje da postavimo jedan break-point<br />
na toj adresi. Odnosno necemo postaviti obican break-point na toj adresi,<br />
nego cemo otici na tu adresu u Hex dumpu kako bismo postavili memorijski<br />
break-point on access. Zasto ovo radimo Pa ako pogledate hex dump:<br />
004075B8 >9E 16 E6 77 72 AC E7 77 ...wr..w<br />
004075C0 >CB 15 E8 77 FD 98 E7 77 ...w...w<br />
videcete da je DWORD na adresi 004075B8 u stvari pointer ka adresi<br />
77E6169E, koja je sigurno lokacija APIja u kernel32.dll fajlu. Posle<br />
postavljanja memorijskog break-pointa na adresu 004075B8 i klika na F9:<br />
004078F5 74 28 JE SHORT crackme_.0040791F<br />
004078F7 43 INC EBX<br />
004078F8 8DB5 6DFEFFFF LEA ESI,DWORD PTR SS:[EBP-193]<br />
004078FE 8B16 MOV EDX,DWORD PTR DS:[ESI]<br />
00407900 56 PUSH ESI<br />
00407901 51 PUSH ECX<br />
00407902 53 PUSH EBX<br />
00407903 52 PUSH EDX<br />
00407904 56 PUSH ESI<br />
00407905 FF33 PUSH DWORD PTR DS:[EBX]<br />
00407907 FF73 04 PUSH DWORD PTR DS:[EBX+4]<br />
0040790A 8B43 08 MOV EAX,DWORD PTR DS:[EBX+8]<br />
0040790D 03C2 ADD EAX,EDX<br />
0040790F 50 PUSH EAX<br />
00407910 FF95 11FFFFFF CALL NEAR DWORD PTR SS:[EBP-EF] ; kernel32.VirtualProtect<br />
00407916 5A POP EDX<br />
00407917 5B POP EBX<br />
00407918 59 POP ECX<br />
00407919 5E POP ESI<br />
0040791D ^ E2 E1<br />
LOOPD SHORT crackme_.00407900<br />
0040791F 61 POPAD<br />
00407920 9D POPFD<br />
00407921 - E9 9A99FFFF JMP crackme_.004012C0