2012-08-07 32 views
0

根据我对数字签名的理解,当代码签名的exe文件中“签名者”修改了PE本身。我注意到它将证书内容添加到PE的末尾,并且(显然)为头添加了某种引用。复制数字签名?

我的问题是:这有多安全?是否有人能够对可执行文件进行反向工程,从而将其伪造成自己的可执行文件,从而伪造数字签名?

+0

不,因为数字签名还包含正在签名的散列。如果更改内容,则最初使用的散列不匹配。 – vcsjones 2012-08-07 20:13:28

+0

代码签名是公钥/私钥操作。反向工程的可执行文件不会给你任何东西,除非你也有最初签署exe的私钥 – 2012-08-07 20:16:01

+0

@vcsjones:有道理,但如果我能够控制散列,它真的很重要吗? – asudhak 2012-08-07 20:17:36

回答

7

代码签名是一种公私密钥操作。签名操作计算.exe文件的散列(减去存储签名的位),然后使用签名者的私钥加密散列。

在客户端验证时,客户端将重做哈希计算,并使用公钥解密存储的签名。如果这两个哈希匹配,那么这个EXE没有被篡改。

该文件的唯一位是加密的签名 - everythign其他存储在清除。没有什么能阻止你将exe文件拆分并将它(或其中的一部分)塞进另一个.exe。

签名不是为了防止盗窃 - 它在那里检测到篡改。

+0

在附注中,我注意到,Windows可执行文件中的数字签名不能阻止任何内容。它看起来只是用来查看可执行文件是否被篡改。我可能是错的,或者我的设置可能已经以某种方式进行了配置,但是Windows甚至不会抛出一个表明数字签名无效的错误。可以通过查看签名的详细信息来查明数字签名是否有效。我对吗? – asudhak 2012-08-08 16:54:48