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