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

Cracker Handbook 1.0 part 381 potx

5 110 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Breakpoint at kernel32.7C85994E INT3 command at ntdll.DbgBreakPoint Access violation when executing [00000000] Breakpoint at kernel32.7C862C10 Illegal instruction Integer division by

Trang 1

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]

Trang 2

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

Trang 3

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

Trang 4

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

Trang 5

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:

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN