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

如何在PowerShell 7.3+中获取已签名文件的TBS值?

在PowerShell 7.3及以上版本获取带签名文件的TBS哈希值

需求说明

  • 需要获取带数字签名文件的TBS(待签名)哈希值,该值对应ConfigCI模块输出XML中的内容
  • Get-AuthenticodeSignature无法获取此值
  • 目标证书未安装在本地证书存储中
  • 根据微软文档,TBS值为哈希,知名根证书的TBS哈希已内置在Windows Defender应用控制代码中

已尝试步骤

Add-Type -AssemblyName System.Security.Cryptography.X509Certificates

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList <文件路径>

$RawData = $cert.RawData

解决方案

要提取TBS哈希,需解析证书的ASN.1结构,提取TBSCertificate部分后计算哈希。以下是PowerShell实现步骤:

完整代码示例

Add-Type -AssemblyName System.Security.Cryptography.X509Certificates
Add-Type -AssemblyName System.Security.Cryptography

# 加载目标证书(无需安装到本地存储)
$certPath = "<你的证书文件路径>"
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath)

# 解析DER编码的证书,提取TBSCertificate部分
$asnReader = [System.Security.Cryptography.Asn1.AsnReader]::new($cert.RawData, [System.Security.Cryptography.Asn1.AsnEncodingRules]::Der)
$certSequence = $asnReader.ReadSequence()
# 证书序列第一个元素即为TBSCertificate
$tbsBytes = $certSequence.ReadEncodedValue().ToArray()

# 计算TBS部分的SHA256哈希(与ConfigCI输出格式一致)
$hashAlgorithm = [System.Security.Cryptography.SHA256]::Create()
$tbsHash = $hashAlgorithm.ComputeHash($tbsBytes)
# 转换为小写十六进制字符串
$tbsHashHex = [BitConverter]::ToString($tbsHash).Replace("-", "").ToLower()

# 输出结果
Write-Host "TBS哈希值:$tbsHashHex"

关键说明

  • 利用.NET原生的AsnReader解析证书的DER编码结构,无需第三方工具
  • 提取的TBSCertificate是证书中待签名的原始数据块,其哈希即为ConfigCI XML中记录的TBS值
  • 输出的十六进制字符串格式与ConfigCI模块生成的内容完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:55:12