Internet Explorer在哪里存储已保存的密码?
由于这是一个编程网站,我不是要求IE存储密码的位置,,而是用于保存密码的API 。
起初我认为微软正在使用标准API:
用于保存域和通用程序/网站凭据。
CredRead
/ CredWrite
然后转身并使用:
使用当前用户的帐户加密数据。 CredRead
/ CredWrite
然后将数据存储在一些神奇的位置,您可以从控制面板中看到其中的内容:
但我没有看到IE密码。因此,即不使用CredRead
/ CredWrite
存储密码。
IE使用什么API来存储密码,如果它使用CryptProtectData
,那么它在哪里存储受保护的数据?
编辑:我问的原因不需要解释(因为它非常明显),但这是因为我可能想要使用相同的机制。
答案 0 :(得分:17)
我找到了答案。 IE根据密码类型将密码存储在两个不同的位置:
%APPDATA%\Microsoft\Credentials
,加密文件HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
,使用网址加密来自very good page on NirSoft.com:
从Internet 7.0版开始 Explorer,微软彻底改变了 密码保存的方式。在 以前的版本(4.0 - 6.0),全部 密码保存在一个特殊的 在注册表中的位置称为 “受保护的存储”。在7.0版中 Internet Explorer的密码是 保存在不同的位置, 取决于密码的类型。 每种类型的密码都有一些 密码恢复的限制:
自动完成密码:这些 密码保存在以下内容中 在注册表中的位置:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
密码使用URL加密 要求的网站 密码,因此它们只能是 如果存储URL,则恢复 历史文件。如果你清除了 历史文件,IE PassView不会 能够恢复密码,直到 你再次访问那些网站 要求输入密码。 或者,您可以添加列表 需要用户的网站的URL 名称/密码进入网站文件 (见下文)。HTTP身份验证 密码:存储这些密码 在Credentials文件下
Documents and Settings\Application Data\Microsoft\Credentials
,一起 使用LAN计算机的登录密码 和其他密码。由于安全 限制,IE PassView可以恢复 这些密码只有你有 管理员权利。
在我的特定情况下,它回答了在哪里的问题;我决定不想复制它。我将继续使用CredRead
/ CredWrite
,用户可以在Windows中已建立的用户界面系统中管理其密码。
答案 1 :(得分:2)
简答:。自Windows 7以来,创建了一个Vault,用于在其中存储Internet Explorer的凭据中的任何敏感数据。 Vault实际上是一个LocalSystem服务--vaultsvc.dll。
答案很长: Internet Explorer允许两种凭证存储方法:网站凭据(例如:您的Facebook用户和密码)和自动填充数据。从版本10开始,不再使用注册表,而是引入了一个新术语:Windows Vault。 Windows Vault是凭据管理器信息的默认存储库。
您需要检查哪个操作系统正在运行。如果是Windows 8或更高版本,则调用 VaultGetItemW8 。如果不是,则调用 VaultGetItemW7 。
要使用" Vault",您需要加载名为" vaultcli.dll"的DLL。并根据需要访问其功能。
典型的C ++代码是:
hVaultLib = LoadLibrary(L"vaultcli.dll");
if (hVaultLib != NULL)
{
pVaultEnumerateItems = (VaultEnumerateItems)GetProcAddress(hVaultLib, "VaultEnumerateItems");
pVaultEnumerateVaults = (VaultEnumerateVaults)GetProcAddress(hVaultLib, "VaultEnumerateVaults");
pVaultFree = (VaultFree)GetProcAddress(hVaultLib, "VaultFree");
pVaultGetItemW7 = (VaultGetItemW7)GetProcAddress(hVaultLib, "VaultGetItem");
pVaultGetItemW8 = (VaultGetItemW8)GetProcAddress(hVaultLib, "VaultGetItem");
pVaultOpenVault = (VaultOpenVault)GetProcAddress(hVaultLib, "VaultOpenVault");
pVaultCloseVault = (VaultCloseVault)GetProcAddress(hVaultLib, "VaultCloseVault");
bStatus = (pVaultEnumerateVaults != NULL)
&& (pVaultFree != NULL)
&& (pVaultGetItemW7 != NULL)
&& (pVaultGetItemW8 != NULL)
&& (pVaultOpenVault != NULL)
&& (pVaultCloseVault != NULL)
&& (pVaultEnumerateItems != NULL);
}
然后通过调用
枚举所有存储的凭据VaultEnumerateVaults
然后你回顾一下结果。
答案 2 :(得分:0)
不保证,但我怀疑IE使用较旧的Protected Storage API。