开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 14568|回复: 107
收起左侧

[易语言纯源码] 获得可执行文件中的数字签名的相关信息

[复制链接]

发表于 2021-5-10 16:29:50 | 显示全部楼层 |阅读模式   广东省广州市
分享源码
界面截图: -
是否带模块: -
备注说明: -
  1. .版本 2

  2. .DLL命令 CryptQueryObject, 逻辑型, "Crypt32.dll", "CryptQueryObject"
  3.     .参数 dwObjectType, 整数型
  4.     .参数 pvObject, 字节集
  5.     .参数 dwExpectedContentTypeFlags, 整数型
  6.     .参数 dwExpectedFormatTypeFlags, 整数型
  7.     .参数 dwFlags, 整数型
  8.     .参数 pdwMsgAndCertEncodingType, 整数型, 传址
  9.     .参数 pdwContentType, 整数型, 传址
  10.     .参数 pdwFormatType, 整数型, 传址
  11.     .参数 phCertStore, 整数型, 传址
  12.     .参数 phMsg, 整数型, 传址
  13.     .参数 ppvContext, 整数型, 传址

  14. .DLL命令 CryptMsgGetParam, 逻辑型, "Crypt32.dll", "CryptMsgGetParam"
  15.     .参数 hCryptMsg, 整数型
  16.     .参数 dwParamType, 整数型
  17.     .参数 dwIndex, 整数型
  18.     .参数 pvData, 整数型
  19.     .参数 pcbData, 整数型, 传址

  20. .DLL命令 CryptDecodeObject, 逻辑型, "Crypt32.dll", "CryptDecodeObject"
  21.     .参数 dwCertEncodingType, 整数型
  22.     .参数 lpszStructType, 整数型
  23.     .参数 pbEncoded, 整数型
  24.     .参数 cbEncoded, 整数型
  25.     .参数 dwFlags, 整数型
  26.     .参数 pvStructInfo, 整数型
  27.     .参数 pcbStructInfo, 整数型, 传址

  28. .DLL命令 CertFindCertificateInStore, 整数型, "Crypt32.dll", "CertFindCertificateInStore"
  29.     .参数 hCertStore, 整数型
  30.     .参数 dwCertEncodingType, 整数型
  31.     .参数 dwFindFlags, 整数型
  32.     .参数 dwFindType, 整数型
  33.     .参数 pvFindPara, 整数型
  34.     .参数 pPrevCertContext, 整数型

  35. .DLL命令 CertCloseStore, 逻辑型, "Crypt32.dll", "CertCloseStore"
  36.     .参数 hCertStore, 整数型
  37.     .参数 dwFlags, 整数型

  38. .DLL命令 CertGetNameStringW, 整数型, "Crypt32.dll", "CertGetNameStringW"
  39.     .参数 pCertContext, 整数型
  40.     .参数 dwType, 整数型
  41.     .参数 dwFlags, 整数型
  42.     .参数 pvTypePara, 整数型
  43.     .参数 pszNameString, 整数型
  44.     .参数 cchNameString, 整数型

  45. .DLL命令 CryptMsgClose, 逻辑型, "Crypt32.dll", "CryptMsgClose"
  46.     .参数 hCryptMsg, 整数型

  47. .DLL命令 CertFreeCertificateContext, 逻辑型, "Crypt32.dll", "CertFreeCertificateContext"
  48.     .参数 pCertContext, 整数型
复制代码
  1. .版本 2

  2. .常量 CERT_QUERY_OBJECT_FILE, "1", , 此参数是指向一个以空字符结尾的Unicode字符串的指针,该字符串包含要查询的文件的路径和名称。
  3. .常量 CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, "1024", , 内容是嵌入的PKCS#7签名消息。
  4. .常量 CERT_QUERY_FORMAT_FLAG_BINARY, "2", , 内容应以二进制格式返回。
  5. .常量 CMSG_SIGNER_INFO_PARAM, "6", , 返回有关消息签名者的信息。这包括签名者证书的颁发者和序列号,以及签名者证书的经过身份验证和未经身份验证的属性。要检索所有消息的签名的签名者的信息,请拨打CryptMsgGetParam变dwIndex从0到签名者减去一个数。
  6. .常量 LPTR, "64", , 结合使用LMEM_FIXED和LMEM_ZEROINIT
  7. .常量 SPC_SP_OPUS_INFO_OBJID, "“1.3.6.1.4.1.311.2.1.12”"
  8. .常量 X509_ASN_ENCODING, "1"
  9. .常量 PKCS_7_ASN_ENCODING, "65536"
  10. .常量 CERT_FIND_SUBJECT_CERT, "720896"
  11. .常量 CERT_NAME_SIMPLE_DISPLAY_TYPE, "4", , 遍历以下名称属性列表,并对第一次出现的名称使用“主题名称”或“主题备用名称”扩展名:szOID_COMMON_NAME,szOID_ORGANIZATIONAL_UNIT_NAME,szOID_ORGANIZATION_NAME或szOID_RSA_emailAddr。
  12. .常量 CERT_NAME_ISSUER_FLAG, "1", , 获取发行人的名字。如果未设置,则获取主题的名称。
  13. .常量 szOID_RSA_counterSign, "“1.2.840.113549.1.9.6”"
  14. .常量 PKCS7_SIGNER_INFO, "500", , 所述pvStructInfo参数是一个指向CMSG_SIGNER_INFO结构。
  15. .常量 szOID_RSA_signingTime, "“1.2.840.113549.1.9.5”"
复制代码
  
窗口程序集名保 留  保 留备 注
(未填写程序集名)   
变量名类 型数组备 注
变量名类 型数组备 注
文件的绝对路径字节集  
文件的绝对路径 = 编码_Ansi到Unicode (“C:\Program Files (x86)\360\360safe\360Safe.exe”, )
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
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整数型 
ftFILETIME 
dwAttr = 指针_到整数 (pSignerInfo + 52)
计次循环首 (dwAttr, n)
rgAttr = 指针_到整数 (pSignerInfo + 56)
pszObjId = 指针_到整数 (rgAttr + (n - 1) × 12)
如果真 ( #szOID_RSA_signingTime指针到文本 (pszObjId))
dwData = 8  ' sizeof(FILETIME)
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)
返回 ()

计次循环尾 ()
返回 ()


BaiduShurufa_2021-5-10_16-28-50.png

获得可执行文件中的数字签名的相关信息.e (898.92 KB, 下载次数: 240)

评分

参与人数 12好评 +10 精币 +27 收起 理由
qvbgod + 1 + 2 新技能已get√
ghost12 + 1 支持开源~!感谢分享
fjgh + 1 + 2 支持开源~!感谢分享
大大王 + 1 + 2 支持开源~!感谢分享
易语言资源网 + 1 + 5 支持开源~!感谢分享
393686984 + 1 + 2 指定子程序或类方法名称“__get_byte”未找到请下载最新精易里面有.
FUYUEPC + 2 这么厉害!必须给个红包鼓励下~
空巢男人 + 1 + 2 新技能已get√
hongjian + 1 + 2 感谢分享,很给力!~
喵帕斯和艾希 + 1 + 2 新技能已get√
周sir + 1 + 2 此处应该有鼓励~
Bszk + 1 + 3 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

发表于 2023-12-14 05:19:09 | 显示全部楼层   广西壮族自治区柳州市
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2023-7-19 20:33:22 | 显示全部楼层   广东省东莞市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2023-7-1 22:53:47 | 显示全部楼层   浙江省宁波市
试试看能用不
回复 支持 反对

使用道具 举报

发表于 2022-11-22 02:40:24 | 显示全部楼层   广东省广州市
大部份可执行文件都报错,个别可以
回复 支持 反对

使用道具 举报

发表于 2022-7-7 21:49:04 | 显示全部楼层   重庆市重庆市
感谢分享~
回复 支持 反对

使用道具 举报

签到天数: 18 天

发表于 2022-6-27 11:37:21 | 显示全部楼层   广东省东莞市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 13 天

发表于 2022-6-15 20:05:05 | 显示全部楼层   广东省广州市
别点赞了,这个根本就用不了,函数调用都出问题了

点评

要加精易模块   广东省东莞市  发表于 2022-6-19 22:41
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 1 天

发表于 2022-5-4 13:01:27 | 显示全部楼层   上海市上海市
不明真相的吃瓜群众路过~\赶紧买个瓜围观
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 13 天

发表于 2022-4-27 20:37:16 | 显示全部楼层   广东省广州市
错误(10165): 所指定参数需要以"参考"方式传递,但是此处无法将所提供参数的地址传递过去.
佛了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表