Liệt kê tất cả các file có dạng “*.doc” trong thư mục “E:\kn”, thống kê
Hình 3.11. Phát hiện virus đuôi “*.doc” với chương trình “Kill File”
Xóa bỏ những file không cần thiết: Tích vào những file cần xóa bỏ trên danh sách bên trái.
Hình 3.12. Thực hiện chức năng xóa file
Hình 3.13. Kết quả sau khi thực hiện chức năng xóa file
Lựa chọn những file được đánh giá là file tốt, sau đó nhập mật khẩu để lưu những file tốt đó.
Sau khi đã lưu những file tốt thì những lần sau khi tìm kiếm, thống kê những file đó sẽ không xuất hiện nữa.
Hình 3.15. Kết quả sau khi thực hiện chức năng lựa chọn file tốt
Sau khi tiến hành thực nghiệm trên các file “*.com”, “*.exe”, “*.bat”, “*.doc” thì chúng ta có thể đưa ra kết luận là chương trình trên hoàn toàn có khả năng phát hiện các loại virus trên máy tính.
Phương pháp phát hiện virus dựa trên đặc trưng, hành vi trong tương lai sẽ trở thành một trong những xu hướng mới được sử dụng độc lập hoặc kết hợp với các phương pháp phát hiện virus cổ điển nhằm tăng khả năng phát hiện và tiêu diệt virus cho các phần mềm diệt virus [3].
KẾT LUẬN Kết quả đạt được
- Tìm hiểu một cách tổng quan về virus và hacker. - Đưa ra cách phát hiện virus mới dựa trên đặc trưng. - Xây dựng chương trình thực nghiệm.
Hạn chế
- Do thời gian hạn chế nên việc nghiên cứu chưa sâu, chưa giải quyết được hết các khả năng, giao diện chương trình chưa đẹp.
- Ngoài ra do khả năng của ngôn ngữ lập trình là: Không hỗ trợ unicode, không mạnh trong hỗ trợ internet nên chương trình còn có một số phần chưa tốt như: Chương trình không xử lý được với file có tên chứa dấu tiếng Việt, chưa làm được phần phát hiện virus dựa trên hành vi nguy hiểm,…
Hướng phát triển
- Hoàn thiện chương trình phát hiện virus dựa trên hành vi: Nếu một chương trình liên tục thực hiện các hành động nguy hiểm (Tắt chức năng hiển thị file ẩn, tắt chức năng task manager, liên kết đến những trang web lạ, tự động cài những phần mềm lạ,…) thì kết luận đó là virus;
- Bổ sung modun gỡ bỏ virus;
- Thêm chức năng phát hiện, ngăn chặn hacker;
- Kết hợp với một số công nghệ mới khác như: điện toán đám mây, hệ miễn dịch nhân tạo.
TÀI LIỆU THAM KHẢO
[1]. Triệu Hải Long, Bước đầu nghiên cứu về một số loại virus máy tính, Khóa luận tốt nghiệp (2010)
[2]. Ngô Anh Vũ, Virus tin học - huyền thoại và thực tế, NXB Thành phố Hồ Chí Minh (2006). [3]. Các website (5/2011): http://Wikipedia.org http://diendantinhoc.com http://virusvn.com http://coltech.vnu.edu.vn http://pcworld.com.vn http://kaspersky.nts.com.vn
PHỤ LỤC
Phần này liệt kê mã nguồn của một số modun chính. Bạn đọc có thể tham khảo mã nguồn đầy đủ của chương trình tại địa chỉ:
1. Hiển thị các tiến trình đang hoạt động
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
If hProcess <> 0 Then
lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2) If lRet <> 0 Then
ModuleName = Space(MAX_PATH) nSize = 500
Dim memFilename As String
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize) memFilename = Left(ModuleName, lRet)
memFilename = LCase(memFilename)
memFilename = Replace(memFilename, "\??\", "")
memFilename = Replace(memFilename, "\systemroot", Environ("windir")) memFilename = Replace(memFilename, "\\", "\")
Dim hFile As Long, FileInfo As BY_HANDLE_FILE_INFORMATION hFile = CreateFile(memFilename, 0, 0, ByVal 0&, OPEN_EXISTING, 0, ByVal 0&)
GetFileInformationByHandle hFile, FileInfo CloseHandle hFile
Set itmAdd = Me.ListView1.ListItems.Add(, , Format(ProcessIDs(i), "000000"))
itmAdd.SubItems(1) = Left(memFilename, lRet)
Set itmAdd = Nothing End If
End If
lRet = CloseHandle(hProcess)
2. Tìm kiếm file
Function FindFilesAPI(path As String, SearchStr As String, FileCount As Long,
DirCount As Long, ten() As String)
Dim filename As String ' Walking filename variable... Dim DirName As String ' SubDirectory Name
Dim dirNames() As String ' Buffer for directory name entries Dim nDir As Integer ' Number of directories in this path Dim i As Integer ' For-loop counter...
Dim hSearch As Long ' Search Handle Dim WFD As WIN32_FIND_DATA Dim Cont As Long
ReDim dem(1000000)
If Right(path, 1) <> "\" Then path = path & "\" nDir = 0
ReDim dirNames(nDir) Cont = True
hSearch = FindFirstFile(path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then Do While Cont
DirName = StripNulls(WFD.cFileName)
If (DirName <> ".") And (DirName <> "..") Then
If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
DirCount = DirCount + 1 nDir = nDir + 1
ReDim Preserve dirNames(nDir) End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory. Loop
Cont = FindClose(hSearch) End If
hSearch = FindFirstFile(path & SearchStr, WFD) Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then While Cont
filename = StripNulls(WFD.cFileName)
If (filename <> ".") And (filename <> "..") Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
FileCount = FileCount + 1
ten(FileCount) = path & filename End If
Cont = FindNextFile(hSearch, WFD) ' Get next file Wend
Cont = FindClose(hSearch) End If
If nDir > 0 Then
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount, ten)
Next i End If
End Function 3. Thống kê file
Private Sub Command2_Click()
Me.ListView2.ListItems.Clear
Dim SearchPath As String, FindStr As String Dim filesize As Long
Dim NumFiles As Long, NumDirs As Long Dim k As Long
Dim i, j As Integer
ReDim ten(1000000) As String ReDim ten1(1000000) As String ReDim dem(1000000) As Long ReDim bonho(1000000) As Long ReDim ngay(1000000) As Date Screen.MousePointer = vbHourglass SearchPath = Dire.path
FindStr = Me.Combo2
filesize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs, ten) sapxep ten, NumFiles
For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) = 0 Then If FileLen(ten(i)) > FileLen(ten(i + 1)) Then hoanvi ten(i), ten(i + 1) End If
Next k = 0
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) <> 0 Then k = k + 1
ten1(k) = ten(i) End If
Next i
ReDim tendate(1000000) As String For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) = 0 Then
If FileDateTime(ten(i)) > FileDateTime(ten(i + 1)) Then hoanvi ten(i), ten(i + 1)
End If Next k = 0
For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) <> 0 Then k = k + 1 tendate(k) = ten(i) End If Next For i = 1 To k dem(i) = 0 Next For i = 1 To k For j = 1 To NumFiles
If StrComp(getfilename(ten1(i)), getfilename(ten(j))) = 0 Then dem(i) = dem(i) + 1
bonho(i) = bonho(i) + FileLen(ten(j)) ngay(i) = ngay(i) + FileDateTime(ten(j))
End If Next j Next i
For i = 1 To k
bonho(i) = Abs(bonho(i) / dem(i)) ngay(i) = CDate(ngay(i) / dem(i)) Next i
Dim it As ListItem
ReDim bn(1000000) As Long ReDim ng(1000000) As Long
ReDim nguyhiem(1000000) As Long For i = 1 To k
If dem(i) >= Me.HScroll1 Then
bn(i) = Abs(FileLen(ten1(i)) - bonho(i))
ng(i) = Abs(DateDiff("n", ngay(i), FileDateTime(tendate(i)))) If bn(i) = 0 Then
If dem(i) <> 1 Then bn(i) = maxsize Else
bn(i) = Round(1000 \ bn(i)) End If
If ng(i) = 0 Then
If dem(i) <> 1 Then ng(i) = maxdate Else
ng(i) = Round(10000 \ ng(i)) End If
End If Next i
nguyhiem(i) = bn(i) + ng(i) + dem(i) * 10 Next i
For i = 1 To k - 1 For j = i + 1 To k
If nguyhiem(i) < nguyhiem(j) Then hoanviso nguyhiem(i), nguyhiem(j) hoanviso bonho(i), bonho(j)
hoanvingay ngay(i), ngay(j) hoanviso bn(i), bn(j)
hoanviso dem(i), dem(j) hoanviso ng(i), ng(j) hoanvi ten1(i), ten1(j) hoanvi tendate(i), tendate(j) End If Next j Next i ReDim kt(1000000) As String Dim tg As String Dim h As Long Dim f, d As Integer f = FreeFile h = 0
Open "filetot.txt" For Input As f While Not (EOF(f))
Line Input #f, tg h = h + 1
kt(h) = tg Wend
Close #f d = 0
For i = 1 To k
If dem(i) >= Me.HScroll1 Then For j = 1 To h
If StrComp(getfilename(ten1(i)), kt(j)) = 0 Then d = d + 1 Next j
If d = 0 Then
Set it = Me.ListView2.ListItems.Add(, , getfilename(ten1(i))) it.SubItems(1) = dem(i)
it.SubItems(2) = Abs(bonho(i) - FileLen(ten1(i)))
it.SubItems(3) = Abs(DateDiff("n", ngay(i), FileDateTime(tendate(i)))) it.SubItems(4) = nguyhiem(i) Set it = Nothing End If d = 0 End If Next i Screen.MousePointer = vbDefault End Sub 4. Ghi lại file tốt
Private Sub Command5_Click()
Dim SearchPath As String, FindStr As String Dim filesize As Long
Dim NumFiles As Long, NumDirs As Long Dim k As Long, i, j As Integer
ReDim ten(1000000) As String ReDim ten1(1000000) As String
ReDim dem(1000000) As Long ReDim bonho(1000000) As Long ReDim ngay(1000000) As Date Screen.MousePointer = vbHourglass SearchPath = Dire.path
FindStr = Me.Combo2
filesize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs, ten) sapxep ten, NumFiles
For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) = 0 Then If FileLen(ten(i)) > FileLen(ten(i + 1)) Then hoanvi ten(i), ten(i + 1) End If
Next k = 0
For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) <> 0 Then k = k + 1
ten1(k) = ten(i) End If
Next i
ReDim tendate(1000000) As String For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) = 0 Then
If FileDateTime(ten(i)) > FileDateTime(ten(i + 1)) Then hoanvi ten(i), ten(i + 1)
End If Next k = 0
For i = 1 To NumFiles
If StrComp(getfilename(ten(i)), getfilename(ten(i + 1))) <> 0 Then k = k + 1 tendate(k) = ten(i) End If Next For i = 1 To k dem(i) = 0 Next For i = 1 To k For j = 1 To NumFiles
If StrComp(getfilename(ten1(i)), getfilename(ten(j))) = 0 Then dem(i) = dem(i) + 1
bonho(i) = bonho(i) + FileLen(ten(j)) ngay(i) = ngay(i) + FileDateTime(ten(j)) End If
Next j Next i
For i = 1 To k
bonho(i) = Abs(bonho(i) / dem(i)) ngay(i) = CDate(ngay(i) / dem(i)) Next i
Dim it As ListItem
ReDim bn(1000000) As Long ReDim ng(1000000) As Long
ReDim nguyhiem(1000000) As Long For i = 1 To k
bn(i) = Abs(FileLen(ten1(i)) - bonho(i))
ng(i) = Abs(DateDiff("n", ngay(i), FileDateTime(tendate(i)))) If bn(i) = 0 Then
If dem(i) <> 1 Then bn(i) = maxsize Else
bn(i) = Round(1000 \ bn(i)) End If
If ng(i) = 0 Then
If dem(i) <> 1 Then ng(i) = maxdate Else
ng(i) = Round(10000 \ ng(i)) End If
End If Next i
'muc do nguy hiem For i = 1 To k
nguyhiem(i) = bn(i) + ng(i) + dem(i) * 10 Next i
For i = 1 To k - 1 For j = i + 1 To k
If nguyhiem(i) < nguyhiem(j) Then hoanviso nguyhiem(i), nguyhiem(j) hoanviso bonho(i), bonho(j)
hoanvingay ngay(i), ngay(j) hoanviso bn(i), bn(j)
hoanviso dem(i), dem(j) hoanviso ng(i), ng(j) hoanvi ten1(i), ten1(j)
hoanvi tendate(i), tendate(j) End If Next j Next i ReDim good(1000000) Dim m As Long m = 0 For i = 1 To k
If dem(i) >= Me.HScroll1 Then m = m + 1 good(m) = getfilename(ten1(i)) End If Next i ReDim kt(1000000) As String Dim f As Integer Dim tg As String Dim h As Long Dim mk As String
mk = InputBox("Please enter to password", "Password") If mk = "12345" Then
f = FreeFile m = 0
Open "filetot.txt" For Input As f While Not (EOF(f))
Line Input #f, tg h = h + 1
kt(h) = tg Wend
Close #f
Dim d As Integer d = 0
f = FreeFile
Open "filetot.txt" For Output As f
For i = 1 To Me.ListView2.ListItems.Count If Me.ListView2.ListItems(i).Checked Then For j = 1 To h
If StrComp(good(i), kt(j)) = 0 Then d = d + 1 Next j
If d = 0 Then Print #f, good(i) End If d = 0 Next i For i = 1 To h Print #f, kt(i) Next i Close #f Else
MsgBox "Password not correct" End If
Screen.MousePointer = vbDefault