c# windows antivirus

Detectar antivirus en Windows usando C#



(3)

Abra C:/Windows/System32/wbem/wscenter.mof mediante el Bloc de notas. Te ayuda a saber qué espacios de nombres y clases existen:

C # Query :

// SELECT * FROM AntiVirusProduct // SELECT * FROM FirewallProduct // SELECT * FROM AntiSpywareProduct ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root/SecurityCenter2", "SELECT * FROM AntiVirusProduct"); ManagementObjectCollection data = wmiData.Get(); foreach (ManagementObject virusChecker in data) { var virusCheckerName = virusChecker["displayName"]; }

wscenter.mof :

#pragma autorecover #pragma classflags(64) #pragma namespace("////.//root") [NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] Instance of __namespace { Name = "SecurityCenter"; }; [NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] Instance of __namespace { Name = "SecurityCenter2"; }; #pragma namespace("////.//root//SecurityCenter") class AntiVirusProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; [Not_Null] boolean productUptoDate; boolean onAccessScanningEnabled; boolean productHasNotifiedUser; boolean productWantsWscNotifications; uint8 productState; string companyName; string versionNumber; string pathToSignedProductExe; }; class FirewallProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; boolean enabled; boolean productHasNotifiedUser; boolean productWantsWscNotifications; uint8 productState; string companyName; string versionNumber; string pathToSignedProductExe; }; class AntiSpywareProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; [Not_Null] boolean productUptoDate; boolean productEnabled; boolean productHasNotifiedUser; boolean productWantsWscNotifications; uint8 productState; string companyName; string versionNumber; string pathToSignedProductExe; }; #pragma namespace("////.//root//SecurityCenter2") class AntiVirusProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; [Not_Null] string pathToSignedProductExe; [Not_Null] string pathToSignedReportingExe; [Not_Null] uint32 productState; string timestamp; }; class FirewallProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; [Not_Null] string pathToSignedProductExe; [Not_Null] string pathToSignedReportingExe; [Not_Null] uint32 productState; string timestamp; }; class AntiSpywareProduct { [key,Not_Null] string instanceGuid; [Not_Null] string displayName; [Not_Null] string pathToSignedProductExe; [Not_Null] string pathToSignedReportingExe; [Not_Null] uint32 productState; string timestamp; }; #pragma autorecover

¿Hay alguna manera de detectar si hay un software antivirus instalado en una máquina que usa C #? Sé que Security Center detecta software antivirus, pero ¿cómo se puede detectar eso en C #?


La consulta WMI cambia ligeramente en Vista SP2 y más allá.

Pruebe esta parte / root / SecurityCenter2 en lugar de / root / SecurityCenter

Los resultados son ligeramente diferentes también. Aún puede obtener el nombre para mostrar, pero necesitará enmascarar un poco el campo ProductState para determinar si onAccessScanner está habilitado / deshabilitado y el tipo de información upToDate.


Según Microsoft, el Centro de seguridad de Windows utiliza un enfoque de dos niveles para el estado de detección. Un nivel es manual, y el otro nivel es automático a través de Windows Management Instrumentation (WMI). En el modo de detección manual, el Centro de seguridad de Windows busca claves de registro y archivos proporcionados a Microsoft por fabricantes de software independientes. Estas claves de registro y archivos permiten que el Centro de seguridad de Windows detecte el estado del software independiente. En el modo WMI, los fabricantes de software determinan su propio estado del producto y lo informan al Centro de seguridad de Windows a través de un proveedor de WMI. En ambos modos, el Centro de seguridad de Windows intenta determinar si lo siguiente es verdadero:

Un programa antivirus está presente.

Las firmas de antivirus están actualizadas.

El escaneo en tiempo real o escaneo en el acceso está activado para los programas antivirus.

Para los firewalls, el Centro de seguridad de Windows detecta si está instalado un firewall de terceros y si el firewall está encendido o no.

Para determinar la presencia de un software antivirus, puede utilizar WMI haciendo una conexión al espacio de nombres root/SecurityCenter (comenzando con Windows Vista, debe usar el espacio de nombres root/SecurityCenter2 ) y luego consultar la clase WMI de AntiVirusProduct .

Mira este código de muestra

using System; using System.Text; using System.Management; namespace ConsoleApplication1 { class Program { public static bool AntivirusInstalled() { string wmipathstr = @"//" + Environment.MachineName + @"/root/SecurityCenter"; try { ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct"); ManagementObjectCollection instances = searcher.Get(); return instances.Count > 0; } catch (Exception e) { Console.WriteLine(e.Message); } return false; } public static void Main(string[] args) { bool returnCode = AntivirusInstalled(); Console.WriteLine("Antivirus Installed " + returnCode.ToString()); Console.WriteLine(); Console.Read(); } } }