2016-11-29 78 views
1

我有一个签名的VBScript。我试图通过命令提示符使用cscript.exe执行它。未签名的脚本执行速度更快(1秒),但如果签名,则需要更多时间(16秒)才能执行。为什么这个签名的脚本比没有签名的脚本需要更多的时间执行?

c:\cscript my.vbs 

我.vbs文件具有以下内容:

Wscript.echo "My very first script." 

'' SIG '' Begin signature block 
'' SIG '' BAcTCEVybGFuZ2VuMSAwHgYDVQQKFBdTaWVtZW5zIEhl 
'' SIG '' YWx0aGNhcmUgR21iSDEgMB4GA1UEAxQXU2llbWVucyBI 
'' SIG '' ZWFsdGhjYXJlIEdtYkgwggEiMA0GCSqGSIb3DQEBAQUA 
'' SIG '' A4IBDwAwggEKAoIBAQC1y/VtChCaIT1wrPyyd6dyIiBv 
'' SIG '' hwlw6P2ojQgyFutYPqGiPStdiA3O2cvrQJaaqu/lXc+v 
'' SIG '' c3tOdSbg2YcqZg5Svpbhr7vxIiN7wd4DGKy8mFdpp23E 
'' SIG '' UTnn9bcDqmEqNtLOfu3hFcyW760NDeXWPgwBvXqaUWUL 
'' SIG '' kEr96LHmz0Zfohs0ER1WPgYkncIx14nd442KULJb8EyM 
'' SIG '' nPvGbv9r4RROSqfGyNwV6EHnQ5TLHieE8n2o7lIEtMSP 
'' SIG '' Ne1Psr7V2QEc9wZe2EEsTaKAwdTP3bhexoMK0dGTXcLf 
'' SIG '' qI0IT3yqCou9X9zuYfpTmB0u0Mpi8Xma6OmO+L5UmXCo 
'' SIG '' bBeXYJFvAgMBAAGjggFdMIIBWTAJBgNVHRMEAjAAMA4G 
'' SIG '' A1UdDwEB/wQEAwIHgDArBgNVHR8EJDAiMCCgHqAchhpo 
'' SIG '' dHRwOi8vc3Yuc3ltY2IuY29tL3N2LmNybDBhBgNVHSAE 
'' SIG '' WjBYMFYGBmeBDAEEATBMMCMGCCsGAQUFBwIBFhdodHRw 
. 
. 
. 
. 
etc 
'' SIG '' End signature block 

我面对这个问题只在机器这是在一个网络。

+0

cscript.exe文件的额外大小必须在运行时间执行之前打开?说实话,这不是真正的火箭科学,更长的文件可以打开。说了15秒的差异似乎很多。 – Lankymart

+0

@Lankymart谢谢你的回复。它不是很大的文件。它只有一个声明,但是它被签名。我知道签名导致了这个问题。我不知道为什么会发生。我只能在几台机器上重现此问题。 – user2328412

+0

文件被签名的事实意味着它包含更多的内容,然后是第一个未签名的文件,因此文件大小增加。 – Lankymart

回答

0

这确实很简单,虽然签署脚本的有用功能确实会引入开销。

  1. 它增加了脚本文件的大小,因为加密的签名哈希存储已到,而这不应该是小的脚本,它将对较大的一个显著的影响(因为哈希是一个问题从内容创建)

  2. 当Windows Scripting Host 5.6或更高版本支持加密签名散列时,采取额外步骤*进行验证。

    1. 从脚本文本中提取证书并签名散列。
    2. 验证证书是否由受信任的根签名,因此是受信任的证书。
    3. 使用证书中的公钥解密签名的散列。
    4. 将解密后的散列与接收到的脚本文本的散列进行比较。

*从Windows Script Host: New Code-Signing Features Protect Against Malicious Scripts

Comment采取措施,OP
我能够重现这个问题只有几台机器。

的可能性在这里是那些“几台机器”需要更长的时间来验证哈希由于像在签署哈希正被验证的时间处理能力,内存或者操作系统加载系统的限制。