跟踪 Windows Crypto API 中的 CSP 调用

问题描述 投票:0回答:2

我正在使用 Windows Server 2008 R2 证书颁发机构进行私钥存档。在客户端,我有兴趣了解当客户端请求启用存档的证书时,Windows 进程会调用哪些加密 API 函数。特别是,我的重点是跟踪此处列出的函数调用,http://msdn.microsoft.com/en-us/library/aa922849.aspx,存在于 Advapi32.dll 中。

我在这里尝试了windbg/cdb脚本(http://blogs.msdn.com/b/alejacma/archive/2007/10/31/cryptoapi-tracer.aspx)。我在发出证书请求时将其附加到 mmc.exe,但我无法检测到在此过程中进行的任何 CSP 调用。我还尝试通过 certreq.exe 请求证书,但 Windbg 无法跟踪任何 CSP 调用。我还尝试了其他形式的跟踪,如标题为“监视应用程序对 DLL 的调用”的 stackoverflow 线程中提到的

我需要附加到哪个 Windows 进程/服务,才能找到这些调用是如何进行的?是否可以在函数调用发生时进行跟踪,而不管是哪个进程进行的?

关于如何跟踪这些 CSP 调用有什么建议吗?

windows windbg cryptoapi mscapi
2个回答
1
投票

advapi32.dll 以前曾包含加密实现,但现在此功能已移至 cryptsp.dll。 Windows 团队有时会将公共方法的实现从一个 DLL 转移到另一个 DLL 中。在The Old New Thing Blog中查看更多相关示例。 Advapi32.dll 只是调用 cryptsp.dll 中的相应函数。

显然,您尝试调试的 mmc 中的证书 API 直接调用到 cryptsp.dll。 Windows 8 上的调用堆栈示例:

0:000> k
Child-SP          RetAddr           Call Site
00000000`0059c278 000007fd`6c1b7d8b CRYPTSP!CryptAcquireContextA
00000000`0059c280 000007fd`6c1ace66 CRYPT32!I_CryptGetDefaultCryptProv+0xbc
00000000`0059c2d0 000007fd`6c1ae1b3 CRYPT32!FastCreateCtlElement+0x4a6
00000000`0059c4e0 000007fd`6c1a248a CRYPT32!CreateCtlElement+0x23
00000000`0059c530 000007fd`6c1a2297 CRYPT32!CreateStoreElement+0x139
00000000`0059c610 000007fd`6c1abaa4 CRYPT32!LoadStoreElement+0x244
00000000`0059c6f0 000007fd`6c1a2c76 CRYPT32!OpenFromRegistry+0x39e
00000000`0059c950 000007fd`6c1a2e7c CRYPT32!OpenAllFromRegistryEx+0x96
00000000`0059c9d0 000007fd`6c1a394b CRYPT32!I_CertDllOpenRegStoreProv+0xfc
00000000`0059ca20 000007fd`6c196926 CRYPT32!I_CertDllOpenSystemRegistryStoreProvW+0x28b
00000000`0059cb20 000007fd`6c1a3b72 CRYPT32!CertOpenStore+0x296
00000000`0059cba0 000007fd`6c1a3dc2 CRYPT32!OpenPhysicalStoreCallback+0xc2
00000000`0059cc70 000007fd`6c1a4512 CRYPT32!EnumPhysicalStore+0x648
00000000`0059ce00 000007fd`6c196926 CRYPT32!I_CertDllOpenSystemStoreProvW+0x162
00000000`0059cee0 000007fd`6c1a3b72 CRYPT32!CertOpenStore+0x296
00000000`0059cf60 000007fd`6c1a3dc2 CRYPT32!OpenPhysicalStoreCallback+0xc2
00000000`0059d030 000007fd`6c1a4512 CRYPT32!EnumPhysicalStore+0x648
00000000`0059d1c0 000007fd`6c196926 CRYPT32!I_CertDllOpenSystemStoreProvW+0x162
00000000`0059d2a0 000007fd`47371a27 CRYPT32!CertOpenStore+0x296
00000000`0059d320 000007fd`47363611 certmgr!CCertStore::GetStoreHandle+0xc7

注意,advapi32.dll 甚至不存在于调用堆栈中。

因此,解决方案是直接在 cryptsp.dll 中的函数上放置断点。例如:

> bu CRYPTSP!CryptAcquireContextW
> bu CRYPTSP!CryptAcquireContextA
> bu CRYPTSP!CryptDecrypt
> ... and so on ...
> g

-1
投票

你想找回你丢失的比特币吗?这就是关键,我被骗了超过 1,540,000 美元,我和这个俄罗斯人交谈,我通过比特币向他汇款,我几乎失去了一切。但由于 Rottgen 先生的及时干预,他刚刚按时启动,拿回了我价值 1,540.000 美元的 BTC。他真的很擅长他所做的事情,我把他推荐给了几个朋友和同事,他们都成为了满意的客户。他在贸易行业给了我很多帮助,你可以联系他。黑客和资金追回他是最优秀的,在资金追回和揭露骗子方面拥有不同的技能。我很高兴能收回我的钱,成为这些复杂和掠夺性活动之一的骗局受害者并不可耻。通过举报,您也许能够收回部分或全部损失的资金,并防止诈骗者瞄准其他人。要恢复您被骗的比特币资金、被骗的资金、清除或删除犯罪记录和比特币挖矿,请通过 gmail 联系这位天才恢复倡导者 Rottgenraphael,稍后再感谢我。

© www.soinside.com 2019 - 2024. All rights reserved.