Trong ph n này chúng ta s m x s tác ng c a m tch ng trình Packer n gi n i v i ng d ng c a chúng ta và c p t i 2 ph ng pháp chính c a vi c Patching m t file th c thi ã b Packed b ng cách Unpacking ho c inline-patching. Chúng ta s s d ng Packer UPX 1.25 b i vì ây th c s là m t ch ng trình nén file th c thi và không s d ng b t kì m t m t c ch b o v cao c p nào.Tác gi c a ch ng trình này là Marcus & Laszlo.
u tiên chúng ta dùng PeiD Scan file c a chúng ta (file ban u ch a b Packed) :
Ti p theo chúng ta s pack ng d ng c a chúng ta b ng ch ng trình UPX. ây là ch ng trính s d ng
giao di n command line do ó chúng ta ph i m nó trong DOS , sau ó chúng ta gõ nh sau : "upx
Sau ó chúng ta hãy ý r ng kích th c ch ng trình c a chúng ta ã gi m xu ng t 225kb xu ng còn 91kb và trong PeiD chúng ta quan sát th y nh sau :
S d ng ch ng trình PEBrowse Pro chúng ta quan sát th y trình Packer s thêm vào app c a chúng ta 3
sections là UPX0, UPX1 and .rsrc. Resource section bây gi ch a import directory nh ng cho m i DLL
thì ch có duy nh t m t ho c 2 hàm c imported các hàm khác ã bi n m t :
Chú ý r ng section .rsrc ã c gi l i tên g c c a nó m c dù th m chí các ph n khác ã b thay i.
Thú v n a là this dates back to a bug trong hàm LoadTypeLibEx trong oleaut32.dll in Win95 mà
rsrc ã s d ng tìm ki m và n p resource section. i u này gây ra m t l i n u section b i tên. (This created an error if the section was renamed. Although this bug has been fixed it seems most packers do not rename the rsrc section for compatibility reasons)
B ng vi c m ng d ng c a chúng ta trong LordPE và nh n vào Compare button chúng ta có th m b n g c c a ng d ng và quan sát s thay i c a các headers :
Khi chúng ta m ng d ng trong Olly , chúng ta s nh n c m t Message Box thông báo r ng file th c thi c a chúng ta ã b packed. Ch vi c nh n Ok và chúng ta s t i EntryPoint :
Trình Packer UPX ã nén ng d ng c a chúng ta và ã thêm the code b ng m t stub có ch a gi i thu t decompress.EntryPoint c a ng d ng ã b thay i b t u o n stub và sau ó khi stub th c hi n xong công vi c c a nó , h ng th c thi c a ch ng trình s nh y v original entrypoint (OEP) b t u ch ng trình bây gi ã c unpacked c a chúng ta.
Lý do c n b n i phó v i nó là cho ch ng trình Sub decompress ng d ng c a chúng ta vào trong b nh và sau ó dump vùng nh này vào m t file có c b n sao c a ch ng trình ã c
unpacked. Tuy nhiên ng d ng s không th c thi theo úng cách c a nó ó là b i vì file c dumped s có các sections riêng c a nó c aligned to memory page boundaries ch không ph i file alignment values, do ó entrypoint s v n tr t i decompression stub và Import directory rõ ràng là sai và s c n ph i ch nh s a l i.
Chú ý r ng trong Olly entrypoint c a chúng ta n m t i câu l nh u tiên là PUSHAD. Câu l nh
PUSHAD này là vi t t t c a PUSH ALL DOUBLE , th c hi n vi c l u t t c n i dung c a các thanh ghi
32 bit vào trong Stack , b t u t EAX cho n EDI.Theo ó Stub s th c hi n công vi c c a nó và sau
ó k t thúc b ng m t câu l nh POPAD tr c l nh nh y t i OEP. POPAD sao chép l i n i dung c a các
thanh ghi t Stack. i u này có ngh a là stub s ph i ph c h i l i m i th và exited without trace tr c khi th c s Run ng d ng. Vì v y ph ng pháp này là ý t ng cho nhi u packer thông d ng khác ví d nh ASPack.
T th i i m c a câu l nh PUSHAD u tiên, nh ng n i dung c a Stack t i level ó ph i c hoàn toàn không c ng t i cho t i khi g p c câu l nh POPAD.N u nh chúng ta t m t Hardware