Thực nghiệm trên các file *.doc

Một phần của tài liệu Cách tiếp cận mới về virus máy tính (Trang 30 - 48)

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

Một phần của tài liệu Cách tiếp cận mới về virus máy tính (Trang 30 - 48)

Tải bản đầy đủ (PDF)

(48 trang)