You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell判断.cat文件是Attestation签名还是WHQL签名

区分Authenticode签名中的WHQL与Attestation签名(无需枚举颁发者)

要区分WHQL签名和Attestation签名,无需枚举所有可能的颁发者名称,可通过检查签名证书的增强密钥用法(EKU)或证书策略中的固定OID来实现——这两类签名的证书会携带微软定义的专属标识OID,比依赖颁发者名称更可靠。

核心原理

  • WHQL签名:微软对通过硬件兼容性测试的驱动颁发的签名,证书包含特定的EKU或策略OID(如1.3.6.1.4.1.311.10.3.5或1.3.6.1.4.1.311.21.20)。
  • Attestation签名:硬件厂商完成自测后提交微软签名的证书,不会包含上述WHQL专属OID。

实现代码

$catalogFilePath = "C:\path\to\your\driver.cat"
$signature = Get-AuthenticodeSignature -FilePath $catalogFilePath

# 先检查签名有效性
if ($signature.Status -ne 'Valid') {
    Write-Host "文件签名无效或未签名"
    return
}

# 定义WHQL专属的OID
$whqlEkuOid = "1.3.6.1.4.1.311.10.3.5"  # Windows Hardware Driver Verification
$whqlPolicyOid = "1.3.6.1.4.1.311.21.20" # Windows Hardware Compatibility Policy

# 检查增强密钥用法(EKU)扩展
$ekuExt = $signature.SignerCertificate.Extensions | Where-Object { $_.Oid.Value -eq "2.5.29.37" }
$hasWhqlEku = $ekuExt -and ($ekuExt.Format(0) -match $whqlEkuOid)

# 检查证书策略扩展
$policyExt = $signature.SignerCertificate.Extensions | Where-Object { $_.Oid.Value -eq "2.5.29.32" }
$hasWhqlPolicy = $policyExt -and ($policyExt.Format(0) -match $whqlPolicyOid)

# 判断签名类型
if ($hasWhqlEku -or $hasWhqlPolicy) {
    Write-Host "该目录文件为WHQL签名"
} else {
    Write-Host "该目录文件为Attestation签名"
}

优势说明

相比枚举颁发者名称的方法,该方案依赖证书的标准扩展字段,不受颁发者名称变更影响,覆盖所有合法的WHQL签名场景,准确性和稳定性更高。

内容的提问来源于stack exchange,提问作者SendETHToThisAddress

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:35:56