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.
Inline patching: ASPack 1.x - 2.x<br />
Posto je pored UPXa veoma cesto koriscen packer je i ASPack. Stoga<br />
je izuzetno bitno naci nacin kako patchovati ovaj paker tako da se velicina<br />
patchovanog fajla ne poveca ni za jedan bajt. Ovo moze izgledati<br />
komplikovano ali ako se drzimo osnovnih principa patchovanja zapakovanih<br />
executable fajlova uspecemo, dakle:<br />
• Pronaci komandu koja se poslednja izvrsava a pripada samom<br />
packeru. Ova komanda se izvrsava odmah pre skoka na otpakovan<br />
OEP stoga nju treba izmeniti tako da ona pokazuje ka nasem<br />
patchovanom kodu.<br />
• Ako ovo prvo ne uspe treba pronaci mesto u kodu posle koga je ceo<br />
kod glavne .code sekcije otpakovan u memoriju i tu treba ubaciti<br />
pointer ka patch kodu.<br />
• Osloboditi mesto za ubaceni kod<br />
• Ubaciti kod za patchovanje<br />
• U slucaju ‘ostecenja’ packerovog koda izvrsiti popravku<br />
• Vratiti kontrolu ili pravom OEPu ili nastaviti sa otpakivanjem koda<br />
Posto znamo da otpakujemo ASPack onda znamo i kako izgledaju poslednje<br />
komande pre prelaska na pravi OEP:<br />
004073B0 /75 08<br />
004073B2 |B8 01000000<br />
004073B7 |C2 0C00<br />
004073BA \68 C0124000<br />
JNZ SHORT crackme_.004073BA<br />
MOV EAX,1<br />
RET 0C<br />
PUSH crackme_.004012C0<br />
004073BF C3 RET<br />
Ovo znaci da bismo trebali da izmenimo poslednju RET komandu u neki skok<br />
ka patch kodu, ali da li je to bas tako Restartujte metu sa CTRL+F2 i<br />
pogledajte sta se to nalazi na adresi:<br />
004073B0 /75 08<br />
004073B2 |B8 01000000<br />
004073B7 |C2 0C00<br />
JNZ SHORT crackme_.004073BA<br />
MOV EAX,1<br />
RET 0C<br />
004073BA \68 00000000 PUSH 0<br />
004073BF C3 RET<br />
Kao sto vidimo kod je veoma slican ali nema onog PUSH 004012C0. Ovo<br />
znaci da se OEP prosledjuje na ovu adresu, a ovo znaci da se ovaj deo koda<br />
ne moze patchovati! Dakle potrebno je pronaci neki drugi deo koda koji se<br />
nece menjati i kojem ce se pristupiti odmah nakon otpakivanja glavne<br />
sekcije. Da biste ovo mesto nasli mozete traziti modifikaciju bajtova pomocu<br />
Memory Access opcije u Ollyju, ali posto bi ovo objasnjenje bilo presiroko<br />
preci cemo odmah na patchovanje. Dakle pronadjite ovo u kodu fajla<br />
crackme.aspacked.original.exe<br />
00407180 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS><br />
00407182 8BC8 MOV ECX,EAX<br />
00407184 83E1 03 AND ECX,3<br />
00407187 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[><br />
Izmenite ga u sledeci kod:<br />
00407180 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS><br />
00407182 - E9 AC91FFFF JMP inline_a.00400333 <br />
Sta smo ovde uradili Jednostavno smo zamenili komande MOV ECX,EAX i<br />
AND ECX,3 komandom koja ce izvrsiti patch naseg koda. Ali zasto bas adresa<br />
00400333 Zato sto se ova adresa nalazi u PE headeru fajla gde ima vise<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 259 <strong>of</strong> 293