1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo đồ án cơ sở ngành mạng phần nguyên lý hệ điều hành tìm hiểu về lập trình hook và xây dựng chương trình keylogger đơn giản phần lập trình mạng xây dựng game ai là triệu phú

25 8 0

Đ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

Thông tin cơ bản

Tiêu đề Báo cáo đồ án cơ sở ngành mạng phần nguyên lý hệ điều hành tìm hiểu về lập trình hook và xây dựng chương trình keylogger đơn giản phần lập trình mạng xây dựng game Ai là triệu phú
Trường học Đại học Đà Nẵng
Chuyên ngành Ngành mạng
Thể loại Báo cáo đồ án
Thành phố Đà Nẵng
Định dạng
Số trang 25
Dung lượng 1,49 MB
File đính kèm Code-20230611T202701Z-001.zip (10 MB)

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

Nội dung

Báo cáo đồ án cơ sở ngành mạng phần nguyên lý hệ điều hành tìm hiểu về lập trình hook và xây dựng chương trình keylogger đơn giản phần lập trình mạng xây dựng game ai là triệu phú Báo cáo đồ án cơ sở ngành mạng phần nguyên lý hệ điều hành tìm hiểu về lập trình hook và xây dựng chương trình keylogger đơn giản phần lập trình mạng xây dựng game ai là triệu phú

Trang 1

Phần Nguyên lý hệ điều hành: Tìm hiểu về lập trình Hook

và Xây dựng chương trình Keylogger đơn giản.

Phần Lập trình mạng: Xây dựng game Ai là triệu phú.

Trang 2

MỤC LỤC

DANH SÁCH HÌNH VẼ 4

DANH SÁCH CÁC TỪ VIẾT TẮT 4

MỞ ĐẦU 5

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH 6

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 6

1.1 Thông điệp và hàng đợi thông điệp 6

1.1.1 Giới thiệu về thông điệp và hàng đợi thông điệp 6

1.1.2 Sử dụng thông điệp và hàng đợi thông điệp 8

1.2 Kỹ thuật Hook 9

1.2.1 Tổng quan về Hook 9

1.2.2 Các hàm thường dùng 10

1.2.3 Sử dụng Hook 11

CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỒNG 12

2.1 Phân tích yêu cầu 12

2.1.1 Yêu cầu về chức năng 12

2.1.2 Yêu cầu về giao diện người dùng 12

2.1.3 Yêu cầu về tương thích 12

2.2 Phân tích chức năng 12

a) Chức năng chạy ẩn ứng dụng 12

b) Bắt sự kiện từ bàn phím 13

c) Ghi ra tệp văn bản theo ngày tháng, theo từng ứng dụng 13

CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 14

3.1 Môi trường triển khai 14

3.2 Kết quả giao diện một số chức năng chương trình 14

3.3 Đánh giá và nhận xét 16

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 16

Những kết quả đạt được 16

Những vấn đề còn tồn lại 16

Hướng phát triển 16

PHẦN 2: LẬP TRÌNH MẠNG 17

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 17

Trang 3

1.1 Giao thức TCP/IP 17

1.2 Socket và Port 17

1.3 Mô hình Client/Server 18

1.3.1 Giới thiệu 18

1.3.2 Mô hình truyền tin Client/Server 19

CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 19

2.1 Phân tích yêu cầu 19

2.1.1 Yêu cầu về chức năng 19

2.1.2 Yêu cầu về tương thích 19

2.2 Thiết kế hệ thống 20

a) Sơ đồ Use-Case 20

b) Sơ đồ lớp 20

CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 21

3.1 Môi trường triển khai 21

3.2 Kết quả giao diện một số chức năng chương trình 21

3.3 Đánh giá và nhận xét 24

KẾT LUẬN CHUNG 25

Trang 4

DANH SÁCH HÌNH VẼ

Hình 1.1: Mô tả bắt sự kiện từ bàn phím

Hình 1.2: Kết quả ghi lại mã ASCII của các phím đã gõ

Hình 1.3: Kết quả file.txt ghi lại các phím đã gõ

Hình 2.1: Mô hình truyền tin Client/Server

Hình 2.2: Sơ đồ Use-Case

Hình 2.3: Sơ đồ lớp

Hình 2.4: Giao diện khi chạy Server

Hình 2.5: Giao diện khi chạy Client

Hình 2.6: Giao diện khi Client đăng nhập thành công

Hình 2.7: Giao diện chính của game

Hình 2.8: Giao diện khi nhấn nút “?”- hướng dẫn chơi game

Hình 2.9: Giao diện khi chơi game

DANH SÁCH CÁC TỪ VIẾT TẮT

Từ viết tắt Diễn giải

TCP/IP Transmission Control Protocol/Internet Protocol

MS-DOS Microsoft Disk Operating System

DLL Dynamic Link Library

IDE Integrated Development Environment

Trang 5

MỞ ĐẦU

Đồ án Cơ sở ngành Mạng là học phần rất quan trọng trong quá trình học tập của sinh viên Đồ án này giúp sinh viên tiếp cận và rèn luyện các kiến thức, kỹ năng liên quan đến Môn học Nguyên lý hệ điều hành và Lập trình mạng

Trong khuôn khổ đồ án, dưới sự hướng dẫn của Nguyễn Tấn Khôi, em đã chọn

đề tài Xây dựng chương trình Keylogger đơn giản cho phần nguyên lý hệ điều hành

và Xây dựng game “Ai là triệu phú” chơi qua mạng cho phần lập trình mạng Thông qua đề tài này, em đã hiểu rõ hơn phần nào về nguyên lý hoạt động xử lý thông điệp của hệ điều hành cũng như là biết được cách lập trình với giao thức TCP/IP theo mô hình Client/Server.

Do thời gian và kiến thức của em còn hạn chế nên không tránh khỏi những sai sót nhất định trong quá trình làm đồ án này Rất mong nhận được sự góp ý của quý thầy cô

Em xin chân thành cảm ơn!

Trang 6

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH

TIÊU ĐỀ: XÂY DỰNG CHƯƠNG TRÌNH KEYLOGGER ĐƠN GIẢN

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT

1.1 Thông điệp và hàng đợi thông điệp

1.1.1 Giới thiệu về thông điệp và hàng đợi thông điệp

Không giống như các ứng dụng trên nền MS-DOS, các ứng dụng trên nềnWindows thì hướng sự kiện, chúng không thực hiện các cuộc gọi hàm rõ ràng để lấyđầu vào, thay vào đó chúng chờ cho hệ thống chuyển đầu vào đến chúng

a) Thông điệp windows

Hệ thống chuyển đầu vào cho một thủ tục cửa sổ dưới dạng thông điệp Thôngđiệp được tạo bởi cả hệ thống và ứng dụng Hệ thống tạo ra một thông điệp tại mỗi

sự kiện đầu Hệ thống cũng tạo ra các thông điệp để đáp ứng với những thay đổitrong hệ thống do ứng dụng gây ra Một ứng dụng có thể tạo ra các thông điệp đếntrực tiếp các cửa sổ riêng để thực thi các tác vụ hoặc để giao tiếp với các cửa sổtrong ứng dụng khác

Hệ thống gửi một thông điệp đến một thủ tục cửa sổ với một bộ gồm bốn thamsố: một cửa sổ xử lý, một định danh thông điệp, và hai giá trị được gọi là thông sốthông điệp

b) Các loại thông điệp

Thông điệp do hệ thống xác định

Hệ thống gửi hoặc đăng một thông điệp do hệ thống xác định khi nó giao tiếp vớimột ứng dụng Nó sử dụng các thông điệp này để kiểm soát các hoạt động của cácứng dụng và cung cấp đầu vào và các thông tin khác cho các ứng dụng để xử lý.Ứng dụng cũng có thể gửi hoặc đăng các thông điệp do hệ thống xác định Các ứngdụng thường sử dụng các thông điệp này để kiểm soát hoạt động của các cửa sổđiều khiển được tạo ra bằng cách sử dụng các lớp cửa sổ được đăng ký trước

Thông điệp do ứng dụng xác định

Một ứng dụng có thể tạo các thông điệp để được sử dụng bởi các cửa sổ riêngcủa chính nó hoặc để giao tiếp với các cửa sổ trong các tiến trình khác

c) Định tuyến thông điệp

Hệ thống sử dụng hai phương pháp để định tuyến thông điệp đến một thủ tục cửasổ: đăng thông điệp vào hàng đợi được gọi là hàng đợi thông điệp, một đối tượng bộ

Trang 7

nhớ do hệ thống xác định lưu trữ thông điệp tạm thời và gửi thông điệp trực tiếp đếnthủ tục cửa sổ.

Thông điệp được xếp hàng đợi

Hệ thống có thể hiển thị bất kỳ cửa số nào tại một thời điểm Để định tuyến đầuvào 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

Thông điệp không xếp hàng đợi

Các thông điệp không xếp hàng đợi được gửi đi ngay lập tức đến thủ tục cửa sổđích, bỏ qua hàng đợi thông điệp hệ thống và hàng đợi thông điệp luồng Hệ thốngthông điệp gửi các thông điệp không xếp hàng đợi để báo cho một cửa sổ các sựkiện có ảnh hưởng đến nó

d) Xử lý thông điệp

Một ứng dụng phải loại bỏ và xử lý các thông điệp được đăng đến hàng đợi thôngđiệp của luồng của nó Một ứng dụng đơn luồng thông điệp sử dụng một vòng lặpthông điệp trong hàm WinMain của nó để loại bỏ và gửi thông điệp đến các thủ tụccửa sổ thích hợp để xử lý Các ứng dụng có nhiều luồng có thể bao gồm một vònglặp thông điệp trong mỗi luồng tạo ra một cửa sổ

Vòng lặp thông điệp

Một vòng lặp thông điệp đơn giản bao gồm một cuộc gọi hàm tới một trong bahàm sau: GetMessage, TranslateMessage và DispatchMessage Lưu ý rằng nếu cólỗi, GetMessage trả về –1, do đó cần có sự kiểm tra đặc biệt

Hàm GetMessage lấy một thông điệp từ hàng đợi và sao chép nó vào một cấutrúc kiểu MSG Nó trả về một giá trị nonzero, trừ khi nó gặp thông điệpWM_QUIT, trong trường hợp này nó trả về FALSE và kết thúc vòng lặp Trongmột ứng dụng đơn luồng, kết thúc vòng lặp thông điệp thường là bước đầu tiêntrong việc đóng ứng dụng Một ứng dụng có thể kết thúc vòng lặp của riêng nó bằngcách sử dụng hàm PostQuitMessage, thông điệp phản hồi với thông điệpWM_DESTROY trong thủ tục cửa sổ của cửa sổ chính của ứng dụng

Một vòng lặp thông điệp của luồng phải bao gồm TranslateMessage nếu luồng đódùng để nhận đầu vào ký tự từ bàn phím Hệ thống tạo các thông điệp phím ảo(WM_KEYDOWN và WM_KEYUP) mỗi lần người dùng nhấn một phím Mộtthông điệp phím ảo chứa mã phím ảo xác định phím nào được nhấn, nhưng không

có giá trị ký tự Để lấy giá trị này, vòng lặp thông điệp phải chứa TranslateMessage,thông dịch thông điệp phím ảo thành một thông điệp ký tự (WM_CHAR) và đặt nótrở lại hàng đợi thông điệp ứng dụng Thông điệp ký tự sau đó có thể được xóa bỏkhi một lần lặp tiếp theo của vòng lặp thông điệp và gửi đến một thủ tục cửa sổ

Trang 8

Chỉ cần một vòng lặp thông điệp cho một hàng đợi thông điệp, ngay cả khi mộtứng dụng có chứa nhiều cửa sổ DispatchMessage luôn gửi thông điệp đến cửa sổthích hợp; điều này là bởi vì mỗi thông điệp trong hàng đợi là một cấu trúc MSG cóchứa các xử lý của cửa sổ mà thông điệp thuộc về.

Thủ tục cửa sổ

Một thủ tục cửa sổ là một hàm nhận và xử lý tất cả các thông điệp được gửi đếncửa sổ đó Mỗi lớp cửa sổ có một thủ tục cửa sổ, và mỗi cửa sổ được tạo ra với lớp

đó sử dụng cùng một thủ tục cửa sổ để trả lời các thông điệp

Hệ thống sẽ gửi một thông điệp đến một thủ tục cửa sổ bằng cách chuyển dữ liệuthông điệp làm đối số cho thủ tục Các thủ tục cửa sổ sau đó thực hiện một hànhđộng thích hợp cho thông điệp; nó kiểm tra mã nhận dạng thông điệp, trong khi xử

lý thông điệp, sử dụng thông tin được quy định bởi các tham số thông điệp

1.1.2 Sử dụng thông điệp và hàng đợi thông điệp

a) Tạo vòng lặp thông điệp

Hệ thống không tự động tạo hàng đợi thông điệp cho mỗi luồng Thay vào đó, hệthống tạo ra một hàng đợi thông điệp duy nhất cho các luồng thực hiện các thao tácyêu cầu một hàng đợi thông điệp Nếu luồng tạo một hoặc nhiều cửa sổ, phải cungcấp vòng lặp thông điệp; vòng lặp thông điệp này lấy thông điệp từ hàng đợi thôngđiệp của luồng và gửi chúng đến các thủ tục cửa sổ thích hợp

Bởi vì hệ thống hướng các thông điệp đến các cửa sổ riêng lẻ trong một ứngdụng, nên một luồng phải tạo ít nhất một cửa sổ trước khi bắt đầu vòng lặp thôngđiệp của nó Hầu hết các ứng dụng có chứa một luồng đơn tạo ra các cửa sổ Mộtứng dụng đặc thù đăng ký lớp cửa sổ cho cửa sổ chính của nó, tạo và hiển thị cửa sổchính, và sau đó bắt đầu vòng lặp thông điệp của nó - tất cả trong hàm WinMain

b) Kiểm tra hàng đợi thông điệp

Thỉnh thoảng, một ứng dụng cần kiểm tra nội dung của hàng đợi thông điệp củamột luồng từ bên ngoài vòng lặp thông điệp của luồng Trừ khi ứng dụng định kỳkiểm tra hàng đợi thông điệp trong quá trình hoạt động đối với các thông điệp chuột

và bàn phím, nó sẽ không phản hồi lại đầu vào của người dùng cho đến sau khi thaotác hoàn tất Lý do cho điều này là hàm DispatchMessage trong vòng lặp thông điệpcủa luồng không trả về cho đến khi thủ tục cửa sổ kết thúc xử lý một thông điệp

Trang 9

c) Đăng thông điệp

Bạn có thể đăng thông điệp lên hàng đợi thông điệp bằng cách sử dụng hàmPostMessage PostMessage đặt một thông điệp ở cuối hàng đợi thông điệp của mộtluồng và trả về ngay lập tức mà không cần đợi luồng xử lý thông điệp

d) Gửi thông điệp

Hàm SendMessage được sử dụng để gửi thông điệp trực tiếp đến một thủ tục cửa

sổ SendMessage gọi thủ tục cửa sổ và đợi thủ tục đó xử lý thông điệp và trả lại kếtquả

1.2 Kỹ thuật Hook

1.2.1 Tổng quan về Hook

Một hook là một cơ chế mà một ứng dụng có thể chặn các sự kiện, chẳng hạnnhư các thông điệp, các hoạt động của chuột và các phím Một hàm chặn một loại

sự kiện cụ thể được gọi là thủ tục hook Một thủ tục hook có thể hành động trên mỗi

sự kiện nó nhận được, và sau đó sửa đổi hoặc loại bỏ sự kiện

a) Chuỗi Hook

Hệ thống hỗ trợ nhiều kiểu hook khác nhau; mỗi loại cung cấp quyền truy cậpvào một khía cạnh khác nhau của cơ chế xử lý thông điệp của nó Ví dụ, một ứngdụng có thể sử dụng hook WH_MOUSE để theo dõi lưu lượng thông điệp chothông điệp chuột

Hệ thống duy trì một chuỗi hook riêng biệt cho từng loại hook Một chuỗi hook

là một danh sách các con trỏ tới các hàm gọi lại đặc biệt, được ứng dụng định nghĩađược gọi là các thủ tục hook Khi một thông điệp xảy ra được liên kết với một loạihook cụ thể, hệ thống sẽ truyền thông điệp đến từng thủ tục hook được tham chiếutrong chuỗi hook, cái này sau cái kia Tác động của một thủ tục hook có thể phụthuộc vào độc phức tạp của loại hook Các thủ tục hook cho một số loại hook chỉ cóthể theo dõi thông điệp; những loại khác có thể sửa đổi thông điệp hoặc ngừng tiếntrình của nó thông qua chuỗi, ngăn cản thông điệp tiếp cận thủ tục hook tiếp theohoặc cửa sổ đích

b) Thủ tục Hook

Thủ tục hook phải có cú pháp sau:

LRESULT CALLBACK HookProc(

int nCode,

WPARAM wParam,

Trang 10

HookProc là một sự giữ chỗ cho tên một ứng dụng được định nghĩa.

Tham số nCode là một mã hook mà thủ tục hook sử dụng để xác định hành động

để thực hiện Giá trị của mã hook phụ thuộc vào loại hook; mỗi loại có bộ mã hookđặc trưng riêng Các giá trị của các tham số wParam và lParam phụ thuộc vào mãhook, nhưng chúng đặc thù chứa thông tin về một thông điệp được gửi hoặc đượcđăng

c) Các kiểu Hook

Mỗi một kiểu Hook cho phép ứng dụng điều khiển thông điệp theo những cáchkhác nhau trong kỹ thuật điều khiển thông điệp (message-handling mechanism).Dưới đây là những kiểu hook khác nhau: WH_KEYBOARD,WH_KEYBOARD_LL, WH_MOUSE, WH_MOUSE_LL…và một số kiểu Hookkhác

1.2.2 Các hàm thường dùng

a) SetWindowsHookEx

HHOOK WINAPI SetWindowsHookEx(

in int idHook,

in HOOKPROC lpfn,

in HINSTANCE hMod,

in DWORD dwThreadId

Trang 11

c) CallNextHookEx

LRESULT WINAPI CallNextHookEx(

in_opt HHOOK hhk,

in int nCode,

in WPARAM wParam,

in LPARAM lParam

);

d) LowLevelKeyboardProc

LRESULT CALLBACK LowLevelKeyboardProc(

in int nCode,

in WPARAM wParam,

in LPARAM lParam

);

1.2.3 Sử dụng Hook

Có thể cài đặt một thủ tục hook bằng cách gọi hàm SetWindowsHookEx và chỉ

rõ kiểu của thủ tục gọi hook, cho dù thủ tục nên được liên kết với tất cả các luồngtrong cùng một máy tính như là luồng gọi hoặc với một luồng cụ thể và một con trỏđến đầu vào thủ tục

Bạn phải đặt một thủ tục hook toàn cục trong một DLL riêng biệt từ ứng dụng càiđặt thủ tục hook Ứng dụng cài đặt phải có xử lý cho mô-đun DLL trước khi nó cóthể cài đặt thủ tục hook Để lấy một xử lý đến module DLL, hãy gọi hàmLoadLibrary với tên của DLL Sau khi đã có được xử lý, có thể gọi hàmGetProcAddress để lấy một con trỏ đến thủ tục hook Cuối cùng, sử dụngSetWindowsHookEx để cài đặt địa chỉ thủ tục hook trong chuỗi hook thích hợp.SetWindowsHookEx chuyển mô-đun xử lý, con trỏ tới điểm nhập thủ tục hook và 0cho luồng định danh, chỉ ra rằng thủ tục hook phải được liên kết với tất cả các luồngtrong cùng một màn hình với tư cách là luồng gọi

Bạn có thể giải phóng một luồng thủ tục hook (loại bỏ địa chỉ của nó khỏi chuỗihook) bằng cách gọi hàm UnhookWindowsHookEx, chỉ định xử lý cho thủ tục hook

để giải phóng Giải phóng một thủ tục hook ngay sau khi ứng dụng của bạn khôngcòn cần đến nó nữa

Trang 12

CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỒNG

2.1 Phân tích yêu cầu

2.1.1 Yêu cầu về chức năng

Chương trình ghi lại toàn bộ thao tác phím của người dùng và lưu ra một tập tinvăn bản

2.1.2 Yêu cầu về giao diện người dùng

2.1.3 Yêu cầu về tương thích

Để đảm bảo có sự tương tác tốt nhất với Windows, trong chương trình này em đã

sử dụng ngôn ngữ C++ trên môi trường DevC++

b) Ghi ra tệp văn bản theo ngày tháng, theo từng ứng dụng.

Khi người dùng nhấn phím, thì ứng dụng cũng đồng thời bắt phím và ghi phím

đó ra tệp Tệp ghi ra theo từng ngày tháng cụ thể và tương ứng với ứng dụng tươngtác

Trang 13

CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ

3.1 Môi trường triển khai

Chương trình được triển khai chạy thử nghiệm trong môi trường Windows 10

3.2 Kết quả giao diện một số chức năng chương trình

Hình 1.2: Kết quả hiện thị Mã ASCII của các phím đã gõ

Trang 14

Hình 1.3: Kết quả file.txt ghi lại các phím đã gõ

Trang 15

3.3 Đánh giá và nhận xét

Sau khi triển khai và chạy thử ứng dụng, em đã rút ra các nhận xét đánh giá sau:

 Chương trình không làm tăng đáng kể thời gian hiển thị phím bấm

 Chương trình ghi lại được 100% thao tác phím

 Các tập tin ghi lại theo ngày tháng và ứng dụng mà người dùng gõ chính xáchoàn toàn

 Chương trình sẽ hoạt động không chính xác nếu có các ứng dụng hook khácnhư các chương trình gõ tiếng việt (Unikey, Vietkey…)

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Những kết quả đạt được

 Chương trình ghi lại 100% thao tác phím

 Các tập tin ghi lại theo ngày và tên ứng dụng mà người dùng gõ phím thông tin chính xác 100%

Những vấn đề còn tồn lại

 Có các tự lạ trong bản Log Nguyên nhân là do các ký tự Unicode do chươngtrình Unicode (Unikey, Vietkey) gửi đến

Hướng phát triển

 Cho phép hiển thị Unicode trong bản log

 Mã hóa các tập tin log để người sử dụng không biết được là đang bị theo dõi

 Kết hợp gửi thông tin về mail

 Thiết kế bổ sung thêm phần giao diện

 Vì đây là ứng dụng mang tính đánh cắp thông tin người khác nên cần chạy ẩn

Ngày đăng: 12/06/2023, 03:34

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w