Member 13242613 Ответов: 4

Как сделать сканер process MD5# в режиме реального времени?


В настоящее время я пытаюсь построить программу, которая сканирует все запущенные процессы, получает MD5# этого процесса и сравнивает его с файлом .txt, содержащим список хэшей MD5. Если на MD5,# игр, то я сделаю действие, с окно MessageBox.

Беда в том, что я не знаю, как это сделать. Вот некоторый код, который я нашел, но нет никакой функции, которая считывает файл .txt, содержащий хэши MD5, а затем сравнивает хэш с запущенным процессом.

Option Strict On
Option Explicit On

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim procs() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
        Dim f As String

        For Each proc As System.Diagnostics.Process In procs
            f = GetProcessFileName(proc)
            If f.Length > 0 Then
                ListBox1.Items.Add(f)
                ListBox1.Items.Add("MD5: " & GetMD5String(f))
                ListBox1.Items.Add(String.Empty)
            End If
        Next
    End Sub

    Private Function GetProcessFileName(proc As System.Diagnostics.Process) As String
        Dim strRet As String = String.Empty

        Try
            strRet = proc.MainModule.FileName
        Catch ex As Exception
            ' This catch used to ignore "Access is denied" exception.
        End Try
        Return strRet
    End Function

    Private Function GetMD5String(ByVal strFilename As String) As String
        Dim cMD5 = System.Security.Cryptography.MD5.Create
        Dim bytHash As Byte()
        Dim sb As New System.Text.StringBuilder

        Using cStream As New IO.FileStream(strFilename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
            bytHash = cMD5.ComputeHash(cStream)
        End Using

        For Each b In bytHash
            sb.Append(b.ToString("X2"))
        Next

        Return sb.ToString
    End Function

End Class

Итак, как вы выполняете эту задачу?

Спасибо!

Что я уже пробовал:

Посмотрел на различные проекты, чтобы попытаться помочь мне.

4 Ответов

Рейтинг:
5

Member 13242613

Private Sub Mainframe_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       Dim procs() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
       Dim f As String

       For Each proc As System.Diagnostics.Process In procs
           f = GetProcessFileName(proc)
           If f.Length > 0 Then
               ListBox1.Items.Add(f)
               ListBox1.Items.Add("MD5: " & GetMD5String(f))
               ListBox1.Items.Add(String.Empty)
           End If

       Next

   End Sub



Private Function GetProcessFileName(proc As System.Diagnostics.Process) As String
       Dim strRet As String = String.Empty

       Try
           strRet = proc.MainModule.FileName
       Catch ex As Exception
           ' This catch used to ignore "Access is denied" exception.
       End Try
       Return strRet
   End Function



Private Function GetMD5String(ByVal strFilename As String) As String
       Dim cMD5 = System.Security.Cryptography.MD5.Create
       Dim bytHash As Byte()
       Dim sb As New System.Text.StringBuilder
       Dim scanbox As New TextBox
       scanbox.Text = My.Computer.FileSystem.ReadAllText("viruslist.txt").ToString

       Using cStream As New IO.FileStream(strFilename, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)

           bytHash = cMD5.ComputeHash(cStream)
       End Using

       For Each B In bytHash
           sb.Append(B.ToString("X2"))
       Next

       If scanbox.Text.Contains(sb.ToString) Then
           Detect.Show()
       End If

       Return sb.ToString



   End Function



- Сомнение-это боль слишком одинокая, чтобы знать, что вера-его брат-близнец."


Richard MacCutchan

Вы понимаете, что ваши хэши будут неправильными для любого приложения, которое получает действительное обновление от Microsoft? А также любое приложение, которое в настоящее время содержит код вируса или троянского коня, будет продолжать возвращать действительный хэш.

Рейтинг:
2

Patrice T

Цитата:
В настоящее время я пытаюсь построить программу, которая сканирует все запущенные процессы, получает MD5# этого процесса и сравнивает его с файлом .txt, содержащим список хэшей MD5.

Похоже, это была плохая идея с самого начала.
Скорее всего, ваш эталонный MD5 никогда не будет соответствовать. Причина в том, что исполняемый файл диска никогда не совпадает с процессом.
Частью процесса загрузки является разрешение внутренних и внешних скачков в коде. Разрешение этих скачков зависит от адреса загрузки процесса и адресов загрузки внешнего кода, используемого процессом.
В противном случае, чтобы получить один и тот же MD5 для запущенного процесса, это означает, что вся система запустилась точно так же оба раза. это включает в себя точно такое же динамическое выделение памяти для всех предыдущих процессов.


Рейтинг:
2

Jochen Arndt

Ваш текстовый файл должен содержать строки с полным путем и суммой MD5, разделенные разделительной последовательностью. Прочитайте этот файл строка за строкой и разделите каждую строку на часть пути и сумму MD5. Если имя файла совпадает (должно быть нечувствительно к регистру в Windows), верните состояние, указывающее, совпадает ли сумма MD5 или нет. По достижении конца файла верните состояние, в котором файл не был найден.

Написание такого кода является основной задачей на любом языке программирования. Примеры можно найти, поискав в интернете что-то вроде "vb.net чтение текстового файла строка за строкой": Файл.Метод ReadAllLines (Строка) (System.IO)[^]

Разбиение строки на компоненты - это опять же основная задача. Каждый язык программирования предоставляет функции для разделения строк на определенные символы: Строка.Метод Разделения (Char[]) (Система)[^]

В вашем сценарии вы также можете использовать Словарь(TKey, TValue) классовая система.Коллекции.Общий)[^] для выполнения поиска. Он может быть создан при запуске программы из текстового файла или загружен с помощью сериализации, когда вы создали соответствующий сериализованный файл.


Richard MacCutchan

На самом деле это не имеет значения, потому что, как указывает OriginalGriff, предлагаемое приложение никогда не будет работать.

Jochen Arndt

Необходимо отметить, что такое приложение работает не так, как задумано Гриффом.

Но я подумал, что было бы неплохо ответить и на сам вопрос.

Richard MacCutchan

Справедливое замечание.

Member 13242613

Ну, просто заставил его работать.

Рейтинг:
1

OriginalGriff

Это выглядит так, как будто вы пытаетесь создать антивирусный сканер "в памяти", проверяя MD5 исполняемого файла - и это не будет работать, как и тогда, когда вы попробовали его на файлах на диске. И по тем же самым причинам, плюс еще кое-что.

Например, мало того, что MD5 все еще имеет те же проблемы, что и файловая версия, которую вы пробовали: Что случилось с моим кодом filesystemwatcher1?[^] но современное приложение не содержится в одном EXE-файле, и это все, что вам даст этот процесс. Он также загружает некоторое количество - часто довольно большое - DLL-сборок (или собственных DLL-файлов), которые содержат основную часть кода.
Так что, опять же, вы дадите ложное чувство безопасности. Найдите себе проект, который не ожидает, что вирусы будут работать таким примитивным способом: они этого не делают.


Richard Deeming

Я все еще пытаюсь понять, является ли это кукольным счетом для носка. Helpmecodeplz[^], или они оба студенты, которым задали одно и то же домашнее задание.

Тот факт, что один из них находится в Великобритании, а другой-в Австралии, выглядит немного странно. Может быть, учительницу заставили переехать на другой конец света за то, что она задала такую ужасающе плохую домашнюю работу?