(转) C#如何验证一个PE文件的数字签名是否正确(1)

本文转自 http://www.blogbus.com/softone-logs/105678346.html

作者:Eckel Chung blog地址:http://softone.blogbus.com/  转载请保留

—————————————————————————

(1)前言

和网上大量的讨论如何制作数字签名和验证数字签名的文章本同,本文使用微软自带的API进行PE文件数字签名有效性的验证,使用语言C#。

我们可以在windows系统下直接右键查看某个PE文件数字签名的有效性,如下图:

数字签名        这让我们想到,微软必然自带了对PE文件数字签名的验证办法,经过查找资料,确定其来自下图所示的dll文件里的WinVerifyTrust函数。

wintrust.dll      该函数在C#里的调用原型如下:

 

关于这个函数的使用,可以查看MSDN上的说明

(2) 构建将要用到的数据结构

根据微软官方材料,我们在使用这个函数前还得先准备几个数据结构:

(3)构建我们的验证类

注意这里,WinVerifyTrust的返回值有多种,0表示数字签名各项指标都是正常的,其他代码我们下一部分再来讨论。

实测通过:

验证结果

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请输入正确的验证码