|
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) (Theo Echip) |
|
|
|