API de exploración de virus .NET

Estoy construyendo una aplicación web en la que necesito escanear los archivos cargados por el usuario en busca de virus.

¿Alguien con experiencia en construir algo como esto puede proporcionar información sobre cómo poner esto en marcha? Supongo que los paquetes de software antivirus tienen API para acceder a su funcionalidad programáticamente, pero parece que no es fácil conocer los detalles.

FYI, la aplicación está escrita en C #.

Probablemente solo haga una llamada al sistema para ejecutar un proceso independiente para hacer el escaneo. Hay una serie de motores AV de línea de comandos de diversos proveedores.

Nota importante antes del uso: tenga en cuenta el acuerdo de TOS. Les da acceso total a todo: “Cuando carga o envía contenido, le da a VirusTotal (y a aquellos con quienes trabajamos) una licencia mundial, libre de regalías, irrevocable y transferible para usar, editar, alojar, almacenar, reproducir, modificar, crear trabajos derivados, comunicar, publicar, realizar públicamente, mostrar públicamente y distribuir dicho contenido “.

En lugar de utilizar un progtwig Antivirus local (y, por lo tanto, vincular su progtwig a ese producto Antivirus particular y solicitar a sus clientes que instalen ese producto Antivirus), podría utilizar los servicios de VirusTotal.com

Este sitio proporciona un servicio gratuito en el cual su archivo se proporciona como entrada para numerosos productos antivirus y usted recibe un informe detallado con las evidencias resultantes del proceso de escaneo. De esta forma, su solución ya no está vinculada a un producto antivirus en particular (aunque esté vinculado a la disponibilidad de Internet)

El sitio también proporciona una interfaz de progtwigción de aplicaciones que permite un enfoque programático de su motor de exploración.

Aquí una VirusTotal.NET una biblioteca para esta API
Aquí la documentación completa sobre su API
Aquí la documentación con ejemplos en Python de su interfaz

Y dado que ninguna respuesta está completa sin código, esto se toma directamente del cliente de muestra enviado con la biblioteca 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 .... 

}

RENUNCIA
No estoy de ninguna manera involucrado con ellos. Estoy escribiendo esta respuesta solo porque parece ser una buena actualización para estas respuestas de 4 años.

Puede usar la API IAttachmentExecute.

El sistema operativo Windows proporciona la API común para llamar al software antivirus que está instalado (por supuesto, el software antivirus requiere compatibilidad con la API). Sin embargo, la API para llamar al software antivirus proporciona solo el estilo de interfaz COM, IDispatch no compatible. Por lo tanto, llamar a esta API es demasiado difícil desde cualquier lenguaje .NET y script.

Descargue esta biblioteca desde aquí Anti Virus Scanner para .NET o agregue referencia a su proyecto VS desde “NuGet” AntiVirusScanner

Por ejemplo, abajo código escanear un archivo:

 var scanner = new AntiVirus.Scanner(); var result = scanner.ScanAndClean(@"c:\some\file\path.txt"); Console.WriteLine(result); // console output is "VirusNotFound". 

Eche un vistazo a la API de Microsoft Antivirus . Hace uso de COM, que debería ser lo suficientemente fácil para interactuar con .NET. Se refiere específicamente a Internet Explorer y Microsoft Office, pero no veo por qué no podría utilizar para escanear cualquier archivo a petición.

Todos los escáneres modernos que se ejecutan en Windows deberían comprender esta API.

Varios escáneres de virus tienen API. Uno con el que me he integrado es Sophos. Estoy bastante seguro de que Norton tiene una API también, mientras que McAfee no (que solía). ¿Qué software de virus quieres usar? Es posible que desee comprobar Metascan, ya que permitirá la integración con muchos escáneres diferentes, pero hay un costo de licencia anual. :-PAG

 //Scan string start = Console.ReadLine(); System.Diagnostics.Process scanprocess = new System.Diagnostics.Process(); sp.StartInfo.WorkingDirectory = @""; 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(); 

Plug desvergonzado, pero es posible que desee comprobar https://scanii.com , es básicamente detección de malware / virus como un servicio (REST). También, asegúrese de leer y comprender los términos API de virustotal ( https://www.virustotal.com/en/documentation/public-api/ ); son muy claros en cuanto a no permitir el uso comercial.

Según mi experiencia, puede usar COM para interactuar con algún software antivirus. Pero lo que sugeriría es un poco más fácil, simplemente analice los resultados del escaneo después del escaneo. Todo lo que necesita hacer es iniciar el proceso del escáner y señalarlo al archivo / carpeta que desea escanear, almacenar los resultados del escaneo en un archivo o redirigir el estándar a su aplicación y analizar los resultados.

Puede intentar usar DevDragon.io.

Es un servicio web con un cliente .NET y. DevDragon.Antivirus.Client que puedes obtener desde NuGet. Los escaneos son sub 200ms para archivos de 1MB.

Más documentación aquí: https://github.com/Dev-Dragon/Antivirus-Client

Divulgación: trabajo para ellos.

También tuve este requisito. Utilicé antivirus clamAv que proporciona análisis bajo demanda enviando el archivo a su puerto de escucha tcp. Puede usar el paquete nClam nuget para enviar archivos a 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; } 

Aquí se muestra un ejemplo simple y detallado. Nota: – El método de exploración síncrona no está disponible en el último nuget. Tienes que codificar como lo hice anteriormente

Para probar un virus, puede usar la siguiente cadena en un archivo txt

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