【问题标题】:How to Obtain a Digital Signiture for a Console Application?如何获取控制台应用程序的数字签名?
【发布时间】:2015-05-04 23:05:06
【问题描述】:

我制作了一个简单的控制台应用程序来播放系统哔声中的马里奥主题曲。我正在运行 Windows 7,当程序运行时,它会发出“未验证发布者”的警告。在 Windows 8 上也会发生这种情况,它显示“Windows 智能屏幕阻止了无法识别的应用程序启动”。如何获取数字签名并将其链接到控制台应用程序以停止此错误?

源代码:

#include <Windows.h>

int main()
{
    Beep (330,100);Sleep(100);
    Beep (330,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (330,100);Sleep(300);
    Beep (392,100);Sleep(700);
    Beep (196,100);Sleep(700);
    Beep (262,300);Sleep(300);
    Beep (196,300);Sleep(300);
    Beep (164,300);Sleep(300);
    Beep (220,300);Sleep(100);
    Beep (246,100);Sleep(300);
    Beep (233,200);
    Beep (220,100);Sleep(300);
    Beep (196,100);Sleep(150);
    Beep (330,100);Sleep(150);
    Beep (392,100);Sleep(150);
    Beep (440,100);Sleep(300);
    Beep (349,100);Sleep(100);
    Beep (392,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(100);
    Beep (247,100);Sleep(500);
    Beep (262,300);Sleep(300);
    Beep (196,300);Sleep(300);
    Beep (164,300);Sleep(300);
    Beep (220,300);Sleep(100);
    Beep (246,100);Sleep(300);
    Beep (233,200);
    Beep (220,100);Sleep(300);
    Beep (196,100);Sleep(150);
    Beep (330,100);Sleep(150);
    Beep (392,100);Sleep(150);
    Beep (440,100);Sleep(300);
    Beep (349,100);Sleep(100);
    Beep (392,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(100);
    Beep (247,100);Sleep(900);
    Beep (392,100);Sleep(100);
    Beep (370,100);Sleep(100);
    Beep (349,100);Sleep(100);
    Beep (311,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (207,100);Sleep(100);
    Beep (220,100);Sleep(100);
    Beep (262,100);Sleep(300);
    Beep (220,100);Sleep(100);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(500);
    Beep (392,100);Sleep(100);
    Beep (370,100);Sleep(100);
    Beep (349,100);Sleep(100);
    Beep (311,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (523,100);Sleep(300);
    Beep (523,100);Sleep(100);
    Beep (523,100);Sleep(1100);
    Beep (392,100);Sleep(100);
    Beep (370,100);Sleep(100);
    Beep (349,100);Sleep(100);
    Beep (311,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (207,100);Sleep(100);
    Beep (220,100);Sleep(100);
    Beep (262,100);Sleep(300);
    Beep (220,100);Sleep(100);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(500);
    Beep (311,300);Sleep(300);
    Beep (296,300);Sleep(300);
    Beep (262,300);Sleep(1300);
    Beep (262,100);Sleep(100);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(300);
    Beep (330,200);Sleep(50);
    Beep (262,200);Sleep(50);
    Beep (220,200);Sleep(50);
    Beep (196,100);Sleep(700);
    Beep (262,100);Sleep(100);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(100);
    Beep (330,100);Sleep(700);
    Beep (440,100);Sleep(300);
    Beep (392,100);Sleep(500);
    Beep (262,100);Sleep(100);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (294,100);Sleep(300);
    Beep (330,200);Sleep(50);
    Beep (262,200);Sleep(50);
    Beep (220,200);Sleep(50);
    Beep (196,100);Sleep(700);

    // Intro
    Beep (330,100);Sleep(100);
    Beep (330,100);Sleep(300);
    Beep (330,100);Sleep(300);
    Beep (262,100);Sleep(100);
    Beep (330,100);Sleep(300);
    Beep (392,100);Sleep(700);
    Beep (196,100);Sleep(700);
    Beep (196,100);Sleep(125);
    Beep (262,100);Sleep(125);
    Beep (330,100);Sleep(125);
    Beep (392,100);Sleep(125);
    Beep (523,100);Sleep(125);
    Beep (660,100);Sleep(125);
    Beep (784,100);Sleep(575);
    Beep (660,100);Sleep(575);
    Beep (207,100);Sleep(125);
    Beep (262,100);Sleep(125);
    Beep (311,100);Sleep(125);
    Beep (415,100);Sleep(125);
    Beep (523,100);Sleep(125);
    Beep (622,100);Sleep(125);
    Beep (830,100);Sleep(575);
    Beep (622,100);Sleep(575);
    Beep (233,100);Sleep(125);
    Beep (294,100);Sleep(125);
    Beep (349,100);Sleep(125);
    Beep (466,100);Sleep(125);
    Beep (587,100);Sleep(125);
    Beep (698,100);Sleep(125);
    Beep (932,100);Sleep(575);
    Beep (932,100);Sleep(125);
    Beep (932,100);Sleep(125);
    Beep (932,100);Sleep(125);
    Beep (1046,675);

    system("pause");
    return 0;
}

如果应用程序需要测试,可以在这里找到:Mario System Beeps.exe

病毒扫描(适合所有​​ PC 疑病症者):Mario System Beeps.exe Virus Scan

【问题讨论】:

    标签: c++ certificate digital-signature code-signing


    【解决方案1】:

    您需要使用协同签名证书对您的应用程序进行签名。看看this blog post(来自 Hanselman),它解释了如何做到这一点。它不完全适用于控制台应用程序,但原理是相同的(使用 codesign 签名并添加时间戳)。

    在大多数情况下,您需要购买协同签名证书,但您可以通过 CA(即,如果您是开源开发人员)免费获得它。其中之一是 Cetrum CA(我目前正在使用)。看看here。获得它的过程是一种折磨,但证书本身是可以的。 (它不适用于所有浏览器 - 使用 FF,需要在每个页面上进行单点登录,并且邮件使用波兰语。)

    时间戳可以免费获得(即从 Hanselmans 博客中的链接,或者您可以找到符合 RFC 3161 的免费时间戳权威列表here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2010-11-19
      相关资源
      最近更新 更多