白话数字签名(番外篇)----签名EXE文件(下)

简介:
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

转自:http://www.cnblogs.com/1-2-3/archive/2007/12/03/colloquialism-digital-certificate-part5.html
摘要

如果我们在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”,内容如图所示。 白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客

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

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

白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客  Step4: 打开命令行,使用“makecat -v 123soft.cdf”命令生成“123soft.cat”文件。  白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客  白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客 Step5: 打开命令行,执行“signtool signwizard”命令,打开签名向导,使用和上篇同样的方法签名“123soft.cat”文件。  白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客  白话数字签名(番外篇)----签名EXE文件(下) - netcorner - netcorner的博客

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

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

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

参考文献

Kernel-Mode Code Signing Walkthrough
Microsoft Authenticode 参考指南
本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/archive/2008/03/01/2912172.html   ,如需转载请自行联系原作者
相关文章
|
28天前
|
安全 网络安全 数据安全/隐私保护
什么是代码签名,又有什么用处呢?
代码签名是通过数字证书验证软件来源及完整性的网络安全措施,确保用户下载的软件未被篡改或包含恶意软件。它验证开发者身份,保护代码不被恶意修改,减少安装时的安全警告,维护品牌形象,并符合操作系统及行业法规要求。使用代码签名如JoySSL,能增强用户信任,保障软件安全,是现代开发流程的关键环节。
18 0
|
2月前
|
开发框架 Java .NET
救命!C程序运行原理的秘密居然被我发现了
救命!C程序运行原理的秘密居然被我发现了
10 0
|
12月前
|
Go 数据安全/隐私保护
Go实现aes加密,并带你手撸一个命令行应用程序
Go实现aes加密,并带你手撸一个命令行应用程序
132 0
|
Java API Android开发
安卓逆向系列篇:Dalvik概念&破解实例(一)
安卓逆向系列篇:Dalvik概念&破解实例
128 0
|
Java 开发工具 Android开发
安卓逆向系列篇:Dalvik概念&破解实例(二)
安卓逆向系列篇:Dalvik概念&破解实例
148 0
|
Java Android开发
手把手教你进行安卓逆向之篡改apk名称和图标
手把手教你进行安卓逆向之篡改apk名称和图标
348 0
手把手教你进行安卓逆向之篡改apk名称和图标
|
安全 Java Android开发
Android安全与逆向之简单破解APK方法
Android安全与逆向之简单破解APK方法
398 0
|
算法 安全 数据安全/隐私保护
不懂数字证书?看这篇文章就行了
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 希望通读这篇文章,初学者可以较为深入的了解数字证书的发展、原理及应用,熟练者可以查漏补缺。 如果想要了解HTTPS协议,那么数字证书就是一个逃不过的坎,在HTTPS协议握手加密过程中,数字证书有着举足轻重的地位。
不懂数字证书?看这篇文章就行了
第三章:上传应用公钥
[quote]演示如何上传公钥到支付宝管理中心,说明密钥交互原理[/quote][flash=800,600,1]http://cloud.video.taobao.com//play/u/2825236786/p/2/e/6/t/1/d/hd/72426239.mp4[/flash]
360 0
|
tengine 安全 算法
RSA算法理论学习解惑――复制粘贴RSA私钥导致tengine出错深入解析
tengine的代码中使用了RSA_check_key函数进行RSA私钥格式正确性检查,有一次加载私钥测试时tengine reload失败。案例的看点是RSA格式私钥文件中的私钥指数d在tengine实际的加解密计算过程中并没有用到,至于为什么请细看下文。
4068 0