Trang 1 Kỹ thuật lập trình Hook NhatPhuongLe www reaonline net Kỹ thuật lập trình Hook s Reverse Engineering Association Win32 Programming Tutorials For more updated info, please check http //nhatphuo[.]
Win32 Programming Tutorials Kỹ thuật lập trình Hook Kỹ thuật lập trình Hook s NhatPhuongLe For more updated info, please check www.reaonline.net Reverse Engineering Association http://nhatphuongle.spaces.live.com Trang Kỹ thuật lập trình Hook MỤC LỤC I Các khái niệm Sự khác biệt lập trình Windows DOS Lập trình Windows a) Thông điệp hàng đợi thông điệp b) Lập trình kiện II Tìm hiểu Hook Hook gì? Phân loại Hook a) Phân loại theo phạm vi hoạt động b) Phân loại theo thông điệp xử lý 10 Thủ tục Hook – Chuỗi Hook 12 a) Thủ tục Hook 12 b) Chuỗi Hook 13 III Minh họa cách lập trình Hook 15 Cài đặt thủ tục Hook 15 Chuyển thông điệp đến thủ tục Hook 16 Hủy bỏ cài đặt Hook 17 NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook I Các khái niệm Sự khác biệt lập trình Windows DOS Windows DOS Lập trình kiện dựa vào thơng điệp Thực theo định Đa nhiệm Đơn nhiệm Hỗ trợ 32 bits hay Ứng dụng 16 bits Hỗ trợ nhiều cơng nghệ DLL, OLE, DDE, Khơng có COM, OpenGL, DirectX Lập trình Windows a) Thông điệp hàng đợi thông điệp Nhắc đến Windows, người ta thường nghĩ hệ điều hành (HĐH) dễ sử dụng, đó, tương tác người dùng với ứng dụng với thành phần tiện ích Windows thơng qua giao diện đồ họa (GUI) thao tác bàn phím chuột vơ đơn giản Một câu hỏi đặt là: “Các ứng dụng làm để phân loại, lưu giữ phản hồi lại tương tác cho người dùng?” Đối với Windows vấn đề giải cách trọn vẹn: HĐH đưa chế thông điệp (message) hàng đợi thông điệp (message queue) với tập hợp cấu trúc liệu hàm API hỗ trợ ứng dụng việc giao tiếp với người dùng Windows có loại hàng đợi thơng điệp: Hàng đợi hệ thống (system queue) hàng đợi ứng dụng (application queue) Hàng đợi hệ thống hàng đợi dùng chung cho toàn hệ thống, tiến trình chạy chia sẻ hàng đợi Nhiệm vụ hàng đợi hệ thống ghi lại kiện phần cứng (chuột, bàn phím, …) chúng xảy NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook Mỗi kiện nhanh chóng chuyển thành thơng điệp, sau Windows lấy thông điệp từ hàng đợi hệ thống để xem xét chuyển thơng điệp đến chương trình ứng dụng tương ứng Những thơng điệp chuyển đến ứng dụng, chúng tạo thành hàng đợi ứng dụng b) Lập trình kiện Mỗi ứng dụng có hàng đợi ứng dụng khác Một ứng dụng nhận thông điệp từ hàng đợi ứng dụng cách gọi hàm GetMessage, sau lại gọi tiếp TranslateMessage để dịch thông điệp, cuối gọi hàm DispatchMessage để trả lại thông điệp cho Windows Việc lấy thông điệp lặp lặp lại, tạo thành vịng lặp thơng điệp Vịng lặp kết thúc hàm GetMessage trả giá trị thông điệp có định danh WM_QUIT (0x0012) NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook Thơng thường, chặn để xử lý thông điệp có liên quan đến chức ứng dụng, thơng điệp khác giao cho hàm xử lý mặc định làm việc (hàm DefWindowsProc) Để dễ tưởng tượng, ta lấy ví dụ chương trình xử lý thơng điệp bàn phím Khi đó, sơ đồ q trình xử lý kiện bàn phím sau: Trình điều khiển bàn phím (Keyboard Device Driver) thơng dịch mã qt chuyển thành mã phím ảo (vitual-key code), giá trị độc lập thiết bị, định nghĩa hệ thống Sau đó, trình điều khiển tạo thông điệp bao gồm scancode, virtual-key code số thơng tin khác (sự lặp phím, trạng thái phím Alt, Ctrl ) , đặt vào hàng đợi hệ thống Hệ thống lấy thông điệp khỏi hàng đợi hệ thống gửi đến hàng đợi thông điệp ứng dụng Cuối cùng, vịng lặp thơng điệp (Message Loop) lấy thông điệp khỏi hàng đợi ứng dụng chuyển đến hàm xử lý thơng điệp thích hợp để xử lý NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook Ta có sơ đồ hàng đợi thông điệp sau: NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook II Tìm hiểu Hook Hook gì? Hook chế lập trình kiện, cho phép ứng dụng cài đặt hàm giám sát vào q trình lưu chuyển thơng điệp Hay nói cách khác hook chế cho phép chặn kiện (chuột, bàn phím, thơng điệp) trước chúng gửi tới hàng đợi ứng dụng NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook Các hàm dùng để xử lý kiện nhiều trường hợp, chúng thay đổi huỷ bỏ kiện Một điểm quan trọng cần lưu ý hàm hệ điều hành gọi khơng phải chương trình ứng dụng ta gọi Các hàm nhận kiện gọi hàm lọc (filter function) phân loại theo loại kiện mà chúng chặn Ví dụ: hàm lọc chặn kiện chuột khác với hàm lọc chặn kiện bàn phím Trước Windows gọi hàm lọc, hàm lọc phải cài đặt, nghĩa phải gắn với hook Windows (ví dụ hook bàn phím) Gắn hay nhiều hàm lọc vào hook gọi thiết lập hook (setting a hook) Nếu hook có hàm lọc Windows tạo dãy hàm lọc (hook chain) Khi hook có nhiều hàm lọc có kiện xảy bị hook bắt được, Windows gọi hàm lọc dãy hàm lọc Hành động gọi “gọi hook” Ví dụ: hàm lọc gắn vào hook CBT có kiện bị bắt (ví dụ: tạo cửa sổ), Windows gọi hook CBT cách gọi hàm dãy hàm lọc Như vậy, ta có sơ đồ hook sau: NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook Hook có khả can thiệp sâu vào hệ thống, làm cho hệ thống hoạt động chậm chạp chí làm treo hệ thống không xử lý tốt Bới vậy, ta nên dùng hook trường hợp cần thiết phải huỷ bỏ hook không cần dùng đến Để cài đặt gỡ cài đặt hook, chương trình cần dùng hàm SetWindowsHookEx UnhookWindowsHookEx Phân loại Hook a) Phân loại theo phạm vi hoạt động Hook cục (Thread Hook hay Local Hook): hàm giám sát cài đặt vào sau hàng đợi thông điệp ứng dụng (Thread message Queue hay Application Queue), kiểm soát thơng điệp tiến trình hay ứng dụng cụ thể xác định lúc cài đặt thủ tục Hook Hook toàn cục (Global Hook): hàm giám sát cài đặt vào sau hàng đợi thông điệp hệ thống, kiểm sốt tồn tiến trình hệ thống Thủ tục hook toàn cục phải khai báo DLL tách biệt NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook b) Phân loại theo thông điệp xử lý Loại Hook Công dụng Cho phép giám sát thông điệp gởi tới cửa WH_CALLWNDPROC sổ Hệ thống gọi thủ tục Hook WH_CALLWNDPROC trước gởi thông điệp đến cửa sổ đích gọi WH_CALLWNDPROCRET sau thủ tục cửa sổ đích xử lý xong thơng điệp Hook WH_CALLWNDPROCRET truyền trỏ WH_CALLWNDPROCRET có cấu trúc CWPRETSTRUCT tới thủ tục Hook Cấu trúc chứa giá trị trả thủ tục cửa sổ xử Tải FULL (17 trang): https://bit.ly/3qcDOGN lý thông điệp Dự phòng: fb.com/TaiHo123doc.net Windows gọi hàm Hook CBT trước tạo lập, kích hoạt, hủy, thu nhỏ, phóng to, di chuyển, thay đổi kích thước, cửa sổ giao diện; trước hoàn thành lệnh hệ thống; trước hủy bỏ kiện chuột hay bàn phím khỏi hàng đợi hệ thống; trước đặt điều khiển vào input đó; WH_CBT lúc đồng hàng đợi thơng điệp hệ thống Giá trị trả thủ tục hook cho biết hệ thống chấp nhận hủy bỏ hành động hay khơng Hook WH_CBT thường dùng cho chương trình đào tạo máy tính Hệ thống gọi thủ tục WH_DEBUG trước gọi thu tục hook khác hệ thống Ta dùng hook WH_DEBUG để xác định xem có cho phép gọi thủ tục hook khác hay không Hook cho phép ta thực thi tác vụ với mức ưu tiên thấp tiến trình chạy đặt WH_FOREGROUNDIDLE trạng thái nghỉ ngơi Hệ thống gọi thủ tục WH_FOREGROUNDIDLE chương trình chạy chuẩn bị chuyển sang chế độ nghỉ ngơi (idle) NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang 10 Kỹ thuật lập trình Hook hook cho phép chương trình giám sát thơng điệp trả hàm GetMessage PeekMessage WH_GETMESSAGE Ta dùng hook WH_GETMESSAGE để giám sát kiện chuột bàn phím kiện khác gửi đến hàng đợi thơng điệp cho phép chương trình chèn thông điệp vào hàng đợi thông điệp hệ thống Ta dùng hook để chạy lại (play back) kiện chuột bàn phím ghi lại (record) trước WH_JOURNALRECORD Khi hook hook WH_JOURNALPLAYBACK cài đặt, chuột bàn WH_JOURNALPLAYBACK phím bị đóng băng Hook dành riêng để hook hệ thống, ta dùng để cài đặt hook cục Hook trả giá trị time-out Giá trị cho hệ thống biết phải đợi mili-giây trước xử lý thông điệp nhận từ hook WH_JOURNALPLAYBACK Điều cho phép hook điều khiển khoảng thời gian kiện mà play back Cho phép giám sát ghi lại kiện vào (input event) Hook thường dùng để ghi lại chuỗi WH_JOURNALRECORD kiện chuột bàn phím để sau phát lại nhờ hook WH_JOURNALPLAYBACKHOOK Hook dành riêng để hook hệ thống, ta dùng để cài đặt hook cục WH_KEYBOARD_LL WH_KEYBOARD WH_MOUSE_LL Cho phép giám sát kiện vào bàn phím gửi tới hàng đợi ứng dụng Hook giám sát thơng điệp từ bàn phím WM_KEYDOWN, WM_KEYUP Cho phép giám sát kiện vào chuột gửi tới hàng đợi ứng dụng NhatPhuongLe www.reaonline.net Reverse Engineering Association 3132799 Trang 11 .. .Kỹ thuật lập trình Hook MỤC LỤC I Các khái niệm Sự khác biệt lập trình Windows DOS Lập trình Windows a) Thông điệp hàng đợi thông điệp b) Lập. .. Trang Kỹ thuật lập trình Hook Ta có sơ đồ hàng đợi thơng điệp sau: NhatPhuongLe www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook II Tìm hiểu Hook Hook gì? Hook chế lập. .. www.reaonline.net Reverse Engineering Association Trang Kỹ thuật lập trình Hook I Các khái niệm Sự khác biệt lập trình Windows DOS Windows DOS Lập trình kiện dựa vào thông điệp Thực theo định Đa nhiệm