API для поиска вирусов .NET - PullRequest
36 голосов
/ 10 июня 2009

Я создаю веб-приложение, в котором мне нужно проверять загруженные пользователем файлы на наличие вирусов.

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

К вашему сведению, приложение написано на C #.

Ответы [ 10 ]

14 голосов
/ 07 февраля 2015

Важное примечание перед использованием: Будьте в курсе соглашения TOS. Вы предоставляете им полный доступ ко всему: «Когда вы загружаете или иным образом отправляете контент, вы даете VirusTotal (и тем, с кем мы работаем) всемирную, бесплатную, безотзывную и безвозвратную лицензию на использование, редактирование, размещение, хранение, воспроизведение, изменение, создавать производные работы, общаться, публиковать, публично исполнять, публично демонстрировать и распространять такой контент ".

Вместо того, чтобы использовать локальную антивирусную программу (и, таким образом, связать вашу программу с этим конкретным антивирусным продуктом и попросить своих клиентов установить этот антивирусный продукт), вы можете воспользоваться услугами VirusTotal.com

Этот сайт предоставляет бесплатную услугу, в которой ваш файл предоставляется в качестве входных данных для многих антивирусных продуктов, и вы получаете подробный отчет с доказательствами, полученными в результате процесса сканирования. Таким образом, ваше решение больше не привязано к определенному антивирусному продукту (хотя вы привязаны к доступности Интернета)

Сайт также предоставляет интерфейс прикладного программирования, который позволяет программно подходить к его модулю сканирования.

Здесь находится VirusTotal.NET библиотека для этого API
Вот исчерпывающая документация об их API
Вот документация с примерами в Python их интерфейса

И так как ни один ответ не является полным без кода, он берется непосредственно из примера клиента, поставляемого с библиотекой VirusTotal.NET

static void Main(string[] args)
{
    VirusTotal virusTotal = new VirusTotal(ConfigurationManager.AppSettings["ApiKey"]);

    //Use HTTPS instead of HTTP
    virusTotal.UseTLS = true;

    //Create the EICAR test virus. See http://www.eicar.org/86-0-Intended-use.html
    FileInfo fileInfo = new FileInfo("EICAR.txt");
    File.WriteAllText(fileInfo.FullName, @"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*");

    //Check if the file has been scanned before.
    FileReport fileReport = virusTotal.GetFileReport(fileInfo);

    bool hasFileBeenScannedBefore = fileReport.ResponseCode == ReportResponseCode.Present;

    Console.WriteLine("File has been scanned before: " + (hasFileBeenScannedBefore ? "Yes" : "No"));

    //If the file has been scanned before, the results are embedded inside the report.
    if (hasFileBeenScannedBefore)
    {
        PrintScan(fileReport);
    }
    else
    {
        ScanResult fileResult = virusTotal.ScanFile(fileInfo);
        PrintScan(fileResult);
    }
    ... continue with testing a web site ....

}

ОТКАЗ
Я никоим образом не связан с ними. Я пишу этот ответ только потому, что он кажется хорошим обновлением для этих четырехлетних ответов.

11 голосов
/ 28 февраля 2016

Вы можете использовать IAttachmentExecute API.

ОС Windows предоставляют общий API для вызова установленного антивирусного программного обеспечения (конечно, антивирусное программное обеспечение должно поддерживать API). Но API для вызова антивирусного программного обеспечения предоставляет только стиль интерфейса COM, не поддерживается IDispatch. Поэтому вызов этого API слишком сложен для любого языка .NET и языка сценариев.

Загрузите эту библиотеку отсюда Антивирусный сканер для .NET или добавьте ссылку на свой проект VS из "NuGet" AntiVirusScanner

Например, приведенный ниже код сканирования файла:

var scanner = new AntiVirus.Scanner();
var result = scanner.ScanAndClean(@"c:\some\file\path.txt");
Console.WriteLine(result); // console output is "VirusNotFound".
8 голосов
/ 10 июня 2009

Я бы, вероятно, просто сделал системный вызов для запуска независимого процесса сканирования. Есть несколько AV-движков командной строки от различных поставщиков.

7 голосов
/ 10 июня 2009

Взгляните на Microsoft Antivirus API . Он использует COM, который должен быть достаточно простым для взаимодействия с .NET. Это относится конкретно к Internet Explorer и Microsoft Office, но я не понимаю, почему вы не сможете использовать для проверки по требованию любой файл.

Все современные сканеры, работающие в Windows, должны понимать этот API.

4 голосов
/ 10 июня 2009

Различные антивирусные сканеры имеют API. Я интегрировал с Sophos. Я почти уверен, что у Нортона есть API, а у McAfee нет (раньше). Какое вирусное программное обеспечение вы хотите использовать? Возможно, вы захотите проверить Metascan , поскольку это позволит интегрировать его со многими различными сканерами, но при этом существует годовая стоимость лицензии. : -Р

1 голос
/ 22 июня 2015

Бесстыдный плагин, но вы, возможно, захотите проверить https://scanii.com, Это в основном обнаружение вредоносных программ / вирусов как (REST) ​​сервис Кроме того, убедитесь, что вы читаете и понимаете термины API virustotal (https://www.virustotal.com/en/documentation/public-api/) - они совершенно ясно о запрете коммерческого использования.

0 голосов
/ 24 июля 2018

У меня тоже было это требование. Я использовал антивирус clamAv, который обеспечивает сканирование по требованию, отправляя файл на порт прослушивания tcp. Вы можете использовать nClam пакет nuget для отправки файлов на clamav.

        var clam = new ClamClient("localhost", 3310);
        var scanResult = clam.ScanFileOnServerAsync("C:\\test.txt"); //any file you would like!
        switch (scanResult.Result.Result)
        {
            case ClamScanResults.Clean:
                Console.WriteLine("The file is clean!");
                break;
            case ClamScanResults.VirusDetected:
                Console.WriteLine("Virus Found!");
                Console.WriteLine("Virus name: {0}", scanResult.Result.InfectedFiles[0].FileName);
                break;
            case ClamScanResults.Error:
                Console.WriteLine("Woah an error occured! Error: {0}", scanResult.Result.RawResult);
                break;
        }

Простой и подробный пример показан здесь . Примечание: - метод синхронного сканирования недоступен в последнем nuget. Вы должны кодировать, как я сделал выше

Для тестирования вируса вы можете использовать приведенную ниже строку в txt файле

X5O! P% @ AP [4 \ PZX54 (P ^) 7CC) 7} $ EICAR-STANDARD-ANTIVIRUS-TEST-FILE! $ H + H *

0 голосов
/ 08 февраля 2018

Вы можете попробовать использовать DevDragon.io.

Это веб-сервис с API и клиентом .NET DevDragon.Antivirus.Client, который вы можете получить из NuGet. Сканирование составляет менее 200 мс для файла размером 1 МБ.

Больше документации здесь: https://github.com/Dev-Dragon/Antivirus-Client

Раскрытие: я работаю на них.

0 голосов
/ 08 февраля 2015
//Scan  
string start = Console.ReadLine();  
System.Diagnostics.Process scanprocess = new System.Diagnostics.Process();  
sp.StartInfo.WorkingDirectory = @"<location of your antivirus>";  
sp.StartInfo.UseShellExecute = false;  
sp.StartInfo.FileName = "cmd.exe";  
sp.StartInfo.Arguments = @"/c antivirusscanx.exe /scan="+filePath;  
sp.StartInfo.CreateNoWindow = true;  
sp.StartInfo.RedirectStandardInput = true;    
sp.StartInfo.RedirectStandardError = true; sp.Start();  
string output = sp.StandardOutput.ReadToEnd();  
//Scan results  
System.Diagnostics.Process pr = new System.Diagnostics.Process();      
pr.StartInfo.FileName = "cmd.exe";  
pr.StartInfo.Arguments = @"/c echo %ERRORLEVEL%";   
pr.StartInfo.RedirectStandardInput = true;    
pr.StartInfo.RedirectStandardError = true; pr.Start();  
output = processresult.StandardOutput.ReadToEnd();  
pr.Close(); 
0 голосов
/ 10 июня 2009

Из моего опыта вы можете использовать COM для взаимодействия с некоторыми антивирусами. Но то, что я хотел бы предложить, немного проще, просто проанализируйте результаты сканирования после сканирования. Все, что вам нужно сделать, это запустить процесс сканирования и указать его на файл / папку, которую вы хотите сканировать, сохранить результаты сканирования в файл или перенаправить стандартный вывод в ваше приложение и проанализировать результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...