Pregunta 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 #.


32
2018-06-10 11:46


origen


Respuestas:


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.


7
2018-06-10 11:58



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 programa Antivirus local (y por lo tanto vincular su programa a ese producto Antivirus particular y solicitar a sus clientes que instalen ese producto Antivirus), podría usar 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 programació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.


12
2018-02-07 19:45



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í Escáner antivirus para .NET o añada 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".

10
2018-02-28 15:12



Eche un vistazo a la Microsoft Antivirus API. 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.


7
2018-06-10 12:23



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 retirar Metascan ya que permitirá la integración con muchos escáneres diferentes, pero hay un costo de licencia anual. :-PAG


4
2018-06-10 12:23



//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(); 

1
2018-02-07 23:20



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


1
2018-06-22 05:35