相关疑难解决方法(0)

WinVerifyTrust检查特定签名?

我正在为Windows实现进程提升助手.这是一个将以提升模式运行并使用管理员权限启动其他程序而不显示其他UAC提示的程序.出于安全原因,我想确保只能执行使用我公司的Authenticode密钥进行数字签名的二进制文件.

的WinVerifyTrust函数获取我中途有,但它只是确保了二进制通过签署一些关键的就是信任的微软链的一部分.是否有一种相对简单的方法来执行Authenticode验证并确保它是由我们的私钥签名的?

c windows digital-signature winverifytrust

12
推荐指数
3
解决办法
1万
查看次数

如何验证我的orgainization签署了一个可信的Windows二进制文件?

这是一个问题1072540,'WinVerifyTrust检查特定签名?'的后续问题..

我想写一个C++函数让我们调用它TrustedByUs的形式:

bool TrustedByUs(std::string pathToBinary, std::string pathToPublicKey)
Run Code Online (Sandbox Code Playgroud)

我们的想法是,我们为此函数指定一个已使用数字签名签名的二进制.dll或.exe文件的路径.该pathToPublicKey字符串的路径,我们特别签名证书的公钥.

使用http://support.microsoft.com/kb/323809中的代码,可以非常直接地验证该pathToBinary文件实际上是否受操作系统的信任.

现在我和问题1072540的作者在同一个地方,我知道操作系统信任这个二进制文件的签名者,但我想知道我的组织的RSA密钥是否是签署二进制文件的密钥.

KB323809显示了如何从嵌入在我们的二进制文件中的证书中提取字符串.此示例显示如何在其GetProgAndPublisherInfo函数中从签名证书中提取字符串,但是使用字符串匹配来验证证书时我感到很不舒服.

我想要做的是从嵌入式签名中提取公钥,并将其与首先签署我的二进制文件的私钥对应的公钥进行比较.

该文档CryptMsgGetParam说明CMSG_SIGNER_CERT_ID_PARAM 参数'返回消息签名者识别签名者公钥所需的信息'.我成功使用此密钥获取证书的序列号.我的代码看起来像这样:

// Get message handle and store handle from the signed file.
fResult = CryptQueryObject(CERT_QUERY_OBJECT_FILE,
    L"C:\\Program Files\\MySignedProgram.exe",
    CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
    CERT_QUERY_FORMAT_FLAG_BINARY,
    0, &dwEncoding, &dwContentType, &dwFormatType, &hStore, &hMsg, NULL);

// Get the public key information about the signer
// First get the size
DWORD dwCertIdSize(0);
fResult = CryptMsgGetParam(hMsg, CMSG_SIGNER_CERT_ID_PARAM,
    0, NULL, &dwCertIdSize);
BYTE* …
Run Code Online (Sandbox Code Playgroud)

winapi cryptography digital-signature winverifytrust

9
推荐指数
1
解决办法
3544
查看次数

我可以安全地隐藏ac #exe的加密密钥(以一种不能以任何已知的方式反编译的方式),就像在C/C++中一样吗?

我喜欢c#用于编程应用程序(我认为自己用c#中间,用C/C++稍微少一点,但我只是在学习,在竞技场中还没有真正的东西),而且我曾经喜欢它,直到我发现"有人"了解它MSIL(不是一个容易学习的任务)可以反编译我的代码.我真的不关心有人反编译我的代码,但我最关心的是我最终程序用户的安全性.我知道混淆器存在,我甚至知道一两个非常好,我听说(即使他们只是延迟反编译).

例如,如果我想使用c#解密某些内容,那么密钥应该在代码中的某些位置,使得使用我的程序的任何人都有危险(知道有人使用我的程序加密文件的人可以通过研究解密它我的MSIL代码,找到我的密钥).然后,由于这个原因,我认为开发加密/解密东西(或OpenSSL)的大量应用程序是疯狂的c#.

我的意思是,大多数用户不会知道用什么语言制作那个exe,但是很多人都可以编写nc#,这个人的精英可以阅读MSIL,而这个精英中的少数人想要破解什么是可能的黑客攻击.在那些喜欢破解的人中,有些人可以用不正当的意图来做这件事(在我们生活的无价值的世界里,任何人都不应该感到惊讶).

因此,如果我想制作一个从互联网上下载文件的程序,有人可能会干扰传输并做一些恶事,即使我使用OpenSSL和c#,因为c#文件中的某个地方是关键.我知道避免黑客攻击可能是不可能的,但看起来c#是一种非常不安全的方式.

它会发生在Java吗?(Java与C#具有相同的"解释"和"反编译"结构); 我的意思是,密钥在Java中可见(有一些受过教育的眼睛)在构建文件中的某些位置?或者Java是否使用了一些基于C/C++的API,这使得对密钥进行反编译的文件变得更难(更难),从而难以获得密钥?

我是用c/c ++编写程序的唯一选择吗?因为如果是这样的话,我唯一的选择就是C++ Builder,因为它甚至可以尝试观察(并且更少学习)MFC/OWL代码; 我的意思是:我几乎无法想到有人喜欢MFC/OWL编程.事实上,我认为大会可能对今天的编程世界更感兴趣.

所以,在这里,我想找到一个可以更好地解释我的方法来安全地加密密钥以加密/解密或者使用OpenSSL和c#.甚至是Java.我想确认C/C++是真正使用这些功能的唯一方法,其中一些安全性用于反编译原因(如其他编译编程语言,即Delphi).

如果有人知道一个网站,我可以找到关于我所做的微妙推理的精确信息(特别是在我的分析中显示错误的那个),请告诉我.如果有人能确认我的分析,请确认.如果有人在我的分析中找到任何漏洞,请再次告诉我,以及在哪里可以找到更多信息来统治我以更好地理解这一切.

很抱歉这个哲学计算机编程问题很长.

谢谢,

McNaddy

c# security encryption decompiling

2
推荐指数
1
解决办法
3098
查看次数