开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 20684|回复: 116
打印 上一主题 下一主题
收起左侧

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

[复制链接]

跳转到指定楼层
楼主
发表于 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)
返回 ()

计次循环尾 ()
返回 ()




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

前段时间写的!没记错的话有些地方可能有错,唉!不管了~

点评

大佬牛逼 如果可以写一个签名工具就好了   新疆维吾尔自治区乌鲁木齐市  发表于 2022-5-4 00:33
报错..错误(10002): 指定子程序或类方法名称“__get_byte”未找到。   江西省萍乡市  发表于 2021-5-13 11:39

评分

参与人数 13好评 +10 精币 +28 收起 理由
qq73s5456 + 1 来回血
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 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 3 天

114
发表于 2025-6-22 17:01:06 | 只看该作者   河南省信阳市
66666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 8 天

113
发表于 2025-6-11 10:06:51 | 只看该作者   广东省佛山市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:74% (23/31)

签到天数: 6 天

112
发表于 2025-3-2 16:07:37 | 只看该作者   辽宁省丹东市
牛逼的很啊
回复 支持 反对

使用道具 举报

签到天数: 2 天

111
发表于 2025-1-19 10:15:24 | 只看该作者   山东省青岛市
牛币楼主,目前找到唯一能用的版本
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 2 天

110
发表于 2024-12-12 08:16:25 | 只看该作者   湖南省张家界市
呜呜 签名时间戳好像查不出来啊大神 求修复啊
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)
109
发表于 2024-12-9 22:10:25 | 只看该作者   安徽省滁州市
111111111111111
回复 支持 反对

使用道具 举报

签到天数: 1 天

108
发表于 2024-10-4 10:41:01 高大上手机用户 | 只看该作者   山东省淄博市
进位加法金额姐姐文件夹第几集
回复 支持 反对

使用道具 举报

签到天数: 2 天

107
发表于 2024-9-24 14:26:10 | 只看该作者   浙江省台州市
1111111111111111111111111111111111111111111
回复 支持 反对

使用道具 举报

106
发表于 2024-6-26 01:29:38 | 只看该作者   贵州省遵义市
大佬太强了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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