INTRODUCTION TO THE CRACKING WITH OLLYDBG FROM CRACKLATINOS P3

Chia sẻ: Duong Hau | Ngày: | Loại File: PDF | Số trang:14

0
95
lượt xem
19
download

INTRODUCTION TO THE CRACKING WITH OLLYDBG FROM CRACKLATINOS P3

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hà Noi trời lạ nh nhưng cũng không the át được không khí hừng hực lửa t ại trien lãm Giảng Võ.Hàng nghìn con người hò hét, lac giat xé tan bâu không khí l nh leo. Sau mot đêm “phê” cùng R0ck, toàn thân met nhoài, co đau đên hôm nay m=i đ tôi l i tiêp

Chủ đề:
Lưu

Nội dung Text: INTRODUCTION TO THE CRACKING WITH OLLYDBG FROM CRACKLATINOS P3

  1. INTRODUCTION TO THE CRACKING WITH OLLYDBG FROM CRACKLATINOS (_kienmanowar_) I. L i nói đ u Hà N i tr i l nh nhưng cũng không th át đư c không khí h ng h c l a t i tri n lãm Gi ng Võ.Hàng nghìn con ngư i hò hét, l c gi t xé tan b u không khí l nh l o. Sau m t đêm “phê” cùng R0ck, toàn thân m t nhoài, c đau đ n hôm nay m i đ tôi l i ti p t c dành th i gian đ h u ti p các b n ph n ba trong lo t tut v Ollydbg. Ph n ba này s t p trung gi i thi u t i các b n ý nghĩa c a các thanh ghi, các c thư ng đư c s d ng trong quá trình crack hay reverse chương trình. Tôi s c g ng đúc k t l i sao cho các b n d dàng ti p c n nhanh nh t có th … 0k13! L3t’s R0ck w1th m3 ☺ II. Gi i thi u chung Thông tin đư c lưu gi bên trong b vi x lý trong các thanh ghi. Các thanh ghi đư c phân lo i theo ch c năng c a chúng. B vi x lý d a vào s tr giúp c a các thanh ghi đ th c thi m t chương trình. Các thanh ghi đư c phân lo i như sau : thanh ghi d li u ch a d li u cho m t thao tác, thanh ghi đ a ch ch a đ a ch c a l nh hay c a d li u và thanh ghi tr ng thái lưu tr ng thái hi n th i c a b vi x lý. ð i v i b x lý 8086 có b n thanh ghi d li u công d ng chung, các thanh ghi đ a ch đư c chia ra làm các thanh ghi đo n, thanh ghi con tr , thanh ghi ch s ; thanh ghi tr ng thái còn đư c g i là các c . Khi m i làm quen v i các thanh ghi tôi khuyên b n không nên h c thu c h t các ch c năng c a các thanh ghi li n m t lúc, các b n nên làm quen v i các thanh ghi d n d n trong quá trình h c cũng như trong lúc th c hành v i Ollydbg. III. Chi ti t v các thanh ghi và công d ng 1. Thanh ghi ESP : Thanh ghi đ u tiên mà tôi mu n gi i thi u t i các b n đó chính là thanh ghi ESP (con tr ngăn x p – Stack pointer). Thanh ghi này luôn tr t i đ nh hi n th i c a ngăn x p. Các b n xem hình minh h a dư i đây : 1
  2. Như các b n th y trên hình, giá tr c a thanh ghi ESP là 0x0013FFC4h, quan sát t i c a s Stack các b n s th y giá tr này đang n m t i đ nh c a Stack. Thanh ghi ESP tr t i đ a ch vùng nh nơi mà thao tác stack ti p theo s đư c th c hi n. 2. Thanh ghi EIP : ð truy c p đ n các l nh, 8086 s d ng thanh ghi EIP (Instruction Pointer). ðây là m t thanh ghi r t quan tr ng, nó đư c c p nh t m i khi có m t l nh đư c th c hi n đ sao cho nó luôn tr đ n l nh ti p theo. Khác v i các thanh ghi khác EIP không th b tác đ ng tr c ti p b i các l nh, do đó trong m t l nh chúng ta s th y thư ng không có m t thanh ghi EIP như m t toán h ng. Ví d quan sát c a s Registers trong Olly chúng ta th y như sau : 2
  3. Chúng ta th y r ng thanh ghi EIP mang giá tr là 0x00401000h, đi u này có nghĩa là đ a ch 0x00401000h chính là đ a ch c a câu l nh ti p theo s đư c th c hi n. Chúng ta quan sát trên c a s CPU s th y đư c câu l nh t i đ a ch trên là câu l nh gì : T i c a s CPU, chúng ta nh n F8 đ th c hi n câu l nh đ u tiên t i đ a ch 0x00401000h và quan sát trên c a s Register xem thanh ghi EIP s thay đ i giá tr như th nào ? Chúng ta s th y đư c như sau : Oh, giá tr thanh ghi đã thay đ i thành 0x00401002h, đó chính là đ a ch c a câu l nh ti p theo s đư c th c hi n khi b n quan sát trong màn hình CPU. 3. Thanh ghi EBP : ðây cũng là m t thanh ghi không kém ph n quan tr ng, thanh ghi EBP (Con tr cơ s - Base Pointer) ch y u đư c s d ng đ truy nh p d li u trong ngăn x p. Tuy nhiên khác v i thanh ghi ESP, thanh ghi EBP còn đư c s d ng đ truy nh p d li u trong các đo n khác. Thanh ghi EBP thư ng đư c k t h p v i ESP khi chúng ta b t g p m t l i g i hàm, thì trư c khi hàm này đư c th c hi n đ a ch tr v c a chương trình (t c là đ a ch c a câu l nh ti p theo dư i l i g i hàm) s đư c c t vào Stack, và bên trong thân hàm giá tr hi n th i c a thanh ghi EBP s đư c đ y vào Stack, b i vì giá tr c a thanh ghi EBP ph i đư c thay đ i đ có th tham chi u t i các giá tr trên Stack. 3
  4. 4. Các thanh ghi d li u EAX, EBX, ECX, EDX: ðây là 4 thanh ghi đa năng 32 bit, đi u đ c bi t là khi c n ch a d li u 16 bit ta có các thanh ghi sau AX, BX, CX, DX và đ c bi t hơn khi ta c n ch a d li u 8 bit thì các thanh ghi AX, BX, CX, DX này có th phân tách ra thành 2 thanh ghi 8 bit cao và th p đ làm vi c đ c l p, đó là các thanh ghi AH và AL, BH và BL, CH và CL, DH và DL. B n thanh ghi này ngoài ý nghĩa là nh ng thanh ghi công d ng chung thì nó còn mang nh ng ý nghĩa và ch c năng đ c bi t sau : • Thanh ghi EAX (thanh ghi ch a) : thư ng đư c s d ng trong các l nh s h c, logic và chuy n d li u. Trong các thao tác nhân và chia thư ng s d ng đ n thanh ghi này. • Thanh ghi EBX (thanh ghi cơ s ) : thanh ghi này cũng đóng vai trò là thanh ghi đ a ch . • Thanh ghi ECX (thanh ghi đ m) : thanh ghi này thư ng đư c s d ng như m t b đ m s l n l p. Ngoài ra nó cũng đư c s d ng như là bi n đ m trong các l nh d ch hay quay các bit. • Thanh ghi EDX (thanh ghi d li u) : thanh ghi này cùng v i thanh ghi EAX tham gia vào thao tác c a phép nhân ho c phép chia. Bên c nh đó nó cũng thư ng đư c s d ng trong các thao tác vào ra. 5. Các thanh ghi ch s ESI, EDI : Hai thanh ghi ESI (ch s ngu n) và EDI (ch s đích) thư ng đư c s d ng trong các thao tác làm vi c v i chu i ho c m ng. Trong Ollydbg như các b n đã làm quen trong các bài trư c có m t c a s cho chúng ta quan sát tr ng thái hi n th i c a t t c các thanh ghi, đó chính là c a s Registers: 4
  5. Nh ng thanh ghi này v i ch cái E đ u cho chúng ta bi t đư c chúng là nh ng thanh ghi 32 bits. Trong hình minh h a này các b n th y Ollydbg bi u di n n i dung các thanh ghi d ng Hexa. L y thanh ghi EAX làm ví d , ta th y giá tr c a nó là 0x00000000h đây là giá tr nh nh t c a m t thanh ghi, giá tr l n nh t mà thanh ghi này có th lưu tr là 0xFFFFFFFFh, n u như chúng ta chuy n nó sang d ng nh phân thì chúng ta s có đư c như sau : Chúng ta th y r ng khi chuy n sang d ng nh phân s bi u di n đúng 32 bits, 32 bits này s có th mang m t trong hai giá tr 0 ho c 1. Tuy nhiên trong l p trình ASM không ph i lúc nào chúng ta cũng s d ng h t 32 bits, đ tránh lãng phí chúng ta có th thao tác, tính 5
  6. toán ch trên m t ph n c a các thanh ghi này, trong trư ng h p này c a tôi tôi có th chia nh thanh ghi EAX ra. Ta s làm m t ví d c th : Gi s thanh ghi EAX tôi mu n thay đ i giá tr c a nó thành là 0x12345678h. ð u tiên ta load crackme vào trong Ollydbg, sau khi analyse xong chúng ta s d ng l i t i EP (Entry Point) c a chương trình. Bây gi tôi s thay đ i giá tr c a thanh ghi EAX, chu t ph i t i thanh ghi này và ch n Modify : Ch nh s a l i giá tr c a thanh ghi EAX như hình dư i đây : K t qu sau khi ch nh s a : 6
  7. Khi b n thay đ i giá tr c a m t thanh ghi thì k t qu ch nh s a s đư c đánh d u màu đ . Như tôi đã nói trên nhi u khi chúng ta không s d ng h t 32 bits trong quá trình tính toán mà ta ch c n m t ph n c a nó thôi. Thông thư ng ngư i ta thư ng s d ng thanh ghi AX (16 bits) - m t ph n c a thanh ghi EAX. Do AX là thanh ghi 16 bits nên nó chi m ½ trên t ng s bits, v y ta có giá tr c a thanh ghi AX là 0x5678h. ð bi t đư c k t qu này có chính xác hay không, chúng ta s s d ng Command Bar : ðúng như nh ng gì chúng ta đã l p lu n trên, giá tr c a AX là 0x5678h. Tuy nhiên b n thân thanh chi AX cũng l i đư c phân tách thành các thanh ghi AH (8 bits cao) và AL (8 bits th p). Ta th quan sát giá tr c a thanh ghi AL : T ng k t l i ta có m t hình nh minh h a tr c quan như sau : T t c nh ng thanh ghi đa năng khác cũng s đư c phân tách tương t như thanh ghi EAX. 6. Thay đ i giá tr c a nh ng thanh ghi : ph n trên, các b n đã quan sát th y quá trình thay đ i giá tr c a m t thanh ghi , ví d như thanh ghi EAX di n ra r t đơn gi n, g n nh . Cách th c thay đ i giá tr b ng cách nh p chu t ph i t i thanh ghi đó và ch n Modify. Chúng ta s làm thêm m t ví d n a, như các b n đã bi t thanh ghi EIP đư c s d ng đ tr t i l nh ti p theo s p đư c th c hi n, gi đây tôi mu n thay đ i n i dung c a thanh ghi này thì ph i làm th nào ? Gi s khi ta load crackme vào trong Olly thì ta có đư c như sau : 7
  8. Trong hình minh h a này thì thanh ghi EIP mang giá tr là 0x00401000h, đi u này có nghĩa là câu l nh t i đ a ch đó s đư c th c hi n. Nhưng n u ta mu n thay đ i giá tr EIP đ cho chương trình s th c hi n m t câu l nh đ a ch khác ch không ph i là câu l nh t i đ a ch 0x00401000h thì làm th nào? R t đơn gi n, chúng ta ch vi c ch n dòng l nh đó nh n chu t ph i và ch n New origin here, ngay l p t c giá tr c a EIP s thay đ i theo : IV. Các c (Flags) hay đư c s d ng Trong ph n ti p theo c a bài vi t này, chúng ta s làm quen v i các c . Trong c a s Registers thì các c s n m bên dư i các thanh ghi ☺ 8
  9. Trong hình trên b n quan sát s th y có các c sau : C, P, A, Z, S, T, D và O.Thêm vào đó các b n cũng th y là các c này ch có 1 bit mà thôi do đó giá tr c a nó ch có th là 0 ho c 1. Các c này đư c đ t trong thanh ghi c và chúng đư c phân chia ra thanh hai lo i là c tr ng thái và c đi u khi n. C tr ng thái ph n ánh k t qu c a các phép tính. C đi u khi n đư c s d ng đ cho phép ho c không cho phép m t thao tác nào đó c a b vi x lý. Nói tóm l i là m i m t thao tác c a CPU đ u d a vào các c đ ra quy t đ nh. Chúng ta s đi vào xem xét t ng c m t. a. C tr ng thái : C tràn (Overflow Flag): C OF = 1 khi x y ra hi n tư ng tràn, thư ng là khi k t qu là m t s bù hai vư t ra ngoài gi i h n bi u di n dành cho nó. ð minh h a v c OF các b n m Ollydbg và load crackme vào. Sau đó ti n hành s a giá tr c a thanh ghi EAX = 0x7FFFFFFFh (giá tr c a s dương l n nh t), ta có đư c như sau : Bây gi chúng ta s th c hi n c ng thêm 1 vào thanh ghi EAX, chúng ta s nghĩ ngay đ n r ng giá tr c a thanh ghi EAX sau khi c ng m t s là 0x80000000h (giá tr này tương đương v i s âm). ð th c hi n đư c phép c ng này ta s làm như sau : Chu t ph i t i l nh mà b n mu n thay đ i và ch n Assemble. 9
  10. Ta có đư c như sau : Thay câu l nh Push 0 thành câu l nh Add EAX, 1. Sau khi thay đ i xong chúng ta quan sát k t qu thay đ i trên c a s CPU. Trư c khi tôi và các b n th c thi câu l nh ADD EAX,1 – chúng ta s quan sát giá tr c a c a c OF. Ta có đư c k t qu như sau : Okie, lúc này giá tr c a c tràn O v n đang là 0. Chúng ta s th th c thi câu l nh Add EAX,1 xem th nào. Nh n F8 đ th c thi l nh và quan sát c a s Registers : 10
  11. Note: nh n xét v tràn v i s có d u là n u c ng 2 s cùng d u mà k t qu có d u ngư c l i thì có tràn x y ra. Khi ta c ng hai s khác d u thì không bao gi có tràn. C ch n l (Parity Flag): C này ph n ánh tính ch n l c a t ng s bit 1 có trong k t qu . C PF = 1 khi t ng s bit 1 trong k t qu là ch n – parity ch n.Nó b ng không trong trư ng h p ngư c l i.L y ví d c th như sau. Chúng ta có thanh ghi EAX = 0x0h,c PF lúc đ u b ng 1, chúng ta s th c hi n l nh c ng EAX v i 1 và xem k t qu giá tr trên c PF. Sau khi th c hi n l nh ta có đư c như sau : Ok chúng ta th y r ng PF đã b ng 0 b i vì giá tr thanh ghi EAX = 1, mà t ng s bit 1 trong thanh ghi EAX lúc này là 1, v y theo đ nh nghĩa thì giá tr PF = 0 là hoàn toàn chính xác. Quay tr l i v n đ , lúc này ta chu t ph i t i đ a ch 0x00401000 và ch n New Origin. Nh n F8 đ th c hi n l i câu l nh. Chúng ta có đư c k t qu như sau : 11
  12. Ta v n th y c PF gi nguyên k t qu . ðó là b i vì thanh ghi EAX có giá tr là 0x02 (t ng s bit 1 là l ). L i làm như trên và th c hi n l i câu l nh add EAX,1. Quan sát hình minh h a dư i đây : C Zero (Parity Flag): C này đư c thi t l p 1 khi k t qu b ng không và ngư c l i. C này khá quan tr ng đ i v i vi c crack. ð minh h a cho c này chúng ta v n s s d ng l nh Add EAX, 1 nhưng l n này chúng ta s thay l i giá tr c a thanh ghi EAX thành 0xFFFFFFFF (-1). Nh n F8 đ th c hi n câu l nh add, ta s có đư c thông tin như sau : Khà khà, do k t qu c a phép c ng thì thanh ghi EAX có giá tr là 0x0h cho nên c Z s đư c b t lên thành 1. C d u (Sign Flag): C SF đư c thi t l p là 1 khi bít msb c a k t qu b ng 1 có nghĩa là k t qu âm n u b n mu n làm vi c v i s có d u. Tôi s minh h a v c SF như sau, trong Olly chúng ta thay giá tr c a thanh ghi EAX thành 0xFFFFFFF8 (=-8). Th c hi n câu l nh add eax, 1 đ tính l i giá tr c a thanh ghi EAX. 12
  13. Th c thi l nh, k t qu c a thanh ghi EAX s là 0xFFFFFFFF9 (=-7) : C nh (Carry Flag): C CF đư c thi t l p 1 khi có nh ho c mư n t bit msb. b.C đi u khi n Có 3 c đư c s d ng trong vi c đi u khi n đó là c T. I và c D. C T(c b y) b ng 1 thì CPU làm vi c ch đ ch y t ng l nh –ch đ này thư ng đư c dùng khi c n tìm l i trong chương trình.) C I (c ng t) , c này b ng 1 thì CPU cho phép các yêu c u ng t đư c tác đ ng. C D (c hư ng), c này b ng 1 khi CPU làm vi c v i chu i kí t theo t t t ph i sang trái. Okie v y là ph n 3 đ n đây là k t thúc, trong ph n này tôi có tham kh o thêm m t s tài li u liên quan t i l p trình ASM. Các b n có th tham kh o thêm các tài li u liên quan đ có đư c m t cái nhìn sâu hơn. Best Regards _[Kienmanowar]_ --++--==[ Greatz Thanks To ]==--++-- My family, Computer_Angel, Moonbaby , Zombie_Deathman, Littleboy, Benina, QHQCrker, the_Lighthouse, Merc, Hoadongnoi, Nini ... all REA‘s members, TQN, HacNho, RongChauA, Deux, tlandn, light.phoenix, dqtln, ARTEAM .... all my friend, and YOU. --++--==[ Thanks To ]==--++-- iamidiot, WhyNotBar, trickyboy, dzungltvn, takada, hurt_heart, haule_nth, hytkl v..v.. các b n đã đóng góp r t nhi u cho REA. Hi v ng các b n s ti p t c phát huy ☺ 13
  14. I want to thank Teddy Roggers for his great site, Reversing.be folks(especially haggar), Arteam folks(Shub-Nigurrath, MaDMAn_H3rCuL3s) and all folks on crackmes.de, thank to all members of unpack.cn (especially fly and linhanshi). Great thanks to lena151(I like your tutorials). And finally, thanks to RICARDO NARVAJA and all members on CRACKSLATINOS. >>>> If you have any suggestions, comments or corrections email me: kienmanowar[at]reaonline.net 14
Đồng bộ tài khoản