Vba 如何在没有signtool.exe的情况下创建.vbs签名?

Vba 如何在没有signtool.exe的情况下创建.vbs签名?,vba,vbscript,cryptography,signing,signtool,Vba,Vbscript,Cryptography,Signing,Signtool,引用一个相关的例子 我已经使用了VBScript和JScript文件,看起来散列方法与PowerShell脚本不同。对于PowerShell,内容在散列之前转换为UTF-16LE。对于VB和JS,它不起作用,生成的哈希与signtool计算的哈希不同。我尝试了各种编码(UTF-8,UTF-16BE,UTF-32BE/LE,带或不带字节顺序标记),但仍然不匹配 如果没有signtool.exe(并且没有任何专有和/或Microsoft工具),如何创建.vbs签名块 编辑: 到目前为止,我观察到以

引用一个相关的例子

我已经使用了VBScript和JScript文件,看起来散列方法与PowerShell脚本不同。对于PowerShell,内容在散列之前转换为
UTF-16LE
。对于VB和JS,它不起作用,生成的哈希与signtool计算的哈希不同。我尝试了各种编码(
UTF-8
UTF-16BE
UTF-32BE/LE
,带或不带字节顺序标记),但仍然不匹配

如果没有
signtool.exe
(并且没有任何专有和/或Microsoft工具),如何创建
.vbs
签名块


编辑:

到目前为止,我观察到以下几点:

  • 默认情况下,
    signtool.exe
    使用SHA-1签名。可以使用
    /fd sha256
  • 默认情况下,JSign将添加到签名中,这将抛出一个精确的签名匹配

作为参考,这是使用
signtool.exe
时最终产品签名通常的样子

“SIG”开始签名块
“”SIG“”miim4ayjkozihvcnaqccoim0tccdm0cqexczajbgur
' ... (一堆bas64数据)。。。
“”SIG“”CSU0HJYT7V9OCTFKLKJ7ACB6JHPR0IL9GFDOZRQFNUU
“”SIG“”结束签名块
此签名的目的是允许Windows验证文件的发布者。这不是一个记录良好的标准,但可以在中找到

现代用途可能包括作为独立脚本或应用程序的一部分运行
.vbs
文件。利用Windows内置的验证机制为脚本添加了一层信任,以满足需要它的环境

引用Don Jones“使用VBScript和WMI管理Windows”的第28章

仅运行签名脚本

如果您不想乱弄软件限制策略,还可以依赖WSH自己的内置安全策略。此策略允许您指定仅运行已签名的脚本;未签名的脚本将不可用。这可能是防止大多数未经授权的脚本的最简单和最有效的方法


数字签名非常常见,因此我们不应该受到封闭源代码实用程序的限制,例如
signtool.exe

引用了《JSign》的作者Emmanuel Bourg的话,他提出了这个问题:

我明白了,脚本确实在
UTF-16LE
中进行了散列,但是编码为4字节小尾端整数的无符号文件的大小被添加到散列中


因此,常见的哈希算法将对(
SHA-1
SHA-256
)起作用,但为了传递
WinVerifyTrust
,需要将额外的4个字节添加到哈希数据中。

为什么使用vba标记?为什么不?VBA也支持签名,不是吗?阅读上面关于如何签署脚本的页面。当然,任何程序员都可以运行脚本。不要在Windows组中询问非Windows内容。所以我想为Windows签署一些东西,但不想按照提供的方式来做?