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

问题描述 投票:0回答:1

引用与jsign bug report相关的jsign

我玩过VBScript和JScript文件,看起来像哈希方法不同于PowerShell脚本。对于PowerShell,内容在被散列之前已转换为How to validate authenticode for Javascript in C#。对于VB和JS,它不起作用,生成的哈希值与signtool计算的哈希值不同。我尝试了各种编码(UTF-16LEUTF-8UTF-16BE,带有或不带有字节顺序标记),但仍然不匹配。

[没有UTF-32BE/LE(并且没有任何专有和/或Microsoft工具的人如何创建.vbs签名块?]


编辑:

到目前为止,我已经观察到以下内容:

  • 默认情况下,signtool.exe使用SHA-1签名。可以通过signtool.exe
  • 强制使用SHA-256签名
  • 默认情况下,JSign会将/fd sha256添加到签名中,从而引发完全的签名匹配。

供参考,这是使用some additional properties时最终产品签名的外观。

signtool.exe

此签名的目的是允许Windows验证文件的发布者。它不是文档完善的标准,但是可以在'' SIG '' Begin signature block '' SIG '' MIIM4AYJKoZIhvcNAQcCoIIM0TCCDM0CAQExCzAJBgUr ' ... (a bunch of bas64 data) ... '' SIG '' cSu0HJyT7v9OctFKlKj7aCB6JHPrR0il9GFdoZrQFNuU '' SIG '' End signature block 中找到。

现代目的可能包括将solutions like this文件作为独立脚本或作为应用程序的一部分运行。利用Windows的内置验证机制,可以为需要脚本的环境添加信任层。

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

仅运行签名脚本

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

数字签名非常普遍,因此我们不应受到.vbs之类的封闭源实用程序的限制。

vba vbscript cryptography signing signtool
1个回答
0
投票

引用signtool.exe的JSign的作者Emmanuel Bourg,这激发了这个问题:

我知道了,脚本确实在bug中进行了散列,但是将编码为4字节小端整数的无符号文件的大小添加到了散列中。

因此,普通的散列算法将对UTF-16LEhashable contentSHA-1)起作用,但是为了传递SHA-256,需要将另外的4个字节添加到散列数据中。

© www.soinside.com 2019 - 2024. All rights reserved.