¿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#?Detectar antivirus en Windows usando C#
Respuesta
De acuerdo con 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, Windows Security Center intenta determinar si lo siguiente es verdadero:
Un programa antivirus está presente.
Las firmas de los antivirus están actualizadas.
El escaneado en tiempo real o en acceso está activado para los programas antivirus.
Para los firewalls, Windows Security Center detecta si un firewall de terceros está instalado y si el firewall está encendido o no.
Así que con el fin de determinar la presencia de un software antivirus, puede utilizar el WMI hacer una conexión con el root\SecurityCenter
espacio de nombres (a partir de Windows Vista debe utilizar el espacio de nombres root\SecurityCenter2
), y luego una consulta de la clase WMI AntiVirusProduct
.
mirada a este código de ejemplo
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();
}
}
}
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. 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.
Abra C:\Windows\System32\wbem\wscenter.mof
con el Bloc de notas. Le ayuda el que existen espacios de nombres y clases:
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
- 1. Detectar Windows o Linux en C, C++
- 2. Delphi: ¿cómo puedo detectar la presencia del software antivirus?
- 3. Procesadores de recuento usando C++ en Windows
- 4. Software Antivirus Windows Server 2008 con un API
- 5. Integración antivirus en PHP
- 6. detectar la terminación del programa (C, Windows)
- 7. Cómo detectar IE Modo protegido usando C#
- 8. Ejecutar el programa antivirus mediante programación usando delphi
- 9. Detectar USB insertado en Windows
- 10. Java Antivirus ... ¿es posible? ¿Cómo?
- 11. Función de suspensión en Windows, usando C
- 12. Antivirus Falso positivo en mi ejecutable
- 13. Detectar archivo leído en C#
- 14. Bluetooth: detectar evento usando Bluez
- 15. Detectar Windows de forma segura en Python
- 16. Animación simple usando C#/Windows Forms
- 17. Desarrollo de Windows usando Objective-C
- 18. .NET SplitContainer usando C# Windows Forms
- 19. Terminación de un proceso antivirus protegido
- 20. ¿Cómo detectar computadoras Apple usando user-agent?
- 21. Usando Git en Windows
- 22. C# compilado en mono - Detectar OS
- 23. ¿Cómo detectar la versión de IIS usando C#?
- 24. Detectar código muerto en C#
- 25. ¿Cómo obtener información de hardware en Windows usando C++?
- 26. ¿Alguna manera de apagar el "internet" en Windows usando C#?
- 27. Sistemas de negociación de baja latencia usando C++ en Windows?
- 28. ¿Cómo puedo decirle al "centro de seguridad de Windows" que soy un "antivirus"?
- 29. Cómo escanear un archivo con antivirus al cargarlo en Java?
- 30. Integración antivirus con la aplicación .net
¿Hay alguna manera de saber si el antivirus se actualiza en el sistema en windows [email protected] ng.47 – TechBrkTru
Puede usar WMI; vea [aquí] (http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/bd97d9e6-75c1-4f58-9573-9009df5de19b). – SLaks