« Windows Defender 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:
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:
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.