Đồ án hệ điều hành: Phần mềm keylog sử dụng Hook windows docx

60 909 4
Đồ án hệ điều hành: Phần mềm keylog sử dụng Hook windows docx

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN MẠNG VÀ TRUYỀN THÔNG  ĐỒ ÁN HỆ ĐIỀU HÀNH Đề tài: PHẦN MỀM KEYLOGER SỬ DỤNG HOOK WINDOWS Sinh viên : Nguyễn Quan Nhật Nguyễn Quốc Mỹ Lớp : 08T4 Cán bộ hướng dẫn : Huỳnh Công Pháp Đà Nẵng 2011 2 Bộ môn Mạng và Truyền Thông Nguyễn Quang Nhật – Nguyễn Quốc Mỹ KeyLogger-Sử dụng Hook Windows 3 Nguyễn Quang Nhật – Nguyễn Quốc Mỹ MỤC LỤC TỔNG QUAN VỀ ĐỀ TÀI 5 Chương 1. CƠ SỞ LÝ THUYẾT 6 I. Giới thiệu 6 II. Thông Điệp và HÀNG ĐỢI THÔNG ĐIỆP CỦA WINDOWS 6 II.1. Giới thiệu 6 II.1.1. Thông điệp windows 6 II.1.2. Loại Thông điệp 7 II.1.3. Lộ trình thông điệp 10 II.1.4. Xử lý thông điệp 12 II.1.5. Lọc thông điệp 16 II.1.6. Đăng và chuyển thông điệp 16 II.1.7. Bế tắc thông điệp 18 II.1.8. Thông điệp quảng bá 19 II.1.9. Truy vấn thông điệp 20 II.2. Sử dụng thông điệp và hàng đợi thông điệp 21 II.2.1. Tạo vòng lặp thông điệp 21 II.2.2. Kiểm tra một hàng đợi thông điệp 24 II.2.3. Đăng thông điệp 25 II.2.4. Gửi một thông điệp 26 III. kỹ thuật hook 28 III.1. Giới thiệu 28 III.2. Chuỗi Hook 29 III.2.1. Thủ tục Hook 29 III.2.2. Các kiểu Hook 29 III.3. Cách sử dụng 31 III.3.1. Cài đặt Hook 31 III.3.2. Giải phóng Hook 31 IV. win 32 api 32 IV.1. Giới thiệu 32 IV.2. Các hàm thường dùng 32 4 Bộ môn Mạng và Truyền Thông Nguyễn Quang Nhật – Nguyễn Quốc Mỹ IV.2.1. SetWindowsHookEx 32 IV.2.2. UnhookWindowsHookEx 33 IV.2.3. CallNextHookEx 33 IV.2.4. LowLevelKeyboardProc 34 IV.2.5. GetKeyState 35 IV.2.6. GetKeyboardState 35 IV.2.7. ToAscii 35 IV.2.8. LoadLibrary 36 IV.2.9. GetProcAddress 36 IV.2.10. OpenProcess 36 IV.2.11. EnumProcessModules 37 IV.2.12. GetModuleBaseName 37 IV.2.13. GetForegroundWindow 38 IV.2.14. GetWindowThreadProcessId 38 IV.2.15. GetLocalTime 39 IV.3. Mã bàn phím ảo 39 Chương 2. PHÂN TÍCH VÀ XÂY DỰNG CHƯƠNG TRÌNH 47 I. PHân tích yêu cầu 47 I.1. Yêu cầu về chức năng 47 I.2. Yêu cầu về giao diện người dùng 47 I.3. Yêu cầu về tương thích 47 II. phân tích chức năng 47 III. xây dựng chức năng 47 III.1. Tập tin thi hành Jaam.exe 47 III.2. Thư viện Hooker.dll 49 III.2.1. Phiên bản 1 49 III.2.2. Phiên bản 2 51 III.2.3. Phiên bản 3 53 Chương 3. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 57 I. Môi trường triển khai 57 II. Kết quả chức nĂng chương trình 57 III. Đánh giá và nhận xét 58 KeyLogger-Sử dụng Hook Windows 5 Nguyễn Quang Nhật – Nguyễn Quốc Mỹ TỔNG QUAN VỀ ĐỀ TÀI 1. Bối cảnh và lý do thực hiện đề tài Trong khuôn khổ Đồ Án môn học Nguyên Lý hệ điều hành, dưới sự gợi ý của thầy Huỳnh Công Pháp, tụi em đã chọn đề tài KeyLogger-Sử dụng Hook Windows. Khi mà thị trường windows chiếm hơn 90% trên thế giới thì việc được nghiên cứu về một tính năng quan trọng, cơ bản nhất của windows làm chúng em rất hứng thú. Hơn nữa việc thực hiện đề tài giúp chúng em biết rõ hơn về một kỹ thuật phần mềm gián điệp, ăn cắp thông tin để biết cách phòng tránh. 2. Phương pháp triển khai đề tài Sử dụng mô hình Tiến Hóa trong việc phân tích và xây dựng phần mềm. Chúng em đã cố gắng để đưa ra các phiên bản nâng cấp để có một phần mềm hoàn chỉnh. 3. Kết cấu của đồ án Phần mềm gồm 2 tập tin : - Tập tin thi hành Jaam.exe. - Thư viện liên kết động Hooker.dll. 6 Bộ môn Mạng và Truyền Thông Nguyễn Quang Nhật – Nguyễn Quốc Mỹ Chương 1. CƠ SỞ LÝ THUYẾT I. GIỚI THIỆU Hook là kỹ thuật điều khiển thông điệp (message-handling) giúp cho ứng dụng có thể cài đặt một thủ tục để điều khiển luồng thông điệp và tiến hành xử lý các thông điệp đó trước khi thông điệp đó đi tới cửa sổ đích. Hook có thể xem là tính năng mạnh mẽ nhất của Windows, nó cho phép ta đặt bẫy đối với các sự kiện. Bằng cách sử dụng hook, ta có thể điều hướng ứng dụng tới một thủ tục mới bất kể khi nào mà sự kiện được quan tâm xuất hiện và bất kể sự kiện đó thuộc tiến trình của bạn hay thuộc tiến trình khác. Để viết được chương trình Hook ta cần nắm bắt cơ chế xử lý thông điệp của Windows, Thư viện Win32 API và Kỹ thuật Hook. II. THÔNG ĐIỆP VÀ HÀNG ĐỢI THÔNG ĐIỆP CỦA WINDOWS II.1. Giới thiệu Không giống như các ứng dụng trên nền MS-DOS, các ứng dụng trên Windows hướng sự kiện. Chúng không thực hiện các chức năng gọi rõ ràng ( như thư viện C ) để có được đầu vào. Thay vào đó, chúng chờ đợi cho hệ thống chuyển đầu vào đến chúng. Hệ thống chuyển tất cả đầu vào cho một ứng dụng cho các cửa sổ khác nhau trong hệ thống. Mỗi cửa số có một hàm, được gọi là một thủ tục cửa sổ, hệ thống gọi bất cứ khi nào nó có đầu vào cho cửa sổ. Thủ tục cửa số xử lý đầu vào và trả kiểm soát cho hệ thống. Nếu một cử số cao nhất dừng trả lời thông điệp trong một vài giây, hệ thống xem như cửa sổ đó là Not Responding. Trong trường hợp này, hệ thống ẩn các cửa sổ và thay thế nó với một cửa sổ ma có cùng Z, vị trí kích thước, và các thuộc tính hình ảnh. Điều này cho phép người sử dụng di chuyển, thay đổi kích thước, hoặc đóng ứng dụng. Tuy nhiên, đây chỉ là những hành động hợp lệ vì ứng dụng thật sự không được đáp ứng. Khi ở chế độ gỡ rối, hệ thống không tạo ra cửa sổ ma. II.1.1. Thông điệp windows KeyLogger-Sử dụng Hook Windows 7 Nguyễn Quang Nhật – Nguyễn Quốc Mỹ Hệ thống chuyển đầu vào đến thủ tục cửa sổ trong hình thức của thông điệp. Các thông điệp được sinh ra với cả hệ thống và các ứng dụng. Hệ thống sinh ra một thông điệp ở mỗi sự kiện đầu vào – ví dụ, khi người dùng nhập, di chuyển chuột, hoặc nhấp chuột như điều khiển thanh cuộn. Hệ thống cũng tạo ra các thông điệp trong hồi đáp để thay đổi trong hệ thống mang lại mởi một ứng dụng, như khi một ứng dụng thay đổi tài nguyên phông chữ hệ thống hoặc thay đổi kích thước cửa sổ của nó. Một ứng dụng có thể sinh ra thông điệp đến trực tiếp các cửa sổ riêng của nó để thực hiện nhiệm vụ hoặc để giao tiếp với cửa sổ trong ứng dụng khác. Hệ thống sẽ gửi một thông điệp tới thông điệp cửa sổ với bốn hằng số : 1 xử lý cửa sổ, một tin nhắn nhận dạng, và hai giá trị được gọi là tham số tin nhắn. Các xử lý cửa sổ xác định của ố mà thông điệp hướng đến. Hệ thống dùng nó để xác định các thủ tục cửa sổ sẽ được nhận thông điệp. Định dạng tin nhắn là một hằng số có tên là xác định mục đích của thông điệp. Khi một thủ tục cửa sổ nhận được một thông điệp, nó sử dụng một định danh tin nhắn xác định làm thế nào để xử lý thông điệp. Ví dụ, các thông điệp nhân dạng WM_PAINT cho các thủ tục cửa sổ để khu vực cửa sổ đã thay đổi và phải được vẽ lại. Các tham số thông điệp xác định dữ liệu hoặc vị trí dữ liệu được dùng bởi thủ tục cửa sổ khi xử lý thông điệp. Ý nghĩa và giá trị của tham số thông điệp phụ thuộc vào thông điệp. Một tham số thông điệp có thể chứa một số nguyên, cờ bit đóng gói, một con trỏ đến một cấu trúc dữ liệu chứa dữ liệu bổ sung, và v v Khi một thông điệp không dùng tham số thông điệp, chúng thương được thiết lập là NULL. Một thủ tục cửa sổ phải kiểm tra địn danh thông điệp để xác định làm thế nào để phân tích thông số thông điệp. II.1.2. Loại Thông điệp Có hai loại thông điệp - Thông điệp định bởi hệ thống - Thông điệp định bởi ứng dụng Thông điệp định bởi hệ thống 8 Bộ môn Mạng và Truyền Thông Nguyễn Quang Nhật – Nguyễn Quốc Mỹ Hệ thống gửi hoặc chuyển một Thông điệp định bởi hệ thống khi nó giao tiếp với một ứng dụng. Nó sử dụng những thông điệp để điều khiển hoạt động của ứng dụng và cung cấp đầu vào và các thông tin khác cho ứng dựng xử lý. Một ứng dụng có thể gửi hoặc chuyển thông điệp định bởi hệ thống. Ứng dụng thường sử dụng các thông điệp để điều khiển các hoạt động của đối tượng cửa sổ được tạo bằng cách dùng các lớp cửa sổ đã đăng ký. Mỗi thông điệp định bởi hệ thống có một đinh dạnh thông điệp riêng duy nhất và một hằng biểu tượng tương ứng (được đinh nghĩa trong các tập tin header của SDK ) nêu rõ mục đích của thông điệp. Ví dụ, WM_PAINT yêu cầu cửa sổ vẽ lại nội dung của nó. Hằng số tượng trưng xác định củ thể danh mục mà thông điệp đinh bởi hệ thống thuộc về. Các tiền tố của hằng xác định loại của cửa sổ mà nó phân tích và xử lý thông điệp. Sau đây là danh xác các thông điệp Tiền tố Loại thông điệp ABM and ABN Application desktop toolbar ACM and ACN Animation control BCM, BCN, BM, and BN Button control CB and CBN ComboBox control CBEM and CBEN ComboBoxEx control CCM General control CDM Common dialog box DFM Default context menu DL Drag list box DM Default push button control DTM and DTN Date and time picker control EM and EN Edit control HDM and HDN Header control HKM Hot key control IPM and IPN IP address control LB and LBN List box control LM SysLink control LVM and LVN List view control MCM and MCN Month calendar control PBM Progress bar KeyLogger-Sử dụng Hook Windows 9 Nguyễn Quang Nhật – Nguyễn Quốc Mỹ PGM and PGN Pager control PSM and PSN Property sheet RB and RBN Rebar control SB and SBN Status bar window SBM Scroll bar control SMC Shell menu STM and STN Static control TB and TBN Toolbar TBM and TRBN Trackbar control TCM and TCN Tab control TDM and TDN Task dialog TTM and TTN Tooltip control TVM and TVN Tree-view control UDM and UDN Up-down control WM General Thông điệp định bởi ứng dụng Một ứng dụng có thể tạo ra các thông điệp được sửa dụng bởi các cửa sổ riêng của nó hoặc để giao tiếp với cửa sổ của ứng dụng khác. Nếu một ứng dụng tạo ra các thông điệp của nó, thủ tục cửa sổ sẽ tiếp nhận và phân tích những thông điệp và cung cấp xử lý thích hợp. Định danh thông điệp có các giá trị sau : - Hệ thống dự trữ định danh thông điệp với giá trị từ 0x0000 đến 0x03FF ( giá trị của WM_USER – 1) cho thông điệp định bởi hệ thống. Các uwgns dụng không thể dùng những thông điệp riêng này. - Giá trị từ 0x0400 (giá trị của WM_USER) tới 0x7FFF là hợp lệ cho định danh thông điệp cho các lớp cửa sổ riêng. - Nếu các ứng dụng được đánh dấu version 4, ta có thể sử dụng định dạng thông điệp với giá trị trong khoản 0x8000 (WM_APP) tới 0xBFFF trong thông điệp riêng. - Hệ thống trả về một định danh thông điệp trong khoản 0xC000 tới 0xFFFF khi một ứng dụng gọi hàm RegisterWindowMessage để đăng ký một thông điệp. 10 Bộ môn Mạng và Truyền Thông Nguyễn Quang Nhật – Nguyễn Quốc Mỹ Định danh thông điệp trả về bởi hàm này được đảm bảo là duy nhất trong toàn hệ thống. Sử dụng chức năng này ngăn chặn xung đột có thể xảy ra nếu ứng dụng khác dùng cùng định danh thông điệp cho mục đích khác. II.1.3. Lộ trình thông điệp Hệ thống sử dụng hai phương thức để chuyển thông điệp đến thủ tục cửa sổ : chuyển thông điệp đến một hàng đợi, chuyển thông điệp trực tiếp tới thủ tục cửa sổ. Một thông điệp được đưa đến một hàng đợi được gọi là hàng đợi thông điệp. Đây là kết quả chủ yếu của đầu vào nhập vào thông qua chuộ hoặc bàn phím như các thông điệp WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, và WM_CHAR. Các thông điệp hàng đợi khác bao gồm bộ đếm thời gian, vẽ, và thông điệp thoát : WM_TIMER, WM_PAINT, và WM_QUIT. Phần lớn thông điệp khác được gửi trực tiếp đến thủ tục cửa sổ, được gọi là thông điệp không hàng đợi. Hàng đợi thông điệp Hệ thống có thể hiển thị bất kỳ số lượng cửa sổ cùng một lúc. Để chuyển dữ liệu chuột và bàn phím đến cửa sổ thích hợp, hệ thống sử dụng hàng đợi thông điệp. Hệ thống duy trì một hàng đợi hệ thống tin nhắn đơn và thread-cụ thể một tin nhắn hàng đợi cho mỗi thread GUI. Để tránh các chi phí của việc tạo ra một hàng đợi tin nhắn cho chủ đề giao diện không, tất cả các chủ đề được tạo ra ban đầu mà không có một hàng đợi thông điệp. Hệ thống này tạo ra một thread-cụ thể hàng đợi thông điệp chỉ khi chủ đề làm cho cuộc gọi đầu tiên của mình cho một trong những người sử dụng các chức năng cụ thể, không có chức năng giao diện cuộc gọi kết quả trong việc tạo ra các một hàng đợi thông điệp. Bất cứ khi nào người dùng di chuyển chuột, nhấp chuột vào nút chuột, hoặc các loại trên bàn phím, trình điều khiển thiết bị cho các con chuột hoặc bàn phím chuyển đổi đầu vào tin nhắn và đặt chúng trong hàng đợi hệ thống tin nhắn. Hệ thống này loại bỏ các tin nhắn, một tại một thời điểm, từ hàng đợi thông điệp hệ thống, kiểm tra để xác định cửa sổ đích, và sau đó bài viết chúng vào hàng đợi tin nhắn của chủ đề đó tạo ra cửa sổ đích. Hàng đợi tin nhắn của một chủ đề nhận được tất cả các tin nhắn chuột và bàn phím cho các cửa sổ được tạo ra bởi chủ đề. Chủ đề [...]... (HOOKPROC)GetProcAddress(hinstDLL, "SetAutoProtect"); hhookysMsg= SetWindowsHookEx(WH_SYSMSGFILTER, lpfSetAutoProtect,hinstDLL,0); III.3.2 Giải phóng Hook Như đã nói thì hook nên được bỏ đi nếu như không cần thiết nữa bằng cách sử dụng hàm UnhookWindowsHookEx Với thread-specific hook, việc sử dụng hàm UnhookWindowsHookEx sẽ giải phóng thủ tục hook Tuy nhiên với hook toàn tục (system-wide hook) thì hàm này không thể trả tự... của thủ tục hook trong thư viện liên kết động thông qua hàm GetProcAddress Sau khi đã có thủ tục hook, sử dụng hàm SetWindowsHookEx để cài đặt thủ tục hook vào trong chuỗi hook Ví dụ về sử dụng thư viện liên kết động : HOOKPROC lpfSetAutoProtect; static HINSTANCE hinstDLL; static HHOOK hhookysMsg; hinstDLL = LoadLibrary(( LPCTSTR ) "c:\ \Windows\ \ BrowserHook.dll"); lpfSetAutoProtect= (HOOKPROC)GetProcAddress(hinstDLL,... bạn và sử dụng chúng để phối hợp hoạt động giữa các ứng dụng của bạn và các thành phần khác trong hệ thống Điều này đặc biệt hữu ích nếu bạn đã tạo ra trình điều khiển cài đặt riêng của bạn hoặc trình điều khiển thiết bị hệ thống cấp Tin nhắn tuỳ chỉnh của bạn có thể mang thông tin đến và từ trình điều khiển của bạn và các ứng dụng sử dụng các trình điều khiển Nguyễn Quang Nhật – Nguyễn Quốc Mỹ KeyLogger -Sử. .. KeyLogger -Sử dụng Hook Windows 21 Bạn có thể tạo ra các tin nhắn tùy chỉnh của bạn và sử dụng chúng để phối hợp hoạt động giữa các ứng dụng của bạn và các thành phần khác trong hệ thống Điều này đặc biệt hữu ích nếu bạn đã tạo ra trình điều khiển cài đặt riêng của bạn hoặc trình điều khiển thiết bị hệ thống cấp Tin nhắn tuỳ chỉnh của bạn có thể mang thông tin đến và từ trình điều khiển của bạn và các ứng dụng. .. động hóa, điều khiển ActiveX, và NET Framework Không có một sự phân biệt rõ ràng giữa các công nghệ này, và có khá nhiều chồng chéo IV.2 Các hàm thường dùng IV.2.1 SetWindowsHookEx Cấu trúc : HHOOK WINAPI SetWindowsHookEx( in int idHook, in HOOKPROC lpfn, Nguyễn Quang Nhật – Nguyễn Quốc Mỹ KeyLogger -Sử dụng Hook Windows in in 33 HINSTANCE hMod, DWORD dwThreadId ); Danh sách tham số : - idHook: là... thiết và kết thúc việc hook ngay khi không dùng đến nữa Nguyễn Quang Nhật – Nguyễn Quốc Mỹ KeyLogger -Sử dụng Hook Windows 29 III.2 Chuỗi Hook Hệ thống có khả năng hỗ trợ nhiều kiểu hook khác nhau, mỗi kiểu lại được quy định một cách thức truy nhập khác nhau trong kỹ thuật điều khiển thông điệp Do vậy, hệ thống duy trì một chuỗi các hook cho mỗi một kiểu hook khác nhau Một chuỗi hook là một danh sách... phiên bản của Microsoft Windows SDK, cung cấp tài liệu và các công cụ cần thiết để xây dựng phần mềm dựa trên các giao diện API Windows và các Windows Windows API chủ yếu quan tâm đến sự tương tác giữa các hệ thống điều hành và ứng dụng Đối với truyền thông giữa các ứng dụng Windows khác nhau với nhau, Microsoft đã phát triển một loạt các công nghệ cùng với Windows API chính Điều này bắt đầu với dữ... trong hệ thống Thành phần của Hook - Chuỗi Hook - Thủ tục Hook - Các kiểu Hook Hook là một kỹ thuật xử lý thông điệp rất mạnh cho phép chúng ta can thiệp sâu vào các tiến trình khác nhau, nhưng nó làm ảnh hưởng tới tốc độ của hệ thống, nhất là hook system-wide, vì tất cả các sự kiện của hệ thống sẽ được định hướng tới một hàm nào đó, rõ ràng điều này làm hệ thống chậm đi đáng kể Vì thế ta chỉ hên hook. .. tục Hook được cài đặt Xem danh sách hàm loại thủ tục Hook ở trên - lpfn: con trỏ tới thủ tục hook - hMod: một handle đến file DLL chứa thủ tục Hook chỉ bởi con trr lpfn - dwThreadId: định danh của Thread mà thủ tục Hook được liên kết Nếu giá trị này bằng 0 thì thủ tục Hook liên kết đến tất cả Thread đang chạy trong hệ thống IV.2.2 UnhookWindowsHookEx Cấu trúc BOOL WINAPI UnhookWindowsHookEx( in HHOOK... được gọi là giao diện lập trình ứng dụng (API) có sẵn trong các hệ thống điều hành Microsoft Windows của Microsoft Nó cũng được gọi là Win32 API, tuy nhiên, tên "Windows API" phản ánh chính xác hơn nguồn gốc của nó trong Windows 16-bit và hỗ trợ trên Windows 64-bit Hầu như tất cả các chương trình Windows tương tác với các API của Windows trên các dòng Windows NT của hệ điều hành Công cụ hỗ trợ phát triển . ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN MẠNG VÀ TRUYỀN THÔNG  ĐỒ ÁN HỆ ĐIỀU HÀNH Đề tài: PHẦN MỀM KEYLOGER SỬ DỤNG HOOK WINDOWS Sinh viên :. tài Sử dụng mô hình Tiến Hóa trong việc phân tích và xây dựng phần mềm. Chúng em đã cố gắng để đưa ra các phiên bản nâng cấp để có một phần mềm hoàn chỉnh. 3. Kết cấu của đồ án Phần mềm. III. Đánh giá và nhận xét 58 KeyLogger -Sử dụng Hook Windows 5 Nguyễn Quang Nhật – Nguyễn Quốc Mỹ TỔNG QUAN VỀ ĐỀ TÀI 1. Bối cảnh và lý do thực hiện đề tài Trong khuôn khổ Đồ Án môn

Ngày đăng: 19/06/2014, 13:20

Trích đoạn

Tài liệu cùng người dùng

Tài liệu liên quan