tailieunhanh - Cracking part 32
1. Tạo lỗi ngoại lệ và nhảy tới bộ quản lý lỗi khi và chỉ khi chương trình không bị debug 2. Trong bộ xử lí, lấy cấu trúc EXCEPTION_POINTERS từ stack 3. | 1. Tạo lỗi ngoại lệ và nhảy tới bộ quản lý lỗi khi và chỉ khi chương trình không bị debug 2. Trong bộ xử lí lấy cấu trúc EXCEPTION POINTERS từ stack 3. Từ cấu trúc EXcEpTION_POINTERS lấy cấu trúc CONTEXT 4. Thay đổi regEIP của cấu trúc CONTEXT sang vị trí lệnh mà chương trình sẽ thực thi tiếp. 5. Đặt cơ EXCEPTION_CONTINUE_EXECUTION vào EAX 6. Phục hồi stack và tiếp tục thực thi chương trình. Code minh họa Code .586 .model flat stdcall option casemap none include d masm32 IN CLUDE W include d masm32 IN CLUDE include d masm32 IN CLUDE includelib d masm32 lib includelib d masm32 lib .data strCaption db OllyDbg Detector 0 strNotFound db OllyDbg NOT found 0 .code ExcpHandler proc mov eax dword ptr esp 4 eax EXCEPTION_POINTERS mov eax eax 4 eax CONTEXT assume eax ptr CONTEXT mov eax .regEip offset safe_address Change regEip pushad invoke MessageBox 0 addr strNotFound addr strCaption 0 popad xor eax eax Set EXCEPTION_CONTINUE_EXECUTION dec eax retn 4 Normalize stack and return ExcpHandler endp start invoke SetUnhandledExceptionFilter offset ExcpHandler mov ebx dword ptr 0FFFFFFFFh Exception is here safe_address invoke ExitProcess 0 end start Cách 4 APi Redirection Một cách khác mà tôi nghĩ ra đó là dựa vào cơ chế quản lý các hàm api được gọi trong chương trình debug của Ollydbg. Oleh Yuschuk tác giả của OllyDbg đã sử dụng api redirection khi chương trình bị debug gọi hàm api. Có thể xem vd dưới đây Code 00401000 PUSH FileName 00401005 CALL JMP. LoadLibraryA -- 0040105C JMP DWORD PTR DS 402004 JMP DWORD PTR DS -- 87FF4120 PUSH BFF776D0 PUSH 87FF4125 JMP Điều này có nghĩa là tác giả đã load bảng Import Table từ chương trình bị debug và sau đó điền các giá trị mới vào IAT redirect các hàm API gốc qua một buffer chứa hàm gọi tới địa chỉ API thật. Quan trọng nhất là tác giả OllyDbg đã mô phỏng hàm .
đang nạp các trang xem trước