相关疑难解决方法(0)

从可执行文件读取并验证证书

我想验证已签名的可执行映像的证书(通过验证,我的意思是告诉签名是否来自MS/Adob​​e/Oracle等).Windows是否为此任务提供api?我该怎么办,不知道.任何帮助,将不胜感激.我正在使用Windows和C++.我想验证本机可执行映像,而不是.NET程序集或Java jar文件.

UPDATE


好的,我会尽快描述我想要的东西.

1)验证PE证书.签名是否有效.当签名嵌入在PE中并且签名位于安全目录中时,它应该工作.(我在sysinternals论坛上发现这个并且运行正常,所以我不再需要这个了).

2)告诉谁是文件的签名者/出版者.我知道它可以通过CryptQueryObject实现(我找到了一个工作示例,虽然它不能与安全目录一起使用),但不知道如何将它与安全目录文件一起使用.

c++ windows validation executable certificate

15
推荐指数
2
解决办法
2万
查看次数

如何从可执行文件上的多/双代码签名中检索信息

我一直在使用以下代码(取自KB323809文章)来检索有关可执行文件上的代码签名的信息.这适用于单个数字签名.

但是如何检索多个代码签名的信息?

在这种情况下,下面的Microsoft代码只是为第一个签名重新获取信息.

我的想法是调用CryptMsgGetParamCMSG_SIGNER_COUNT_PARAM得到签名的数量,然后将每个签名指标传递给后续调用CryptMsgGetParamCMSG_SIGNER_INFO_PARAM(下面的代码中).但是,这种方法始终在这个返回1周的签名,即使我显然有更多的,像3例:

在此输入图像描述

#include <windows.h>
#include <wincrypt.h>
#include <wintrust.h>
#include <stdio.h>
#include <tchar.h>

#pragma comment(lib, "crypt32.lib")

#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)

typedef struct {
    LPWSTR lpszProgramName;
    LPWSTR lpszPublisherLink;
    LPWSTR lpszMoreInfoLink;
} SPROG_PUBLISHERINFO, *PSPROG_PUBLISHERINFO;

BOOL GetProgAndPublisherInfo(PCMSG_SIGNER_INFO pSignerInfo,
                             PSPROG_PUBLISHERINFO Info);
BOOL GetDateOfTimeStamp(PCMSG_SIGNER_INFO pSignerInfo, SYSTEMTIME *st);
BOOL PrintCertificateInfo(PCCERT_CONTEXT pCertContext);
BOOL GetTimeStampSignerInfo(PCMSG_SIGNER_INFO pSignerInfo,
                            PCMSG_SIGNER_INFO *pCounterSignerInfo);

int _tmain(int argc, TCHAR *argv[])
{
    WCHAR szFileName[MAX_PATH]; 
    HCERTSTORE hStore = NULL;
    HCRYPTMSG hMsg = NULL; 
    PCCERT_CONTEXT pCertContext …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi code-signing certificate

7
推荐指数
2
解决办法
1208
查看次数