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

摘要:
然后将一个未签名的EXE文件“MathLover121.exe”复制到这个目录下。Step5:打开命令行,执行“signtoolsignwizard”命令,打开签名向导,使用和上篇同样的方法签名“123soft.cat”文件。关于摘要算法可以参考我的白话数字签名。签名MP3嵌入式的签名方式只能签名有限的几种文件格式,但是使用CAT文件的方式却可以签名任意格式的文件。下面就来演示一下签名MP3文件的过程。

摘要
如果我们在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文件(下)第1张

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

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

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

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

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

签名MP3

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

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

免责声明:文章转载自《白话数字签名(番外篇)——签名EXE文件(下)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇USB转UART相关芯片Linux特殊权限:SUID、SGID、SBIT下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

公钥,私钥和数字签名这样最好理解

http://blog.csdn.net/21aspnet/article/details/7249401 一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。 我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不...

软件保护

大赛题目的理解: (猜测,为什么要出这样的一道题目)虽然Windows操作系统是目前世界上使用最广泛的操作系统,但是数据的安全存在风险。Linux操作系统的安全性能会比Windows操作系统的高很多,因为Linux操作系统的权限分配会更严格更细致,而且用户间的相互独立性能很好;Linux可以实现跨平台的硬件支持以及可靠的安全性,Linux系统是一个具有先天病...

使用Prometheus监控Linux系统各项指标

首先在Linux系统上安装一个探测器node explorer, 下载地址https://prometheus.io/docs/guides/node-exporter/ 这个探测器会定期将linux系统的各项硬件指标和内核参数通过9100端口和url metrics暴露给外部。 启动node explorer,显示在9100端口上监听: 浏览器里输入...

数字签名(代码签名)流程

数字签名(代码签名)流程 Authenticode : 这里翻译为数字认证代码。 code sign : 字面的翻译为代码签名,但是通常的我们称为数字签名,以下的文中均称为数字签名。一 数字认证码如果你是软件开发人员,你可能已经知道windows系统和一些浏览器(例如IE,Firefox)使用一种称为数字认证代码的技术来标识软件的发行商,来检查软件没有被...

MD5加密和RSA加密

1.MD5加密    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。      MD5的功能:       ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);      ②.不同的输入得到的不同的结果(唯一性);      ③.根据128位的输...

【转】Android APK的数字签名的作用和意义

1. 什么是数字签名? 数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的     2. 为什么要数字签名? 最简单直接的回答: 系统要求的。  Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有...