Pertanyaan API pemindaian virus NET


Saya sedang membangun aplikasi web di mana saya perlu memindai file yang diunggah pengguna untuk virus.

Adakah yang memiliki pengalaman dalam membangun sesuatu seperti ini yang dapat memberikan informasi tentang cara mendapatkan ini dan menjalankannya? Saya menduga paket perangkat lunak antivirus memiliki API untuk mengakses fungsionalitasnya secara programatik, tetapi tampaknya tidak mudah untuk mendapatkan rinciannya.

FYI, aplikasi ditulis dalam C #.


32
2018-06-10 11:46


asal


Jawaban:


Saya mungkin hanya akan membuat panggilan sistem untuk menjalankan proses independen untuk melakukan pemindaian. Ada sejumlah mesin AV baris perintah di luar sana dari berbagai vendor.


7
2018-06-10 11:58



Catatan penting sebelum digunakan: Waspadai perjanjian TOS. Anda memberi mereka akses penuh ke segala sesuatu: "Ketika Anda mengunggah atau mengirimkan konten, Anda memberikan VirusTotal (dan mereka yang bekerja dengan kami) lisensi yang berlaku di seluruh dunia, bebas royalti, tidak dapat dibatalkan, dan dapat ditransfer untuk menggunakan, mengedit, menginangi, menyimpan, mereproduksi, memodifikasi, membuat karya turunan, berkomunikasi, menerbitkan, tampil di depan umum, menampilkan secara publik dan mendistribusikan konten semacam itu. "

Alih-alih menggunakan program Antivirus lokal (dan dengan demikian mengikat program Anda ke produk Antivirus tertentu dan meminta pelanggan Anda untuk menginstal produk Antivirus), Anda dapat menggunakan layanan dari VirusTotal.com

Situs ini menyediakan layanan gratis di mana file Anda diberikan sebagai masukan untuk berbagai produk antivirus dan Anda menerima kembali laporan terperinci dengan bukti-bukti yang dihasilkan dari proses pemindaian. Dengan cara ini solusi Anda tidak lagi terikat pada produk Antivirus tertentu (meskipun Anda terikat pada ketersediaan Internet)

Situs ini juga menyediakan Antarmuka Pemrograman Aplikasi yang memungkinkan pendekatan terprogram untuk mesin pemindaiannya.

Di sini, sebuah perpustakaan VirusTotal.NET untuk API ini
Di sini dokumentasi komprensif tentang API mereka
Di sini dokumentasi dengan contoh-contoh dalam Python antarmuka mereka

Dan karena tidak ada jawaban yang lengkap tanpa kode, ini diambil langsung dari klien sampel yang dikirim bersama perpustakaan 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 ....

}

PENOLAKAN
Saya sama sekali tidak terlibat dengan mereka. Saya menulis jawaban ini hanya karena tampaknya merupakan pembaruan yang baik untuk jawaban 4 tahun ini.


12
2018-02-07 19:45



Anda dapat menggunakan IAttachmentExecute API.

OS Windows menyediakan API umum untuk memanggil perangkat lunak anti virus yang diinstal (Tentu saja, perangkat lunak anti virus yang diperlukan mendukung API).   Tapi, API untuk memanggil perangkat lunak anti virus hanya menyediakan gaya COM Interface, tidak didukung IDispatch.   Jadi, memanggil API ini terlalu sulit dari bahasa .NET dan bahasa skrip mana pun.

Unduh pustaka ini dari sini Anti Virus Scanner untuk .NET atau tambahkan referensi proyek VS Anda dari "NuGet" AntiVirusScanner

Misalnya kode di bawah ini memindai file:

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



Lihatlah di Microsoft Antivirus API. Itu membuat penggunaan COM, yang harus cukup mudah untuk berinteraksi dengan dari .NET. Ini merujuk secara khusus ke Internet Explorer dan Microsoft Office, tetapi saya tidak melihat mengapa Anda tidak akan dapat menggunakan pemindaian on-demand file apa pun.

Semua pemindai modern yang berjalan di Windows harus memahami API ini.


7
2018-06-10 12:23



Berbagai pemindai Virus memiliki API. Salah satu yang saya integrasikan adalah Sophos. Saya cukup yakin Norton memiliki API juga sementara McAfee tidak (dulu). Perangkat lunak virus apa yang ingin Anda gunakan? Anda mungkin ingin memeriksanya Metascan karena akan memungkinkan integrasi dengan banyak scanner yang berbeda, tetapi ada biaya lisensi tahunan. :-P


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



Steker tak tahu malu tetapi Anda mungkin ingin memeriksa https://scanii.com, pada dasarnya deteksi malware / virus sebagai layanan (REST). Oh juga, pastikan Anda membaca dan memahami istilah API para peretas (https://www.virustotal.com/en/documentation/public-api/) - mereka sangat jelas tentang tidak mengizinkan penggunaan komersial.


1
2018-06-22 05:35



Dari pengalaman saya, Anda dapat menggunakan COM untuk berinteraksi dengan beberapa perangkat lunak anti-virus. Tetapi apa yang saya sarankan sedikit lebih mudah, cukup parse hasil pemindaian setelah pemindaian. Yang perlu Anda lakukan adalah memulai proses pemindai dan mengarahkannya ke file / folder yang ingin Anda pindai, menyimpan hasil pemindaian ke dalam file atau mengarahkan ulang stdout ke aplikasi Anda dan mem-parse hasil.


0
2018-06-10 12:01



Anda dapat mencoba menggunakan DevDragon.io.

Ini adalah layanan web dengan API dan .NET client DevDragon.Antivirus.Client yang bisa Anda dapatkan dari NuGet. Scan adalah sub 200ms untuk file 1MB.

Dokumentasi lebih lanjut di sini: https://github.com/Dev-Dragon/Antivirus-Client

Pengungkapan: Saya bekerja untuk mereka.


0
2018-02-08 20:19