使用智能卡签名时,为RtlFreeHeap指定的地址无效(C ++)

时间:2011-08-26 17:50:11

标签: c++ exception cryptography heap-corruption

  • 我正在使用C ++和Visual Studio 2010。

当我使用智能卡执行签名时出现:“程序完成后。”

Windows has triggered a breakpoint in MyProgram.exe.

This may be due to a corruption of the heap, and indicates a bug in MyProgram.exe or any of the DLLs it has loaded.

The output window may have more diagnostic information

输出

HEAP[MyProgram.exe]: Invalid Address specified to RtlFreeHeap( 003C0000, 01BBFEA0 )
Windows has triggered a breakpoint in MyProgram.exe.

This may be due to a corruption of the heap, which indicates a bug in MyProgram.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while MyProgram.exe has focus.

The output window may have more diagnostic information.

MyProgram.exe程序使用dll“signer.dll。”

我尝试用“没有智能卡”签名。仅限Windows证书。 OK正常终止。
我尝试使用智能卡进行签名,出现一个要求输入密码的窗口。程序结束时。错误 - 为RtlFreeHeap指定的地址无效。
我使用智能卡,当它要求PIN时我标记为“NOT”。当程序结束时。错误 - 为RtlFreeHeap指定的地址无效。

我注意到只有在出现要求输入PIN的窗口时才会出现错误。

所以,我尝试使用WinDbg,遵循这篇文章:http://www.codeproject.com/KB/debug/windbg_quick_start.aspx

我在“CryptSignMessage”上显示断点:“使用智能卡时”

(150c.17fc): C++ EH exception - code e06d7363 (first chance)
(150c.17fc): C++ EH exception - code e06d7363 (first chance)

如果没有使用智能卡,则不会发生这种情况。

我认为他试图获取密钥的上下文但却不能“破坏内存”。在“第一次机会”之后提示PIN的窗口。

这是问题吗? 如何在使用CryptSignMessage之前使用密钥上下文获取证书?

我该如何解决?

没有智能卡,我可以正常签名。 使用智能卡我可以正常签名,但程序完成后会出现错误。

应该对智能卡上的标志采取什么护理?

先谢谢

1 个答案:

答案 0 :(得分:1)

这似乎是一个堆损坏,就像消息所说的那样。它们不容易追踪。最好的办法是使用内存分析工具来帮助找到原因。