我在SecurityCenter2上查询WMI “SELECT * FROM AntivirusProduct”(我目前在Windows 7上)。
我很难找到 productState 上的数字,包括AntiSpyware和防火墙。有什么参考吗?我想确保我可以在任何Vista或7机器上获得正确的产品状态(如果这些数字因机器而异)。
答案 0 :(得分:3)
没有关于productState
值的官方文档。我能找到的唯一信息是this article,它根据值的逐字节分析对productState
值进行假设。
答案 1 :(得分:1)
productState
值似乎有点设置,除非通过与NDA的NDA,否则未记录。应该可以映射返回的值与安装的产品及其状态。您可以安装单个AV产品,记录其状态,然后让其病毒定义过时,然后检查值的变化情况。似乎有一组有限的典型值。
参考: https://bigfix.me/analysis/details/2998358
以下是我从超过10000个端点的34种不同AV产品中找到的productState
值,这有助于逆向工程的意义:
(十进制,十六进制,位设置)
262144,4000000,1000000000000000000
262160,40010,1000000000000010000
266240,41000,1000001000000000000
270336,42000,1000010000000000000
327680,50000,101000000000000000000
327696,50010,1010000000000010000
331776,51000,1010001000000000000
344064,54000,1010100000000000000
393216,60000,1100000000000000000
393232,60010,1100000000000010000
393472,60100,1100000000100000000
393488,60110,1100000000100010000
397312,61000,1100001000000000000
397328,61010,1100001000000010000
397568,61100,1100001000100000000
397584,61110,1100001000100010000
458752,70000,1110000000000000000
458768,70010,1110000000000010000
462848,71000,1110001000000000000
462864,71010,1110001000000010000
答案 2 :(得分:0)
对于其他任何人,我发现当转换为十六进制时,第三个字符非常可靠地指示是否启用了任何特定的防病毒产品。 (1 =启用,0 =禁用)
这是我编写的用于确定Windows Defender是否已启用的PowerShell单行代码。您可以替换字符串以匹配所需的任何防病毒产品。
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct | ForEach-Object {if($($_.displayName) -eq "Windows Defender"){if("$($([Convert]::ToString($($_.productState), 16)).PadLeft(6,""0""))".Substring(2,1) -eq "1"){Write-Host "Windows Defender is Enabled"}else{Write-Host "Windows Defender is Disabled"}}}
我不能肯定地说每个防病毒产品都能正确报告其产品状态,但我想所有主流产品都必须报告。我可以确认这也适用于Symantec Endpoint Protection。