`
wezly
  • 浏览: 485364 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

签名EXE文件

阅读更多

 

上篇

摘要

人家微软的软件都有数字签名,感觉好酷哦,我们写的软件也要弄个签名炫一炫。

带有签名的软件非常酷

在QQ的安装文件上右击,选“属性”,就可以看到QQ的数字签名了。

使用Process ExplorerSREng查看系统中正在运行的程序时,也可以验证程序是否有数字签名,如果我们的程序显示“Unable to verify”,那显得多不专业呀。


给自己的程序加上签名

上图中的那个MathLover121.exe是我在上学的时候用C++ Builder写的一个小软件,不用说,它肯定是没有签名的了。下面就来演示一下如何使用微软的签名工具SignTool签名这个EXE文件。要进行签名,首先要有数字证书才行。如果你的公司已经申请了数字证书,那就再好不过了;但是鉴于很多朋友手中没有数字证书,这里就先介绍一下如何在CA365上申请一个免费的数字证书。

申请免费的数字证书

Step1: 登录www.ca365.com,在“免费证书”栏中点击“用表格申请证书”链接。


Step2: 填表,基本上可以瞎填的,没人管。


Step3: 在上一步按“提交”按钮后稍等一会儿,会自动进入下载证书的页面,点击“下载并安装证书”链接下载并保存证书,默认的文件名是“NewCert.der”。


Step4: 安装证书。
在“NewCert.der”文件上右击,选择“安装证书”即可。


接下来就可以开始签名EXE文件了。

使用SignTool签名EXE文件

 

Step1: 通过“开始菜单|程序|Microsoft Visual Studio 2005|Visual Studio Tools|Visual Studio 2005 命令提示”打开命令行窗体。
Step2: 执行“signtool signwizard”。
Step3: 在“数字签名向导”中点击下一步,来到“文件选择”页,选择需要签名的文件。注意如果文件放在了桌面下会提示“指定的文件不存在或为只读文件”的错误信息,可能是文件夹权限的问题。
Step4: 点击“下一步”,来到“签名选项”页,选择“典型”即可。
Step5: 点击“下一步”,来到“签名证书”页,点击“从存储区选择...”按钮,然后选择我们刚刚申请并安装的那个证书。
Step6: (可选)点击下一步,在“数据描述”页可以填写一些描述信息。
Step7: (可选)点击下一步,在“给数据盖时间戳”页,填写时间戳服务的URL。这里有两个免费的时间戳服务器URL:http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.wosign.com/timestamp
Step8: 点击“下一步”,在“正在完成数字签名向导”页最后浏览一下所有的设置,确认无误后点击“完成”按钮开始签名。
Step9: 在弹出的“正在用您的专用交换密钥签名数据”对话框上按“确定”按钮。
Step10: 看到“数字签名向导已成功完成”信息,说明签名成功了。


现在,在Windows的资源管理器中右击MathLover121.exe选“属性”,就可以看到多了一个“数字签名”页。点击“详细信息”按钮可以查看证书的详细信息。


在Process Explorer里也可以验证签名了。


不过如果把这个已签了名的MathLover121.exe复制到我的同事的计算机上用Process Explorer验证签名,会仍然显示“Unable to verify”  _| ̄|○ (好像有砖头飞来的声音,我闪先~~),这是因为 ca365的根证书默认并没有安装在Windows系统的“受信任根证书颁发机构”列表中。在我的机器上能验证成功是因为我事先已经导入了CA365的根证书。关于数字证书和根证书的关系可以看我的白话数字签名(2)
可以在“开始菜单 | 运行...”里执行“certmgr.msc”查看“受信任根证书颁发机构”列表。


所以如果你希望Windows信任你就乖乖的向这个列表中的公司交钱吧,例如QQ的安装文件就是使用的 VeriSign 的代码签名证书。

还有一个奇怪的问题...

但是如果我们在“C:\Program Files\Internet Explorer\IEXPLORE.EXE”上面右击,再点击“属性”,可以看到并没有显示数字签名页,但是在Process Explorer中却可以成功验证签名,这是怎么回事呢?呵呵,先卖个关子,下篇再讲 :)

 

 

下篇

摘要

如果我们在IEXPLORE.EXE上面右击,再点击“属性”,可以看到并没有显示数字签名页,但是在Process Explorer中却可以成功验证签名,这是怎么回事呢?

签名EXE文件的两种方法

上篇写到如果我们在IEXPLORE.EXE上面右击,再点击“属性”,可以看到并没有显示数字签名页,但是在Process Explorer中却可以成功验证签名,这是怎么回事呢?这是因为有两种签名EXE文件的方法:1. 将签名数据嵌入到EXE文件内部,就是上篇里介绍的那种方法。2. 将签名数据存放到一个 .cat 文件中,Windows绝大多数程序和驱动都是使用的这种方法,所以在文件属性里看不到签名信息,却可以使用Process Explorer成功验证签名。下面就来介绍一下这种签名方法。

使用安全编录(.cat)文件签名EXE文件

Step1: 首先,为了方便,先在C盘下创建一个目录“C:\SignDemo”。然后将一个未签名的EXE文件“MathLover121.exe”复制到这个目录下。
Step2: 创建一个文本文件,命名为“123soft.cdf”,内容如图所示。

Step3: 下载这个MakeCat.rar,解压缩,得到MakeCat.exe,将它复制到“C:\SignDemo”。

注 MakeCat.exe是随3.0的SDK发布的,所以为了方便我把它上传到了这里。

Step4: 打开命令行,使用“makecat -v 123soft.cdf”命令生成“123soft.cat”文件。
Step5: 打开命令行,执行“signtool signwizard”命令,打开签名向导,使用和上篇同样的方法签名“123soft.cat”文件。

Step6: 测试123soft.cat文件里面是否已包含了MathLover121.exe的数字签名。方法是使用“signtool verify -v -pa -c 123soft.cat mathlover121.exe”命令。

Step7: 使用自动模式(即不显式给出CAT文件)验证签名,之所以会失败是因为我们还没有将123soft.cat导入操作系统的安全编录数据库。
Step8: 将123soft.cat添加到操作系统的安全编录数据库。在命令行执行“signtool catdb -v 123soft.cat”命令即可。
Step9: 重做Step7的测试,发现可以成功验证签名了。
Step10: 在Process Explorer里面验证MathLover121.exe的签名,发现可以验证成功。
注意 在上面Step2中,123soft.cdf中的文件列表一定要写成“<hash>MathLover=MathLover121.exe”,如果写成“MathLover=MathLover121.exe”也可以成功生成123soft.cat文件,但是验证签名会失败,提示的错误信息为“找不到指定文件”。我猜想这是因为签名验证程序是通过MathLover121.exe的散列值来查找签名数据的,而只有通过<hash>标记才能在生成CAT文件的时候使用MathLover121.exe的散列值替换掉“MathLover”这个名称。关于摘要算法可以参考我的白话数字签名(2)


签名MP3

嵌入式的签名方式只能签名有限的几种文件格式,但是使用CAT文件的方式却可以签名任意格式的文件。下面就来演示一下签名MP3文件的过程。
Step1: 把一个MP3文件复制到“C:\SignDemo”。
Step2: 在123soft.cdf文件里添加这个文件名。
Step3: 按照前面的方法重新生成、签名CAT文件。
Step4: 验证签名。



参考文献

Kernel-Mode Code Signing Walkthrough
Microsoft Authenticode 参考指南

 

分享到:
评论

相关推荐

    触摸屏电子签名exe文件

    触摸屏电子签名exe文件是一种专为触摸设备设计的软件应用,它允许用户通过手指或专用触控笔在屏幕上进行电子签名。这样的系统广泛应用于各种场合,如零售店、银行、医疗机构和公共服务机构,以实现无纸化办公和提高...

    超级文件签名工具dll文件数字签名exe文件数字签名xll文件数字签名工具

    可用于与对dll文件、exe文件和xll文件等的数字签名。 解决dll文件、exe等文件在调用时提示没有数字签名的问题 通过选择.pdf证书文件,输入证书需要的密码,即可选择文件进行 数字签名。 资源期限至2024-12-31

    EXE资源修改器--修改文件内容文件签名等等 强大

    1. 可执行文件(EXE)结构:EXE文件是Windows操作系统中的应用程序载体,包含了程序的代码、数据和元信息。它的内部结构包括PE(Portable Executable)格式,由头文件、节区、导出和导入表、资源表等多个部分组成。 ...

    验证exe文件数字签名

    验证exe文件数字签名,使用API。很简单的DEMO。

    signtool.exe文件签名

    签名工具 SignTool_exe:对exe,dll等文件签名

    数字签名文件,数字签名文件

    在文件列表中,我们看到"AddSign.exe",这可能是一个用于添加数字签名到其他文件的工具。这类工具可以帮助开发者或系统管理员为他们的软件创建和应用数字签名,从而提高用户的信任度。AddSign.exe可能需要用户输入...

    根证书制作成exe文件

    3. 配置安装逻辑:在exe文件中,包含一段代码,该代码会在双击运行时检查操作系统环境,然后将根证书导入到系统的受信任的根证书颁发机构存储区。 4. 测试与打包:完成编码后,进行多平台测试,确保在XP和Win7等...

    exe文件修复器

    1. **扫描检测**:软件会自动扫描系统中的所有EXE文件,检查它们的头部信息、数字签名以及关联信息等,找出可能存在问题的文件。 2. **修复关联**:如果发现EXE文件与不适当的程序关联,修复器将帮助用户恢复正确的...

    修改.exe文件的时间属性

    需要注意的是,修改文件时间属性可能会影响文件的数字签名,如果.exe文件有数字签名,修改时间戳可能导致签名失效,因为数字签名会验证文件的完整性,包括元数据。此外,非法修改时间属性可能违反版权法,因此在进行...

    更改exe程序图标 更改logo 定义自己的logo

    注意,这一步可能会提示你重新签名EXE文件,以确保其数字签名的有效性。 8. 最后,运行修改后的EXE文件,检查新图标是否已经成功替换。 除了eXeScope,还有其他工具如Resource Hacker、ResEdit等,也能完成类似的...

    EXE文件信息修改工具.rar

    标题中的“EXE文件信息修改工具.rar”表明这是一个压缩包,包含了一个用于修改EXE可执行文件信息的应用程序。EXE文件是Windows操作系统中的程序执行格式,它包含了运行程序所需的全部资源,如代码、数据、图标等。...

    批处理文件转换成exe文件的软件

    4. **安全性和权限**:生成的EXE文件可能会有数字签名或者使用某种形式的加密,以增加安全性和防止恶意篡改。 5. **自解压**:部分转换软件可能会创建自解压EXE,它会在运行时自动提取并执行批处理脚本。 在压缩包...

    EXE文件捆绑打包机.rar

    7. 数字签名:捆绑后,如果原EXE文件已签名,那么签名可能失效,因为打包过程改变了文件内容。因此,打包后可能需要重新签名以确保安全性和可信度。 8. 反病毒检测:由于捆绑打包可能会引起反病毒软件的误报,...

    exe图标更改

    4. **重新签名和打包**:更改图标后,需要重新签名exe文件,以确保数字签名的有效性。对于使用代码签名的软件,这一步尤为重要,因为图标更改会破坏原有的签名。你可以使用SignTool等工具进行重新签名。最后,将修改...

    EXE文件加密器 增强版 VIP2

    EXE文件加密器是一款专为保护可执行程序(EXE文件)设计的安全工具,主要用于增强文件的安全性,防止未经授权的访问、修改或复制。增强版VIP2是该软件的一个高级版本,提供了更多功能和更强的加密算法,以确保程序...

    maven生成可执行exe文件

    - Windows防火墙可能会阻止非签名的.exe文件运行,如果遇到问题,可能需要签署你的可执行文件。 通过以上步骤,你便能够使用Maven和`launch4j`将Java程序转换为Windows下的可执行.exe文件。这使得非Java环境的用户...

    驱动双签名+驱动签名视频 DSignTool.exe

    驱动双签名+驱动签名视频 DSignTool.exe 过期签名 免费签名

    给CAB文件加上数字签名

    ### 给CAB文件加上数字签名 在软件开发过程中,为CAB文件添加数字签名是一项重要的安全措施。本文将详细介绍如何使用简单的工具为CAB文件(通常用于分发ActiveX控件)添加数字签名,以及这一过程的重要性和具体步骤...

    C++减小exe文件大小

    ### C++减小EXE文件大小的技巧与实践 在软件开发过程中,特别是对于资源有限的设备或对性能有较高要求的应用程序来说,减小可执行文件(EXE)的大小是一个重要的考虑因素。本篇文章将详细介绍如何通过不同的技术...

    c#编写的数字签名演示和文件摘要生成程序

    本项目"数字签名演示程序"旨在帮助开发者理解并实践C#中的数字签名与文件摘要生成。 数字签名是一种基于公钥加密技术的非对称加密方法,它能够确保数据在传输过程中的完整性和发送者的身份。在C#中,我们可以使用...

Global site tag (gtag.js) - Google Analytics