验证可执行文件的 Authenticode 签名时内存泄漏?

2023-12-31

我在用Win验证信任 http://msdn.microsoft.com/en-us/library/aa388208(v=VS.85).aspx使用以下函数验证某些 Windows 可执行文件的有效性,该函数在循环中调用_tmain:

int signature_is_valid(const wchar_t *filepath) {
    GUID guid = WINTRUST_ACTION_GENERIC_VERIFY_V2;
    WINTRUST_FILE_INFO file_info = { 0 };
    WINTRUST_DATA wd;

    file_info.cbStruct = sizeof(file_info);
    file_info.pcwszFilePath = filepath;
    file_info.hFile = NULL;
    file_info.pgKnownSubject = NULL;

    ZeroMemory(&wd, sizeof(wd));
    wd.cbStruct = sizeof(wd);
    wd.dwUIChoice = WTD_UI_NONE;
    wd.fdwRevocationChecks = WTD_REVOCATION_CHECK_NONE;
    wd.dwUnionChoice = WTD_CHOICE_FILE;
    wd.dwStateAction = 0;
    wd.pFile = &file_info;
    wd.dwProvFlags = WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT | WTD_CACHE_ONLY_URL_RETRIEVAL;

    return 0 == WinVerifyTrust(NULL, &guid, &wd);
}

然而,随着每次循环,内存不断增长,这是内存泄漏的明确迹象。

我的理解有问题吗API或者是WinVerifyTrust函数实际上泄漏了?我正在测试这个Windows XP Professional SP3 system.

EDIT:

这是一些输出umdh:

+   16812 (  16992 -    180)    472 allocs BackTraceAD1
+     467 (    472 -      5) BackTraceAD1 allocations

 ntdll!RtlDebugAllocateHeap+000000E1
 ntdll!RtlAllocateHeapSlowly+00000044
 ntdll!RtlAllocateHeap+00000E64
 kernel32!LocalAlloc+00000058
 CRYPT32!operator new+00000011
 CRYPT32!I_CryptCreateLruEntry+00000011
 CRYPT32!CreateAuthRootAutoUpdateMatchCaches+00000107
 CRYPT32!CCertChainEngine::FindAuthRootAutoUpdateMatchingCtlEntries+0000004D
 CRYPT32!CChainPathObject::GetAuthRootAutoUpdateUrlStore+000000C9
 CRYPT32!CChainPathObject::CChainPathObject+0000030E
 CRYPT32!ChainCreatePathObject+00000050
 CRYPT32!CCertIssuerList::AddIssuer+0000006A
 CRYPT32!CChainPathObject::FindAndAddIssuersFromStoreByMatchType+00000182
 CRYPT32!CChainPathObject::FindAndAddIssuersByMatchType+00000096
 CRYPT32!CChainPathObject::FindAndAddIssuers+00000023
 CRYPT32!CChainPathObject::CChainPathObject+000001F9
 CRYPT32!ChainCreatePathObject+00000050
 CRYPT32!CCertIssuerList::AddIssuer+0000006A
 CRYPT32!CChainPathObject::FindAndAddIssuersFromCacheByMatchType+00000084
 CRYPT32!CChainPathObject::FindAndAddIssuersByMatchType+00000023
 CRYPT32!CChainPathObject::FindAndAddIssuers+00000063
 CRYPT32!CChainPathObject::CChainPathObject+000001F9
 CRYPT32!ChainCreatePathObject+00000050
 CRYPT32!CCertChainEngine::CreateChainContextFromPathGraph+0000019E
 CRYPT32!CCertChainEngine::GetChainContext+00000044
 CRYPT32!CertGetCertificateChain+00000060
 WINTRUST!_WalkChain+0000019C
 WINTRUST!WintrustCertificateTrust+000000B7
 WINTRUST!_VerifyTrust+00000144
 WINTRUST!WinVerifyTrust+0000004E
 SigTest!signature_is_valid+000000DD 

+   10984 (  10984 -      0)      2 allocs BackTraceBB3
+       2 (      2 -      0) BackTraceBB3 allocations

 ntdll!RtlDebugAllocateHeap+000000E1
 ntdll!RtlAllocateHeapSlowly+00000044
 ntdll!RtlAllocateHeap+00000E64
 kernel32!LocalAlloc+00000058
 CRYPT32!PkiDefaultCryptAlloc+00000011
 CRYPT32!CertFindCertificateInCRL+00000051
 cryptnet!MicrosoftCertDllVerifyRevocation+00000250
 CRYPT32!I_CryptRemainingMilliseconds+0000021B
 CRYPT32!CertVerifyRevocation+000000B7
 CRYPT32!CChainPathObject::CalculateRevocationStatus+000001F2
 CRYPT32!CChainPathObject::CalculateAdditionalStatus+00000147
 CRYPT32!CCertChainEngine::CreateChainContextFromPathGraph+00000227
 CRYPT32!CCertChainEngine::GetChainContext+00000044
 CRYPT32!CertGetCertificateChain+00000060
 WINTRUST!_WalkChain+0000019C
 WINTRUST!WintrustCertificateTrust+000000B7
 WINTRUST!_VerifyTrust+00000144
 WINTRUST!WinVerifyTrust+0000004E
 SigTest!signature_is_valid+000000DD
 SigTest!wmain+00000073
 SigTest!__tmainCRTStartup+000001A8
 SigTest!wmainCRTStartup+0000000F
 kernel32!BaseProcessStart+00000023

在我看来,CRYPT32函数是泄漏的......或者我遗漏了一些东西。

EDIT2

Here is the memory evolution for some thousand loops: alt text


我没有看到这个 API 泄​​露的任何信息。也许这只是过程中的堆碎片?

您可以使用以下命令来验证这一点:umdh http://support.microsoft.com/kb/268343在时间 X 和 X+delta 拍摄进程快照,然后分析这些时间的比较堆使用情况。确保所有符号都可用,这样才能最有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证可执行文件的 Authenticode 签名时内存泄漏? 的相关文章

  • 使用对称密钥 (AES -128) 签名和验证消息

    我想知道对称密钥可以用来签署消息吗 我们可以使用共享密钥进行加密 另外 当使用对称密钥进行签名时 JAVA 中可以使用什么 API 来加载密钥并对消息进行签名 如果我使用 java security 中的 Signature 它有一个 ap
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • 为什么 FindWindow 找到了 EnumChildWindows 找不到的窗口?

    我正在寻找一个类名称为 CLIPBRDWNDCLASS 的窗口 它可以在办公应用程序和其他应用程序中找到 如果我使用 FindWindow 或 FindWindowEx 我找到第一个具有此类的 HWND 但我想要all具有该类的窗口 因此我
  • 低级挂钩/SetWindowsHookEx lParam 自动重复?

    在这里阅读 Windows PC 上如何实现键盘自动重复 https stackoverflow com questions 876852 how is keyboard auto repeat implemented on a windo
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何以编程方式从 Excel 中的 VBA 宏中删除数字签名?

    有没有办法以编程方式从 Excel 工作表的 VBA 宏中删除数字签名 即相当于进入 VBA 编辑器 转到 工具 菜单 gt 数字签名 并单击 删除 的代码 有趣的问题 出于安全原因 它故意不属于 Excel 对象模型的一部分 可以从证书存
  • 如何在 Windows 上查找当前系统缓存大小?

    到处搜索 但未能找到 API 调用来检索 Windows 上 文件 系统缓存的当前大小 全局内存状态Ex https stackoverflow com a 2017659 450917 检索总计 免费 已用和交换统计数据 获取系统文件缓存
  • VirtualAlloc 对齐方式与分配大小一致吗?

    当使用VirtualAlloc用于分配和提交具有页面边界的两倍大小的虚拟内存区域的 API 例如 void address VirtualAlloc 0 0x10000 MEM COMMIT PAGE READWRITE Get 64KB
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • 如何为 C++ Visual Studio 2019 指定应用程序图标?

    我见过本文档 https learn microsoft com en us visualstudio ide how to specify an application icon visual basic csharp view vs 2
  • 资源文件是否编译为 UNICODE 或 ANSI 代码页?

    首先 如果这个问题已经被回答了一百次了 我深表歉意 噢 但我的搜索显然很糟糕 因为我没有运气回答这个基本问题 EXE DLL中的资源是如何存储的 作为 UNICODE UCS 2 Windows 本机内部字符格式 还是使用资源块的代码页作为
  • 以编程方式更改任务栏图标(Win32,C++)[重复]

    这个问题在这里已经有答案了 我有一个 C win32 程序 我想在运行时编辑任务栏图标以显示有关该程序的警报等 但是我对 win32 api 不太有经验 而且我找不到任何东西在线的 我发现的最接近的是http www windows tec
  • 在 ASP.NET 中加密 cookie

    我想在 ASP NET 中加密 cookie 我已关注本文的方法 http www codeproject com KB web security HttpSecureCookie aspx 但它有一个缺点 那就是在内部方法上使用反射 这导
  • 对于使用 CCCrypt() 的 AES128,密钥可以长于 128 位吗?

    我正在使用CCCrypt https developer apple com library archive documentation System Conceptual ManPages iPhoneOS man3 CCCrypt 3c
  • 设置窗口像素的正确(且无闪烁)方法?

    我正在努力找出在 WM PAINT 期间将纯 RGBA 值数组转储到 Win32 窗口的客户区的正确方法 我有以下代码 但它看起来已经很复杂 我什至还没有完成 case WM ERASEBKGND return 1 case WM PAIN
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 使用 PBKDF2 和 SHA256 生成 128 位 AES 密钥是否安全?

    我想使用 PBKDF2 和一些加密哈希函数来生成 128 位 AES 密钥 SHA1 也是 128 位 所以我想将其与 PBKDF2 一起使用 但它已损坏 所以我选择使用 SHA256 这是否安全 或者散列大小和生成的密钥大小之间的差异是否
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex

随机推荐

  • 将 xml 转换为键值对表示法

    I use xmlstarlet el v显示 xml 文件的结构 包括所有属性和值 我想将其输出转换为某种键值对 即每个属性及其值位于单独的行上 包括 XPath 每行必须是唯一的
  • Python(NumPy)中相似度矩阵的高效计算

    Let X be a Bxn numpy矩阵 即 import numpy as np B 10 n 2 X np random random B n 现在 我对计算所谓的内核 甚至相似度 矩阵感兴趣K 其形状为BxB 及其 i j th
  • Laravel 内服务器发送的事件

    我正在尝试在 Laravel 4 中实现 HTML5 服务器发送的事件 我发现了这个repo https github com motyar mchat 该脚本使用server php文件以使其正常工作 我的问题是我将如何实现它以使其与控制
  • libMobileGestalt MobileGestalt.c:890: 此平台不支持 MGIsDeviceOneOfType [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我使用的是 Xcode 9 当我加载应用程序时 我不断收到此错误 libMobileGestalt MobileGestalt c 890
  • Pytest:测试运行后如何显示生成的报告?

    我将 pytest 与pytest html https github com pytest dev pytest html测试运行后生成 HTML 报告的插件 我正在使用自动连接的会话装置在浏览器中自动打开生成的 HTML 报告 pyte
  • 从 VS2008 发布的等效 msbuild 命令

    你知道 msbuild 中的发布命令与 VS2008 中的发布命令相对应吗 我想要的是结果输出是相同的 没有 PublishedWebSites 子目录 这可以从命令行实现还是我应该使用构建文件 Thanks 通过指定 WebProject
  • ASP.NET (MVC) - 将页面渲染到文件

    我必须创建一堆静态 html 文件作为控制台 winform 作业 当前的解决方案使用字符串生成器 在将 ASP NET MVC 与强类型视图页面 System Web Mvc ViewPage 一起使用后 我想知道是否可以利用这些视图页面
  • 为什么 JavaScript 中 (true > null) 总是返回 true?

    有人能告诉我为什么下面的代码在 JavaScript 中返回 true 吗 console log true gt null returns true null就好像false在这种情况下 即0作为一个数字 true is 1作为一个数字
  • C++自由实现“有界优先级队列”

    我正在寻找一个免费软件实现有界优先级队列C 中的抽象 基本上 我需要一个数据结构 其行为就像std priority queue但始终保持着 最好的 n最多元素 Example std vector
  • mysql 在where条件下使用按列分组

    我怎样才能使这个查询工作 SELECT column1 SUM Hits AS Hits FROM table WHERE SUM Hits gt 100 GROUP BY column1 问题出在where子句上 mysql显示错误 Er
  • 列出 git post-merge hook 中更改的文件

    有没有办法让合并后挂钩获取合并更改的所有文件的列表 即使它是快进 列出已更改文件的正确 Git 命令是diff tree https git scm com docs git diff tree 还有ORIG HEAD and HEAD 捷
  • Tensorboard(PyTorch)add_graph 中的错误

    我正在关注这个 Pytorch 的张量板 https pytorch org docs stable tensorboard html文档 我有以下代码 model torchvision models resnet50 False wri
  • 使用 SSIS 2008 将 Excel 导入 SQL 时跳过行

    我需要导入如下所示的工作表 March Orders Empty Row Week Order Date Cust 3 1 271356 3 3 10 010572 3 1 280353 3 5 10 022114 3 1 290822 3
  • 检测 Windows 进程和应用程序是否正在运行

    我正在调查是否有一种方法可以以编程方式检查某个进程是否作为进程运行 在运行的 exe 列表中 AND作为打开的应用程序 即在任务栏上 并根据结果采取行动 另外 有没有办法以编程方式终止进程OR正在运行的应用程序 我们正在该服务器上运行 WA
  • WordPress URL 不返回 404 页面

    在遭受黑客攻击后 我需要一些有关 WordPress 的帮助 我已经彻底清除了黑客攻击 谷歌也删除了 该网站可能被黑客入侵 flag 黑客向 Google 提交了大量 URL 其中每个有效 URL 的末尾都包含一个随机字符串 这些在谷歌搜索
  • 使用通用约束时如何使用继承

    当我尝试实现一个允许继承的库并希望有人可以提供帮助时 我正在努力解决一些通用约束问题 我正在尝试构建一个具有 3 种风格的类库 每种风格都构建在另一种之上 对我来说 这似乎是使用泛型的绝佳机会 因为我无法通过纯继承来做我想做的事情 代码如下
  • Linq & String.ToLower() 奇怪的行为

    我在服务器端有一个查询 它从邮政编码表中返回不同城市的列表 我正在使用 WCF RIA 服务 以下查询成功返回 228 个城市provincename public IQueryable
  • OS X 中的 GNU 链接器等效命令

    我正在阅读下面的书 http www cs bham ac uk exr lectures opsys 10 11 lectures os dev pdf关于操作系统 在第 43 页中 他们使用以下命令将带注释的机器代码转换为原始机器代码文
  • 如何将 3 个 DIV 彼此对齐?

    我需要在页脚容器 DIV 中创建 3 个 DIV 分别左对齐 中对齐和右对齐 我见过的所有 CSS 示例都像我一样使用了浮动 但是 由于某种原因 DotNetNuke 无法正确解析 CSS 我发现左侧窗格正确浮动 但右侧和中间窗格位于其正下
  • 验证可执行文件的 Authenticode 签名时内存泄漏?

    我在用Win验证信任 http msdn microsoft com en us library aa388208 v VS 85 aspx使用以下函数验证某些 Windows 可执行文件的有效性 该函数在循环中调用 tmain int s