1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracker Handbook 1.0 part 381 potx

5 110 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 160,64 KB

Nội dung

LEA EAX,DWORD PTR SS:[EBP-124] PUSH EAX PUSH 7 CALL kernel32.GetCurrentProcess < Here is trick! This API returns FFFFFFFF. Change EAX to 0. PUSH EAX CALL DWORD PTR DS:[<&ntdll.NtQueryInform>; ntdll.ZwQueryInformationProcess TEST EAX,EAX Cho dù có khác, các bạn cũng tìm được điểm giống, là cái này : PUSH7 CALL kernel32.GetCurrentProcess Rồi sửa EAX = FFFFFFFFh thành EAX = 0. 2. OEP và stolen Code: Không có cách tổng quát để tìm ra được đúng OEP (nếu có cách tổng quát thì có thể viết script tìm OEP.) Thay vào đó là tôi đã theo vết và kể cả việc thử nghiệm nhiều lần mã, exceptions, breakpoints. Tôi đã tìm ra nơi mà những lệnh nhảy imports được định vị, khi crackme được unpack bởi trình bảo vệ, tôi thủ đặt BP trên hầu hết khối Import (không thành vấn đề vì crackme này nhỏ). Ừm, bạn nên check tất cả options exception trong Olly, rồi run crackme: Sau đó, nhìn vào cửa sổ log: Log data Message Access violation when reading [00000000] Access violation when reading [FFFFFFFF] Module C:\WINDOWS\system32\advapi32.dll Access violation when reading [FFFFFFFF] Breakpoint at kernel32.7C85994E INT3 command at ntdll.DbgBreakPoint Access violation when executing [00000000] Breakpoint at kernel32.7C862C10 Illegal instruction Integer division by zero Breakpoint at USER32.77D6F3DC Access violation when executing [00000000] Breakpoint at kernel32.7C862C10 Integer division by zero Access violation when reading [00000000] Access violation when reading [8003F41E] Integer division by zero Access violation when reading [00000000] Access violation when reading [FFFFFFFF] Access violation when reading [FFFFFFFF] Access violation when reading [8003F418] Illegal instruction Integer division by zero Breakpoint at kernel32.7C812E10 INT3 command at 00396555 Integer division by zero Integer division by zero Integer division by zero Integer division by zero Integer division by zero Integer division by zero Illegal instruction Integer division by zero < This one. New thread with ID 00000304 created Breakpoint at kernel32.7C85994E Ngoại lệ cuối cùng là “Integer division by zero”. Restart lại Olly, uncheck option “Integer division by zero”, Vì thế khi run Olly, ta sẽ được ngắt trên Ngoại lệ đó. Sau vài lần ta sẽ ở đây: F7F0 DIV EAX < Exception. 55 PUSH EBP 8BEC MOV EBP,ESP 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 6A 00 PUSH 0 68 CC971025 PUSH 251097CC 6A 00 PUSH 0 FF50 18 CALL DWORD PTR DS:[EAX+18] 5D POP EBP C2 0800 RETN 8 55 PUSH EBP 8BEC MOV EBP,ESP 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 8B00 MOV EAX,DWORD PTR DS:[EAX] 3D 1D0000C0 CMP EAX,C000001D 74 0E JE SHORT UnPackMe.00415FD0 3D 940000C0 CMP EAX,C0000094 75 41 JNZ SHORT UnPackMe.0041600A B9 AB92AD01 MOV ECX,1AD92AB EB 05 JMP SHORT UnPackMe.00415FD5 B9 4E90AD01 MOV ECX,1AD904E E8 00000000 CALL UnPackMe.00415FDA 5A POP EDX 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] 81EA 893CBA00 SUB EDX,0BA3C89 8D940A EFAB0CFF LEA EDX,DWORD PTR DS:[EDX+ECX+FF0CABEF] 8990 B8000000 MOV DWORD PTR DS:[EAX+B8],EDX 33C9 XOR ECX,ECX 8948 04 MOV DWORD PTR DS:[EAX+4],ECX 8948 08 MOV DWORD PTR DS:[EAX+8],ECX 8948 0C MOV DWORD PTR DS:[EAX+C],ECX 8948 10 MOV DWORD PTR DS:[EAX+10],ECX C740 18 55003333 MOV DWORD PTR DS:[EAX+18],33330055 33C0 XOR EAX,EAX 5D POP EBP C3 RETN 33C0 XOR EAX,EAX 40 INC EAX 5D POP EBP C3 RETN 33C0 XOR EAX,EAX 8D44C0 03 LEA EAX,DWORD PTR DS:[EAX+EAX*8+3] 010424 ADD DWORD PTR SS:[ESP],EAX C3 RETN Lúc này section mã được unpack hoàn toàn. Tôi đặt một memory breakpoints trên section mã và run chúng ta sẽ tới được “FALSE OEP”. Xem xét một chút. Đầu tiên, crackme này có section mã là 00404000, thứ hai là Obsidium luôn nhảy tới ‘FALSE OEP” dù cho nó không “chôm” BYTES, nó sẽ nhảy tới những mã nhị phân ở xa. Chúng ta hãy kiểm tra ngăn xếp, chúng ta sẽ thấy SEH handler mà sẽ điều khiển ngoại lệ: 0012FF94 0012FFE0 Pointer to next SEH record 0012FF98 00415FB3 SE handler Ta đặt breakpoints tại 0x00415FB3, Shift+F9, sau đó F8 đến RETN chúng ta sẽ tới ntdll.dll: Sau đó, chúng ta đặt memory breakpoints trên section của Obsidium: Tại section 0041500. Sau đó ,Shift+F9, ta tới đây: F7 vào địa chỉ 004161EB: Trrace F8 liên tục, các bạn sẽ thấy có một vòng lặp giải mã : Trace ra khỏi vòng lặp bằng cách F2 tại 004162CD RETN, rối Shift+F9 tới RETN, F7, ta đến nơi này: . EAX,C 000 009 4 75 41 JNZ SHORT UnPackMe .00 416 00 A B9 AB92AD 01 MOV ECX,1AD92AB EB 05 JMP SHORT UnPackMe .00 415 FD5 B9 4E90AD 01 MOV ECX,1AD 904 E E8 00 000 000 CALL UnPackMe .00 415 FDA 5A POP EDX 8B45 10 . C2 08 00 RETN 8 55 PUSH EBP 8BEC MOV EBP,ESP 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 8B 00 MOV EAX,DWORD PTR DS:[EAX] 3D 1D 000 0C0 CMP EAX,C 000 001 D 74 0E JE SHORT UnPackMe .00 415 FD0 3D 9 400 00C0. kernel32.7C862C 10 Integer division by zero Access violation when reading [00 000 000 ] Access violation when reading [ 800 3F41E] Integer division by zero Access violation when reading [00 000 000 ] Access

Ngày đăng: 03/07/2014, 18:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN