web-dev-qa-db-fra.com

API d'analyse de virus .NET

Je construis une application Web dans laquelle je dois analyser les fichiers téléchargés par l'utilisateur à la recherche de virus.

Est-ce que quelqu'un qui a de l'expérience dans la construction de quelque chose comme ceci peut fournir des informations sur la manière de le mettre en place? J'imagine que les progiciels antivirus ont des API pour accéder à leurs fonctionnalités par programmation, mais il semble que ce ne soit pas facile d'avoir une main sur les détails.

Pour votre information, l'application est écrite en C #.

35
Farinha

Je ferais probablement juste un appel système pour exécuter un processus indépendant pour effectuer l'analyse. Il existe un certain nombre de moteurs audiovisuels de ligne de commande de différents fournisseurs. 

8
Joe

Remarque importante avant utilisation: Soyez conscient de l'accord TOS. Vous leur donnez un accès complet à tout: "Lorsque vous téléchargez ou envoyez du contenu, vous accordez à VirusTotal (et à ceux avec qui nous travaillons) une licence mondiale, libre de droits, irrévocable et transférable pour utiliser, modifier, héberger, stocker, reproduire, modifier et créer des œuvres dérivées, communiquer, publier, exécuter publiquement, afficher et distribuer publiquement un tel contenu. " 

Au lieu d'utiliser un programme antivirus local (et donc de lier votre programme à ce produit antivirus particulier et de demander à vos clients d'installer ce produit antivirus), vous pouvez utiliser les services de VirusTotal.com

Ce site fournit un service gratuit dans lequel votre fichier est fourni en tant que contribution à de nombreux produits antivirus et vous recevez un rapport détaillé contenant les preuves résultant du processus de numérisation. De cette façon, votre solution n'est plus liée à un produit antivirus particulier (bien que vous soyez lié à la disponibilité Internet).

Le site fournit également une interface de programmation d'application qui permet une approche par programme de son moteur d'analyse. 

Voici une bibliothèque de VirusTotal.NET pour cette API
Voici la documentation détaillée sur leur API
Voici la documentation avec des exemples en Python de leur interface

Et comme aucune réponse n'est complète sans code, cela provient directement du client exemple fourni avec la bibliothèque 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 ....

}

AVERTISSEMENT
Je ne suis aucunement impliqué avec eux. J'écris cette réponse simplement parce que cela semble être une bonne mise à jour pour ces réponses de 4 ans.

14
Steve

Vous pouvez utiliser l'API IAttachmentExecute. 

Le système d’exploitation Windows fournit l’API commune permettant d’appeler le logiciel antivirus installé (le logiciel antivirus requis prend en charge l’API) . Cependant, l'API permettant d'appeler le logiciel anti-virus fournit uniquement le style d'interface COM, IDispatch non pris en charge . Il est donc trop difficile d'appeler cette API à partir de tout langage .NET et de script.

Téléchargez cette bibliothèque ici Anti Virus Scanner for .NET ou ajoutez une référence à votre projet VS depuis "NuGet" AntiVirusScanner

Par exemple, le code ci-dessous analyse un fichier:

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

Jetez un coup d’œil à la API Microsoft Antivirus . Il utilise COM, qui devrait être assez facile à interfacer avec .NET. Il fait spécifiquement référence à Internet Explorer et Microsoft Office, mais je ne vois pas pourquoi vous ne pourriez pas utiliser pour analyser un fichier à la demande.

Tous les scanners modernes fonctionnant sous Windows doivent comprendre cette API.

7
Thorarin

Divers analyseurs de virus ont des API. Un que j'ai intégré est Sophos. Je suis presque sûr que Norton possède une API, contrairement à McAfee (ce qui était le cas auparavant). Quel logiciel de virus voulez-vous utiliser? Vous voudrez peut-être consulter Metascan car cela permettra une intégration avec de nombreux scanners différents, mais le coût de la licence est annuel. :-P

4
Craig

Prise sans vergogne, mais vous souhaiterez peut-être consulter https://scanii.com , il s’agit essentiellement d’un service de détection de virus/programmes malveillants (REST). Oh, aussi, assurez-vous de lire et de comprendre les termes de l'API de virustotal ( https://www.virustotal.com/en/documentation/public-api/ ) - ils sont très clairs sur le fait de ne pas permettre l'utilisation commerciale. 

1
Rafael Ferreira
//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
Priya Premkumar

J'ai aussi eu cette exigence. J'ai utilisé clamAv anti virus qui fournit une analyse à la demande en envoyant le fichier à leur port d'écoute TCP. Vous pouvez utiliser le package de nuget nClam pour envoyer des fichiers à 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;
        }

Un exemple simple et détaillé est montré ici . Remarque: - La méthode d'analyse synchrone n'est pas disponible dans le dernier nuget. Vous devez coder comme je l'ai fait ci-dessus

Pour tester un virus, vous pouvez utiliser la chaîne ci-dessous dans un fichier txt 

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

0
Nithin Chandran