Windows Defender mit C# ansprechen 👍 👎

Windows stellt unter der Bezeichnung Antimalware Scan Interface native Funktionalität zur Interaktion mit Windows Defender bereit. Wir werden für C# also – wieder einmal – auf DllImport setzen:
Wrapper implementieren
01020304050607080910111213141516171819202122232425262728293031
public static class AmsiWrapper {    public static Result Scan(string content, string name = null) {        AmsiInitialize(nameof(AmsiWrapper), out IntPtr context);        AmsiScanString(context, content, name, IntPtr.Zero, out Result result);        AmsiUninitialize(context);
return result; }
public enum Result { Clean = 0, NotDetected = 1, Detected = 32768 }

[DllImport("Amsi")] private static extern int AmsiInitialize(string appName, out IntPtr amsiContext);
[DllImport("Amsi")] private static extern int AmsiScanString( IntPtr amsiContext, string @string, string contentName, IntPtr session, out Result result );
[DllImport("Amsi")] private static extern void AmsiUninitialize(IntPtr amsiContext);}
Die Verwendung der empfohlenen Funktion AmsiResultIsMalware ist kurioserweise leider nicht möglich, da diese schlicht nicht in Amsi.dll gefunden werden kann. Es gilt also die Hinweise von AMSI_RESULT zu beachten.

Die Überprüfung gestaltet sich nun jedoch grundsätzlich äußerst einfach durch Übergabe des fraglichen Inhalts:
Wrapper verwenden
0102030405
if(AmsiWrapper.Scan("sehrGefährlicherInhalt") == AmsiWrapper.Result.Detected) {    /* Inhalt als Bedrohung erkannt */} else {    /* Inhalt nicht als Bedrohung erkannt */}
Zum Test der Erkennung potentiell bedrohlicher Inhalte kann beispielsweise die EICAR-Testdatei dienen.

Vor einem tatsächlichen Einsatz sollten mindestens noch Überprüfungen der Rückgabewerte (→ HRESULT) mit entsprechender (Fehler-)Behandlung ergänzt werden.


Projektverweise

Kategorien / Archiv  |  Übersicht RSS-Feed

Schlagworte

Suche