|
分享源码
界面截图: |
- |
是否带模块: |
- |
备注说明: |
- |
- .版本 2
- .DLL命令 CryptQueryObject, 逻辑型, "Crypt32.dll", "CryptQueryObject"
- .参数 dwObjectType, 整数型
- .参数 pvObject, 字节集
- .参数 dwExpectedContentTypeFlags, 整数型
- .参数 dwExpectedFormatTypeFlags, 整数型
- .参数 dwFlags, 整数型
- .参数 pdwMsgAndCertEncodingType, 整数型, 传址
- .参数 pdwContentType, 整数型, 传址
- .参数 pdwFormatType, 整数型, 传址
- .参数 phCertStore, 整数型, 传址
- .参数 phMsg, 整数型, 传址
- .参数 ppvContext, 整数型, 传址
- .DLL命令 CryptMsgGetParam, 逻辑型, "Crypt32.dll", "CryptMsgGetParam"
- .参数 hCryptMsg, 整数型
- .参数 dwParamType, 整数型
- .参数 dwIndex, 整数型
- .参数 pvData, 整数型
- .参数 pcbData, 整数型, 传址
- .DLL命令 CryptDecodeObject, 逻辑型, "Crypt32.dll", "CryptDecodeObject"
- .参数 dwCertEncodingType, 整数型
- .参数 lpszStructType, 整数型
- .参数 pbEncoded, 整数型
- .参数 cbEncoded, 整数型
- .参数 dwFlags, 整数型
- .参数 pvStructInfo, 整数型
- .参数 pcbStructInfo, 整数型, 传址
- .DLL命令 CertFindCertificateInStore, 整数型, "Crypt32.dll", "CertFindCertificateInStore"
- .参数 hCertStore, 整数型
- .参数 dwCertEncodingType, 整数型
- .参数 dwFindFlags, 整数型
- .参数 dwFindType, 整数型
- .参数 pvFindPara, 整数型
- .参数 pPrevCertContext, 整数型
- .DLL命令 CertCloseStore, 逻辑型, "Crypt32.dll", "CertCloseStore"
- .参数 hCertStore, 整数型
- .参数 dwFlags, 整数型
- .DLL命令 CertGetNameStringW, 整数型, "Crypt32.dll", "CertGetNameStringW"
- .参数 pCertContext, 整数型
- .参数 dwType, 整数型
- .参数 dwFlags, 整数型
- .参数 pvTypePara, 整数型
- .参数 pszNameString, 整数型
- .参数 cchNameString, 整数型
- .DLL命令 CryptMsgClose, 逻辑型, "Crypt32.dll", "CryptMsgClose"
- .参数 hCryptMsg, 整数型
- .DLL命令 CertFreeCertificateContext, 逻辑型, "Crypt32.dll", "CertFreeCertificateContext"
- .参数 pCertContext, 整数型
复制代码- .版本 2
- .常量 CERT_QUERY_OBJECT_FILE, "1", , 此参数是指向一个以空字符结尾的Unicode字符串的指针,该字符串包含要查询的文件的路径和名称。
- .常量 CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, "1024", , 内容是嵌入的PKCS#7签名消息。
- .常量 CERT_QUERY_FORMAT_FLAG_BINARY, "2", , 内容应以二进制格式返回。
- .常量 CMSG_SIGNER_INFO_PARAM, "6", , 返回有关消息签名者的信息。这包括签名者证书的颁发者和序列号,以及签名者证书的经过身份验证和未经身份验证的属性。要检索所有消息的签名的签名者的信息,请拨打CryptMsgGetParam变dwIndex从0到签名者减去一个数。
- .常量 LPTR, "64", , 结合使用LMEM_FIXED和LMEM_ZEROINIT
- .常量 SPC_SP_OPUS_INFO_OBJID, "“1.3.6.1.4.1.311.2.1.12”"
- .常量 X509_ASN_ENCODING, "1"
- .常量 PKCS_7_ASN_ENCODING, "65536"
- .常量 CERT_FIND_SUBJECT_CERT, "720896"
- .常量 CERT_NAME_SIMPLE_DISPLAY_TYPE, "4", , 遍历以下名称属性列表,并对第一次出现的名称使用“主题名称”或“主题备用名称”扩展名:szOID_COMMON_NAME,szOID_ORGANIZATIONAL_UNIT_NAME,szOID_ORGANIZATION_NAME或szOID_RSA_emailAddr。
- .常量 CERT_NAME_ISSUER_FLAG, "1", , 获取发行人的名字。如果未设置,则获取主题的名称。
- .常量 szOID_RSA_counterSign, "“1.2.840.113549.1.9.6”"
- .常量 PKCS7_SIGNER_INFO, "500", , 所述pvStructInfo参数是一个指向CMSG_SIGNER_INFO结构。
- .常量 szOID_RSA_signingTime, "“1.2.840.113549.1.9.5”"
复制代码 窗口程序集名 | 保 留 | 保 留 | 备 注 | (未填写程序集名) | | | | 变量名 | 类 型 | 数组 | 备 注 | 变量名 | 类 型 | 数组 | 备 注 | 文件的绝对路径 | 字节集 | |
文件的绝对路径 = 编码_Ansi到Unicode (“C:\Program Files (x86)\360\360safe\360Safe.exe”, )变量名 | 类 型 | 静态 | 数组 | 备 注 | dwEncoding | 整数型 | | | dwContentType | 整数型 | | | dwFormatType | 整数型 | | | hStore | 整数型 | | | hMsg | 整数型 | | | bRet | 逻辑型 | | | dwSignerInfo | 整数型 | | | pSignerInfo | 整数型 | | | ProgPubInfo | 整数型 | | | pCertContext | 整数型 | | | CertInfo | 字节集 | | | ptr | 整数型 | | | pCounterSignerInfo | 整数型 | | | st | 日期时间型 | | |
bRet = CryptQueryObject ( #CERT_QUERY_OBJECT_FILE, 文件的绝对路径, #CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, #CERT_QUERY_FORMAT_FLAG_BINARY, 0, dwEncoding, dwContentType, dwFormatType, hStore, hMsg, #NULL )bRet = CryptMsgGetParam (hMsg, #CMSG_SIGNER_INFO_PARAM, 0, #NULL, dwSignerInfo )pSignerInfo = LocalAlloc ( #LPTR, dwSignerInfo )bRet = CryptMsgGetParam (hMsg, #CMSG_SIGNER_INFO_PARAM, 0, pSignerInfo, dwSignerInfo )GetProgAndPublisherInfo (pSignerInfo, ProgPubInfo )CertInfo = 取空白字节集 (112 )ptr = 取指针_字节集型 (CertInfo ) memcpy (ptr + 24, pSignerInfo + 4, 8 )memcpy (ptr + 4, pSignerInfo + 12, 8 )pCertContext = CertFindCertificateInStore (hStore, 位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), 0, #CERT_FIND_SUBJECT_CERT, ptr, #NULL )如果真 (pCertContext ≠ 0 )PrintCertificateInfo (pCertContext )CertFreeCertificateContext (pCertContext )GetDateOfTimeStamp (pSignerInfo, st)输出调试文本 (“签名时间: ” + 时间_到文本 (st, 1, , )) 如果真 (GetTimeStampSignerInfo (pSignerInfo, pCounterSignerInfo )) memcpy (ptr + 24, pCounterSignerInfo + 4, 8 )memcpy (ptr + 4, pCounterSignerInfo + 12, 8 )pCertContext = CertFindCertificateInStore (hStore, 位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), 0, #CERT_FIND_SUBJECT_CERT, ptr, #NULL )如果真 (pCertContext ≠ 0 )PrintCertificateInfo (pCertContext )CertFreeCertificateContext (pCertContext )GetDateOfTimeStamp (pCounterSignerInfo, st)输出调试文本 (“签名时间: ” + 时间_到文本 (st, 1, , )) 如果真 (pSignerInfo ≠ 0 )LocalFree (pSignerInfo )如果真 (pCounterSignerInfo ≠ 0 )LocalFree (pCounterSignerInfo )如果真 (hStore ≠ 0 )CertCloseStore (hStore, 0 )如果真 (hMsg ≠ 0 )CryptMsgClose (hMsg )|
GetProgAndPublisherInfo | 逻辑型 | | |
pSignerInfo | 整数型 | | | | Info | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | dwAttr | 整数型 | | | rgAttr | 整数型 | | | pszObjId | 整数型 | | | rgValue | 整数型 | | | dwData | 整数型 | | | bRet | 逻辑型 | | | OpusInfo | 整数型 | | | n | 整数型 | | | dwAttr = 指针_到整数 (pSignerInfo + 52)rgAttr = 指针_到整数 (pSignerInfo + 56 )计次循环首 (dwAttr, n )pszObjId = 指针_到整数 (rgAttr + (n - 1 ) × 12 )如果真 ( #SPC_SP_OPUS_INFO_OBJID = 指针到文本 (pszObjId )) rgValue = 指针_到整数 (rgAttr + (n - 1 ) × 12 + 8 )bRet = CryptDecodeObject (位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), 取指针_文本型 ( #SPC_SP_OPUS_INFO_OBJID ), 指针_到整数 (rgValue + 4 ), 取指针整数_ (rgValue ), 0, #NULL, dwData )OpusInfo = LocalAlloc ( #LPTR, dwData )bRet = CryptDecodeObject (位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), 取指针_文本型 ( #SPC_SP_OPUS_INFO_OBJID ), 指针_到整数 (rgValue + 4 ), 取指针整数_ (rgValue ), 0, OpusInfo, dwData )LocalFree (OpusInfo )返回 (真)计次循环尾 ()返回 (假)|
PrintCertificateInfo | 逻辑型 | | |
pCertContext | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | pCertInfo | 整数型 | | | szBuf | 文本型 | | | pbData | 整数型 | | | dwData | 整数型 | | | szName | 字节集 | | | n | 整数型 | | |
pCertInfo = 指针_到整数 (pCertContext + 12 )dwData = 指针_到整数 (pCertInfo + 4 )szBuf = 取空白文本 (dwData × 2 )pbData = 取指针_文本型 (szBuf )计次循环首 (dwData, n )pbData = pbData + sprintf (pbData, “%02x”, __get_byte (指针_到整数 (pCertInfo + 8 ), dwData - n )) 计次循环尾 ()输出调试文本 (“序列号: ” + szBuf )dwData = CertGetNameStringW (pCertContext, #CERT_NAME_SIMPLE_DISPLAY_TYPE, #CERT_NAME_ISSUER_FLAG, #NULL, #NULL, 0 )szName = 取空白字节集 (dwData × 2 )CertGetNameStringW (pCertContext, #CERT_NAME_SIMPLE_DISPLAY_TYPE, #CERT_NAME_ISSUER_FLAG, #NULL, 取指针_字节集型 (szName ), dwData )输出调试文本 (“颁发者: ” + 编码_Unicode到Ansi (szName )) dwData = CertGetNameStringW (pCertContext, #CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, #NULL, #NULL, 0 )szName = 取空白字节集 (dwData × 2 )CertGetNameStringW (pCertContext, #CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, #NULL, 取指针_字节集型 (szName ), dwData )输出调试文本 (“颁发给: ” + 编码_Unicode到Ansi (szName )) 返回 (真)|
GetTimeStampSignerInfo | 逻辑型 | | |
pSignerInfo | 整数型 | | | | pCounterSignerInfo | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | dwAttr | 整数型 | | | rgAttr | 整数型 | | | pszObjId | 整数型 | | | bRet | 逻辑型 | | | pbData | 整数型 | | | n | 整数型 | | | cbData | 整数型 | | | dwSize | 整数型 | | | rgValue | 整数型 | | |
dwAttr = 指针_到整数 (pSignerInfo + 60 )计次循环首 (dwAttr, n )rgAttr = 指针_到整数 (pSignerInfo + 64 )pszObjId = 指针_到整数 (rgAttr + (n - 1 ) × 12 )如果真 ( #szOID_RSA_counterSign = 指针到文本 (pszObjId )) rgValue = 指针_到整数 (rgAttr + (n - 1 ) × 12 + 8 )pbData = 指针_到整数 (rgValue + 4 )cbData = 取指针整数_ (rgAttr )bRet = CryptDecodeObject (位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), #PKCS7_SIGNER_INFO, pbData, cbData, 0, #NULL, dwSize )pCounterSignerInfo = LocalAlloc ( #LPTR, dwSize )bRet = CryptDecodeObject (位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), #PKCS7_SIGNER_INFO, pbData, cbData, 0, pCounterSignerInfo, dwSize )返回 (真)计次循环尾 ()返回 (假)|
GetDateOfTimeStamp | 逻辑型 | | |
pSignerInfo | 整数型 | | | | st | 日期时间型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | dwAttr | 整数型 | | | n | 整数型 | | | rgAttr | 整数型 | | | pszObjId | 整数型 | | | dwData | 整数型 | | | bRet | 逻辑型 | | | rgValue | 整数型 | | | pbData | 整数型 | | | cbData | 整数型 | | | ft | FILETIME | | |
dwAttr = 指针_到整数 (pSignerInfo + 52 )计次循环首 (dwAttr, n )rgAttr = 指针_到整数 (pSignerInfo + 56 )pszObjId = 指针_到整数 (rgAttr + (n - 1 ) × 12 )如果真 ( #szOID_RSA_signingTime = 指针到文本 (pszObjId )) dwData = 8 rgValue = 指针_到整数 (rgAttr + (n - 1 ) × 12 + 8 )pbData = 指针_到整数 (rgValue + 4 )cbData = 取指针整数_ (rgAttr )bRet = CryptDecodeObject (位或 ( #X509_ASN_ENCODING, #PKCS_7_ASN_ENCODING ), 取指针_文本型 ( #szOID_RSA_signingTime ), pbData, cbData, 0, 取 数 据 _通用型 (ft ), dwData )st = FileTimeToVariantTime (ft )返回 (真)计次循环尾 ()返回 (假)
获得可执行文件中的数字签名的相关信息.e
(898.92 KB, 下载次数: 240)
|
评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 精易精录【好源码】|主题: 1029, 订阅: 425
- · 鱼木|主题: 1514, 订阅: 147
- · 藏宝阁|主题: 185, 订阅: 14
|