SỐ 149
KINH NGHIỆM LẬP TRÌNH

Bảo mật máy tính bằng Visual Basic
Lê Văn Nhu

Bài viết “Xì-tốp hai tổ hợp phím Alt+Tab và Ctrl+Esc trong Windows” của bạn Nguyễn Đức Hiếu trên e-CHÍP số 49 đã giới thiệu một cách vô cùng đơn giản mà hiệu quả để bảo mật cho máy tính (phục vụ nơi đông người). Trong bài này, tôi trình bày việc dùng Visual Basic để vô hiệu hóa các tổ hợp phím Ctrl+Alt+Del, Ctrl+Esc, Alt+Tab giống như cách của bạn Hiếu và thử thêm vài chiêu nữa dựa vào các hàm API nhằm "xiết chặt an ninh". Chương trình của tôi có giao diện như hình 1. Bạn có thể lấy mã nguồn của chương trình ở www.echip.com.vn hoặc http://lkn.topcities.com/baomat_vb.zip.

Để thực hiện chương trình bảo mật như vậy, đầu tiên bạn cần tạo cửa sổ ứng dụng (frame) gồm 6 nút lệnh có thuộc tính theo bảng 1. Tiếp theo, bạn thêm đơn thể Module1 để khai báo các hàm API cho toàn bộ chương trình như đoạn mã 1 và định nghĩa các hàm cần thiết như đoạn mã 2. Các hàm ấy được gọi khi ta xử lý các sự kiện nhấn nút lệnh (đoạn mã 3). Vậy là xong, bạn có thể dịch nó ra tập tin EXE và chạy thử được rồi đó.

Button

Caption

Name

1

Disable Ctrl+Alt+Del

cmd_CAD_D

2

Enable Ctrl+Alt+Del

cmd_CAD_E

3

Hide TaskBar

cmdHideTB

4

Show TaskBar

cmdShowTB

5

Hide Icon Desktop

cmdHideID

6

Show Icon Desktop

cmdShowID

Đoạn mã 1

'<CTRL+ALT+DEL>

Private Const SPI_SETSCREENSAVEACTIVE = 17

Const SPI_SCREENSAVERRUNNING = 97

Private Declare Function SystemParametersInfo Lib "user32" _

Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal _

uParam As Long, ByVal lpvParam As Long, ByVal fuWinIni _

As Long) As Long

‘</CTRL+ALT+DEL>

'<Hide TaskBar>

Private Declare Function FindWindow Lib "user32" _

Alias "FindWindowA" (ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" _

(ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _

ByVal X As Long, ByVal Y As Long, ByVal cX As Long, _

ByVal cY As Long, ByVal wFlags As Long) As Long

Const SWP_HIDEWINDOW = &H80

Const SWP_SHOWWINDOW = &H40

‘</Hide TaskBar>

'<DeskTop Icon Hide>

Private Const SW_SHOW = 5

Private Declare Function FindWindowEx Lib "user32" _

Alias "FindWindowExA" (ByVal hWnd1 As Long, _

ByVal hWnd2 As Long, ByVal lpsz1 As String, _

ByVal lpsz2 As String) As Long

Private Declare Function ShowWindow Lib "user32" _

(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

'</DeskTop Icon Show>

 

Đoạn mã 2

'//////TaskBar//////

Function TaskBarHide()

Dim sh

sh = FindWindow("Shell_traywnd", "")

Call SetWindowPos(sh, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)

End Function

Function TaskBarShow()

Dim sh As Long

sh = FindWindow("Shell_traywnd", "")

Call SetWindowPos(sh, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)

End Function

'//////TaslBar////////

 

'//////Desktop Icon//////

Function DesktopIconsShow()

Dim hWnd As Long

hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)

ShowWindow hWnd, 5

End Function

Function DesktopIconsHide()

Dim hWnd As Long

hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)

ShowWindow hWnd, 0

End Function

'/////Desktop Icon//////

 

'/////CTRL+ALT+DEL///////

Private Sub call_SS(huh As Boolean)

Dim go

go = SystemParametersInfo(97, huh, CStr(1), 0)

End Sub

Function ALT_CTRL_DEL_Enabled()

Call_SS (False)

End Function

Function ALT_CTRL_DEL_Disabled()

Call_SS (True)

End Function

'//////CTRL+ALT+DEL/////////

 

Đoạn mã 3

Private Sub cmd_CAD_D_Click()
ALT_CTRL_DEL_Disabled
End Sub

Private Sub cmd_CAD_E_Click()
ALT_CTRL_DEL_Enabled
End Sub

Private Sub cmdHideID_Click()
DesktopIconsHide
End Sub

Private Sub cmdHideTB_Click()
TaskBarHide
End Sub

Private Sub cmdShowID_Click()
DesktopIconsShow
End Sub

Private Sub cmdShowTB_Click()
TaskBarShow
End Sub

Có điều, bản thân chương trình bảo mật của ta lại chưa được bảo vệ, nhỡ người khác tắt đi mất thì đành chịu. Bạn để ý, ta có thể dùng chính cái frame của dự án để bảo vệ các nút lệnh, không cho người khác bấm vào. Để cho "chắc ăn", ta sẽ dùng phím tắt để làm thuộc tính Enable của frame bằng False (hoặc có thể đổi thuộc tính Visible thành False). Cụ thể, bạn định nghĩa thủ tục Form_KeyDown như đoạn mã 4.

Đoạn mã 4
'Shift = 2: CTRL; Shift = 4: ALT; Shift = 1: Shift
'vbKeyX (X: ten cua phim)
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyZ And Shift = 2 Then _
Frame1.Enabled = False
If KeyCode = vbKeyQ And Shift = 2 Then _
Frame1.Enabled = True
End Sub

Bạn nhớ, để sử dụng được phím tắt, bạn phải thêm lệnh như sau vào thủ tục Form_Load:

KeyPreview = True

Bạn có thể tham khảo các phím đặc biệt trong Bảng 2.

Các hằng

Phím tương ứng

vbKeyBack

Phím BackSapce

vbKeyTab

Phím Tab

vbKeyReturn

Phím Enter

vbKeyPause

Phím Pause

vbKeyCapital

Phím CapsLock

vbKeyEscape

Phím Esc

vbKeySpace

Phím SpaceBar

vbKeyPageUp

Phím PageUp

vbKeyPageDown

Phím PageDown

vbKeyHome

Phím Home

vbKeyEnd

Phím End

vbKeyLeft

Phím mũi tên qua trái

vbKeyRight

Phím mũi tên qua phải

vbKeyUp

Phím mũi tên đi lên

vbKeyDown

Phím mũi tên đi xuống

vbKeyPrint

Phím Print Screen

vbKeyInsert

Phím Insert

vbKeyDelete

Phím Delete

vbKeyNumlock

Phím Numlock

vbF1
...
vbKeyF12

Phím F1

...

Phím F12

Như vậy, sau khi nhấn các nút lệnh trong chương trình để bảo vệ máy, ta nhấn CTRL+Z để vô hiệu hóa các nút lệnh ấy (không thể bấm vào các nút lệnh được nữa). Cách này có thể làm cho người khác nhầm tưởng chuột bị hư hay chương trình không chạy nữa vì nút lệnh vẫn bình thường chứ không bị mờ đi. Bạn có thể dùng câu lệnh

Frame1.Visible = False

để làm cho cửa sổ chương trình không còn bất cứ điều khiển nào nữa. Nếu chỉnh thuộc tính BorderStyle của biểu mẫu thành 0 – None, ta làm mất luôn nút bấm Close. Nếu người khác nhấn ALT+F4 thì để đóng chương trình sao nhỉ? Bạn có thể vô hiệu hóa việc đóng chương trình bằng cách thay đổi trị True/False của biến Cancel trong thủ tục Form_QueryUnload. Dĩ nhiên, bạn cần xử lý tình huống nhấn phím nào đó để thoát khỏi chương trình theo cách riêng, chẳng hạn như nhấn CTRL+X.

Tôi chỉ nêu ra vài cách để các bạn tham khảo, mong được sự đóng góp của các bạn.

Lời bàn của CHƯƠNG CAN CHÍP:

Hình như việc vô hiệu hóa tổ hợp phím Ctrl+Alt+Del của hệ thống bảo mật này không có ép-phê đối với các hệ điều hành Windows NT, Windows 2000, Windows XP? Các bạn thử xem sao nhé.

[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn