 |
|
KINH NGHIỆM LẬP
TRÌNH |
|
BẢO MẬT MÁY TÍNH
BẰNG VISUAL BASIC |
|
Trên e-CHÍP số 149, tác giả Lê Văn Nhu có trình bày
chương trình bảo mật máy tính bằng Visual Basic.
Nhưng đúng như lời bàn của anh Chương Can Chíp, việc
vô hiệu hóa tổ hợp phím Ctrl+Alt+Del không “ép-phê”
đối với các hệ điều hành thuộc họ Windows NT
(NT/2000/XP/2003). Khi người dùng nhấn Ctrl+Alt+Del,
các hệ điều hành thuộc họ Windows NT gọi trình
Windows Task Manager (system32\taskmgr.exe), cho
phép end bất cứ chương trình nào mà người dùng muốn
thông qua nút End Task (thẻ Applications) và nút End
Process (thẻ Processes). Đặc biệt là tác vụ End
Process cho phép người dùng đóng những chương trình
mà ngay cả thẻ Applications không "thấy". |
Do vậy, việc ta phải làm là đóng Windows Task
Manager khi nó vừa được gọi nhằm bảo vệ an toàn cho
chương trình bảo mật. Có hai cách thực hiện:
1. Tìm xem có chương trình nào đang chạy với tên tập
tin là taskmgr.exe thì đóng nó lại.
2. Nếu thấy có chương trình đang chạy với tiêu đề
Windows Task Manager thì đóng nó lại. |
Tuy nhiên, cách thứ nhất không an toàn so với cách
thứ hai vì người dùng có thể lén đổi tên tập tin
taskmgr.exe. Ta nên chọn cách thứ hai. Muốn vậy, ta
dùng hai hàm API:
1. Hàm FindWindow() dùng để kiểm tra xem Windows
Task Manager có đang chạy hay không,
2. Hàm PostMessage() dùng để gởi thông điệp đến
Windows Task Manager, ra lệnh cho nó tự động đóng
lại. |
Như vậy, Windows Task Manager không thể chạy được
một khi chương trình bảo mật còn hoạt động. Bạn khai
báo hai hàm API nêu trên như đoạn mã 1.
Đoạn mã 1
Private Declare Function PostMessage Lib "user32"
Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg
As Long, ByVal wParam As Long, lParam As Any) As
Long
Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" (ByVal lpClassName As String,
ByVal lpWindowName As String) As Long |
Bạn cần thêm một Timer vào biểu mẫu chính trong
chương trình bảo mật, đặt thuộc tính Name là
tmrkiemtra và thuộc tính Interval bằng 1 (liên tục
kiểm tra sự hiện diện diện của Windows Task
Manager). Sau đó, bạn đưa đoạn mã 2 vào Timer.
Đoạn mã 2
Private Sub tmrkiemtra_Timer()
'Thực hiện lệnh đóng nếu phát hiện Windows Task
Manager đang chạy
Do While FindWindow(vbNullString, "Windows Task
Manager") <> 0
'Gởi thông điệp đến Windows Task Manager để đóng nó
lại
PostMessage FindWindow(vbNullString, "Windows Task
Manager"), &H10, 0&, 0&
'Bạn có thể khai báo ở đầu chương trình: Const
WM_CLOSE = &H10 và thay bằng
'PostMessage FindWindow(vbNullString, "Windows Task
Manager"), WM_CLOSE, 0&, 0&
Loop
End Sub |
|
Thế là xong, người dùng không thể gọi Windows Task
Manager được nữa vì khi gọi, chương trình của bạn
đóng Windows Task Manager ngay lập tức. Với hai hàm
API trên, bạn cũng có thể hạn chế người dùng, không
cho mở các chương trình "nhạy cảm" như Registry
Editor hay Command Prompt chẳng hạn. Chúc bạn thành
công. |
|
Constance (tinthongminh@yahoo.com) |
|
|
|
 |
|
 |