2009-09-22 5 views
5

Ich habe eine Anwendung und ich versuche sicherzustellen, dass es in einer sicheren Umgebung läuft. Zuerst überprüfe ich, ob Windows is genuine, was es wahrscheinlicher macht, dass der Benutzer es auf dem neuesten Stand hält. Wenn nicht, öffne ich einfach eine Nachricht, die den Benutzer warnt, dass ein mögliches Risiko besteht, da er Windows noch validieren muss.Wie erkennt man, ob ein Virenscanner und/oder eine Firewall installiert ist? (Und ein paar andere sicherheitsrelevante Fragen.)

Jetzt möchte ich ein bisschen mehr tun. Ich möchte auch überprüfen, ob der Benutzer einen Virenscanner installiert hat. Es ist mir egal welcher, solange er einen installiert hat. Dann das gleiche für die Überprüfung, ob eine Firewall installiert ist. Und wenn möglich, möchte ich überprüfen, wann der Benutzer sein Windows/Scanner/Firewall das letzte Mal aktualisiert hat, nur um sicherzustellen, dass es nicht zu alt ist. Also:

1) Wie überprüfe ich, ob ein Virenscanner installiert ist?
2) Wie kann ich feststellen, wann der Virenscanner aktualisiert wurde?
3) Wie kann ich feststellen, wann der Virenscanner die letzte Überprüfung des Gesamtsystems durchgeführt hat?
4) Wie erkenne ich, ob eine Firewall installiert und aktiv ist?
5) Wie überprüfe ich, wann Windows das neueste Update erhalten hat?

Grundsätzlich, wenn meine Anwendung startet, möchte ich einen Bildschirm mit Warnungen (nur einmal pro Tag) nur für den Fall, dass eines dieser Dinge ein Problem haben. Dies liegt daran, dass meine Anwendung mit allen Arten von vertraulichen Informationen arbeitet, die der Benutzer von seinen Kunden sammelt. (Dazu gehören Bankkontonummern, ID-Nummern von Reisepässen, NAW + DOB, Einkommen und vieles mehr.) Wenn das System ein Problem hat, muss der Benutzer grundsätzlich bestätigen, dass er sich dieser Probleme bewusst ist. Es nimmt die mögliche Haftung weg von meiner Anwendung, wenn er fortfährt, wissend, dass sein System möglicherweise unsicher ist ...


Und Sprache? Im Wesentlichen C++ oder Delphi für WIN32-Beispiele und C# für .NET-Beispiele. Es geht mehr um .NET/Windows API/.NET als Sprache.

Antwort

7

ich glaube, Sie die meisten dieser über WMI

So etwas wie dies tun können:

ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter", "SELECT * FROM AntiVirusProduct"); 
ManagementObjectCollection data = wmiData.Get(); 

foreach (ManagementObject virusChecker in data) 
{ 
    // This is the virus checkers name. 
    String virusCheckerName = virusChecker["displayName"]; 
} 

[Sie nicht erwähnt, welcher Sprache, so dass die Probe oben in C#, aber WMI kann von so ziemlich alles gemacht werden]

[Bearbeiten: Sie können das gleiche aber mit "FirewallProduct" statt für Firewall-Informationen tun. Auch für die Anti-Virus, können Sie auf die "ProduktUptoDate" -Eigenschaft auf die Ergebnisse für Informationen über, wenn es auf dem neuesten Stand ist)

Die WMI reference sollte Ihnen helfen, die anderen zu finden. (1, 2, 3, und 4 bin ich ziemlich sicher, sind über WMI verfügbar. 5 Ich bin mir nicht so sicher, aber ich denke, es sollte wahrscheinlich sein)

Sie werden wahrscheinlich WMI Code Creator hilfreich zum Testen und finden herauszufinden, welche Abfragen/Objekte Sie verwenden müssen. Auch Scriptomatic und WMI Admin tools könnten nützlich sein.

+0

C# ist in Ordnung, obwohl die Sprache keine Rolle spielt. Es ist der API/.NET-Aufruf, der zählt. –

+0

Cool, hoffe das hat dann geholfen. Ihre Frage ist ein bisschen schwer zu beantworten, weil es so viele Teile bekommen hat. Sobald Sie WMI ein wenig erforscht haben, wenn Sie immer noch auf einem von ihnen stecken, posten Sie eine neue Frage und konzentrieren Sie sich nur auf einen Punkt. Auf diese Weise erhalten Sie hoffentlich jemanden, der genau weiß, wo er nach diesen Daten suchen soll. Ich kenne WMI nicht sehr gut über ein grundlegendes Niveau hinaus. –

3

Da ich nach einem C++ - und nicht .NET-abhängigen Weg suchte, mischte ich zwischen dieser Antwort und MSDN example: Getting WMI Data from the Local Computer.

Die Befehle, die in Reihenfolge geändert werden müssen, sind die AV-Namen zu erhalten:

  • _bstr_t(L"ROOT\\CIMV2") zu _bstr_t(L"ROOT\\SecurityCenter2"). Denken Sie daran, dass SecurityCenter2 für Win 7, Vista SP2 und darüber hinaus gemäß this ist.Unter Vista SP2 müssen Sie SecurityCenter verwenden.
  • bstr_t("SELECT * FROM Win32_OperatingSystem") zu bstr_t("SELECT * FROM AntivirusProduct")
  • hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); zu hr = pclsObj->Get(L"displayName", 0, &vtProp, 0, 0);.

Dieser geänderte Code wurde geprüft und voll funktionsfähig.

Für eine einfachere Methode können Sie immer über this algorithm iterieren und für Ihre AV namentlich suchen.

Verwandte Themen