窗口程序集名 | 保 留 | 保 留 | 备 注 |
(未填写程序集名) | | | |
变量名 | 类 型 | 数组 | 备 注 |
变量名 | 类 型 | 数组 | 备 注 |
文件的绝对路径 | 字节集 | |
文件的绝对路径 =
编码_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
)
返回 (真)
计次循环尾 ()返回 (假)