如何判断一个文件是否已经有数字签名

tianye606 2005-01-06 05:10:28
如何判断一个文件是否已经有数字签名?
...全文
1186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianye606 2005-01-07
  • 打赏
  • 举报
回复
没有其他容易一点的办法吗,Windows资源管理器里面,选择有数字签名的文件,比如messenger,右键单击,选择属性,就可以看到弹出的属性对话框上有数字签名一项。它也是解析文件得到的吗
roger_ding 2005-01-07
  • 打赏
  • 举报
回复
在Windows系统上,有五种类型的文件可以使用数字签名:
1. .exe 文件
2. .cab 文件
3. .dll 文件
4. .ocx 文件
5. .vbd 文件

vbd格式我不太清楚,exe、dll和ocx都是在PE结构的指定了签名的位置,并且把签名部分附加到exe文件尾部,cab文件的签名也是加到源文件尾部,但文件本身不做修改,所以如果根据cab文件头部的参数得到的文件大小比真正的文件大小要小的话就是加了数字签名,格式如下

ITU-T建议的X.509(ISO/IEC 9594-8)认证证书,结构如下:
域 描述
Version版本号 证书版本
Serial Number序列号
Algorithm Identifier数字签名算法标识
Issuer Name发布证书者
Validity:有效日期 不早于XX/XX/XX,不晚于XX/XX/XX
Subject Name证书持有者名
Subject Public Key Info: 证书持有者公钥 公钥算法标识与公钥串
Optional Fields可选
Extensions扩展

但具体的文档很难找,要money的
robinzo 2005-01-07
  • 打赏
  • 举报
回复
不好意思,我说得不准确,刚才看看MSDN,PE文件的数字签名是放到了PE文件的最后。
MS-DOS header
Offset of PE header (offset 0x3c)
PE header
Section headers
Section
Debug information and certificates (if any)
当PE文件被签名的时候,证书数据会被放到文件的末尾并且PE文件头也会被适当的修改。
即在PE头的最后一个部分中会写入一个结构保存证书的一些信息。
MSDN原文如下:

The PE header begins with a 4-byte sequence, "PE\0\0", that identifies the MS-DOS® header. The MS-DOS header is followed by a standard Common Object File Format (COFF) header. This COFF header is followed by an optional header that is always present on Windows .exe and .dll files. The last field in a PE header is an optional data directory table.
Each entry in the data directory table consists of an IMAGE_DATA_DIRECTORY structure. The fifth structure in the data directory table contains certificate table information.

你可以根据PE头中的数据判断一个PE文件是否存在数字签名
xuzheng318 2005-01-07
  • 打赏
  • 举报
回复
你到msdn里查一查
robinzo 2005-01-07
  • 打赏
  • 举报
回复
你说的是Windows可执行文件和ActiveX控件的签名吧?这些文件的签名数据将被放到文件的资源区,你可以检查这些文件是否有签名数据的资源ID来判断该文件是否被数字签名,资源ID我记不清楚了,我帮你查一下,或者你自己到MSDN中查一下。
robinzo 2005-01-06
  • 打赏
  • 举报
回复
通常被签名的信息是封装在某种格式中的,如PKCS#7等,如果你想知道它是否被签名,只能试着解析这种格式
签名工具 (SignTool.exe) 签名工具是一个命令行工具,用于对文件进行数字签名,验证文件或时间戳文件中的签名。 注意 Microsoft Windows NT、Windows Me、Windows 98 或 Windows 95 中不支持签名工具。 signtool [command] [options] [file_name | ...] 参数 参数 说明 command 命令标志之一,用于指定要对文件执行的操作。 options 用于修改命令标志的选项标志之一。 file_name 要进行签名的文件的路径。 签名工具支持下列命令。 命令 说明 catdb 在目录数据库中添加或移除目录文件。 sign 对文件进行数字签名。 signwizard 启动签名向导。只能为文件名命令行参数指定一个文件。 timestamp 时间戳文件。 verify 验证文件数字签名。 下列选项应用于 catdb命令。 Catdb 选项 说明 /d 指定更新默认目录数据库。如果 /d和 /g 选项都未使用,则签名工具更新系统组件和驱动程序数据库。 /g GUID 指定更新由全局唯一标识符 (GUID) 标识的目录数据库。 /r 从目录数据库中移除指定的目录。如果未指定该选项,签名工具将向目录数据库添加指定的目录。 /u 指定为添加的目录文件自动生成唯一的名称。如有必要,将重命名目录文件,以避免与现有的目录文件发生冲突。如果未指定该选项,签名工具将重写与所添加的目录同名的任何现有目录。 注意 目录数据库用于自动查找目录文件。 下列选项适用于sign命令。 Sign 选项 说明 /a 自动选择最佳的签名证书。如果未指定该选项,签名工具仅查找一个有效的签名证书。 /c CertTemplateName 指定用于对证书进行签名的证书模板名(一个 Microsoft 扩展)。 /csp CSPName 指定包含私钥容器的加密服务提供程序 (CSP)。 /d Desc 指定已签名内容的说明。 /du URL 指定已签名内容的更详细说明的统一资源定位器 (URL)。 /f SignCertFile 指定文件中的签名证书。如果文件是个人信息交换 (PFX) 格式且受密码保护,则使用 /p 选项来指定密码。如果文件不包含私钥,则使用 /csp 和 /k 选项来分别指定 CSP 和私钥容器名。 /i IssuerName 指定签名证书的颁发者的名称。该值可以是整个颁发者名称的子字符串。 /k PrivKeyContainerName 指定私钥容器名。 /n SubjectName 指定签名证书的主体的名称。该值可以是整个主体名称的子字符串。 /p 密码 指定打开 PFX 文件时使用的密码。可以通过使用 /f 选项来指定 PFX 文件。 /r RootSubjectName 指定签名证书必须链接到的根证书的主体名称。该值可以是根证书的整个主题名称的子字符串。 /s StoreName 指定要在搜索证书时打开的存储区。如果未指定该选项,则打开“我的存储区”。 /sha1 哈希 指定签名证书的 SHA1 哈希。 /sm 指定使用一个计算机存储区,而不是使用用户存储区。 /t URL 指定时间戳服务器的 URL。如果该选项不存在,将不会对签名文件执行时间戳操作。如果时间戳操作失败,将生成一个警告。 /u 用法 指定签名证书中必须存在的增强型密钥用法 (EKU)。可以通过 OID 或字符串指定该用法的值。默认用法为“代码签名”(1.3.6.1.5.5.7.3.3)。 下列选项适用于 timestamp 命令。 Timestamp 选项 说明 /t URL 必选。指定时间戳服务器的 URL。要执行时间戳操作的文件必须在以前已经进行了签名。 下列选项适用于 verify 命令。 Sign 选项 说明 /a 指定可以使用所有方法来验证文件。首先,搜索目录数据库以确定是否在目录中对文件进行了签名。如果未在任何目录中对文件进行签名,签名工具将尝试验证文件的嵌入签名。验证可以或不能在目录中进行签名的文件时,建议使用该选项。可以或不能签名的文件示例包括 Windows 文件或驱动程序。 /ad 使用默认的目录数据库查找目录。 /as 使用系统组件(驱动程序)目录数据库查找目录。 /ag CatDBGUID 在由 GUID 标识的目录数据库中查找目录。 /c CatFile 通过名称指定目录文件。 /o Version 通过操作系统版本验证文件。version 参数的格式为 PlatformID:VerMajor.VerMinor.BuildNumber /pa 指定使用默认的身份验证策略。如果未指定 /pa 选项,签名工具将使用 Windows 驱动程序验证策略。此选项不能与 catdb 选项一起使用。 /pg PolicyGUID 通过 GUID 指定验证策略。GUID 对应于验证策略的 ActionID。此选项不能与 catdb 选项一起使用。 /r RootSubjectName 指定签名证书必须链接到的根证书的主体名称。该值可以是根证书的整个主题名称的子字符串。 /tw 指定如果签名没有时间戳,则生成一个警告。 下列选项适用于所有签名工具命令。 全局选项 说明 /q 执行成功时不生成输出,执行失败时生成最少的输出。 /v 执行成功、执行失败或产生警告消息时生成详细输出。 备注 签名工具要求本地计算机上安装了 CAPICOM 2.0 可再发行程序。可以从 http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm 获得 CAPICOM 2.0 可再发行程序。 签名工具的 verify 命令确定签名证书是否由受信任的颁发机构颁发、是否已撤消了签名证书,以及签名证书对于特定策略是否有效(此项可选)。 执行成功时,签名工具返回退出代码 0;执行失败时,签名工具返回退出代码 1;执行完毕并给出警告时,签名证书返回退出代码 2。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧