Internet Explorer在哪里存储密码?

时间:2010-06-11 14:23:29

标签: security internet-explorer passwords password-protection

Internet Explorer在哪里存储已保存的密码?

由于这是一个编程网站,我不是要求IE存储密码的位置,,而是用于保存密码的API

起初我认为微软正在使用标准API:

用于保存域通用程序/网站凭据。

CredRead / CredWrite然后转身并使用:

使用当前用户的帐户加密数据。 CredRead / CredWrite然后将数据存储在一些神奇的位置,您可以从控制面板中看到其中的内容:

enter image description here

但我没有看到IE密码。因此,即不使用CredRead / CredWrite存储密码。

IE使用什么API来存储密码,如果它使用CryptProtectData,那么它在哪里存储受保护的数据?


编辑:我问的原因不需要解释(因为它非常明显),但这是因为我可能想要使用相同的机制。

3 个答案:

答案 0 :(得分:17)

我找到了答案。 IE根据密码类型将密码存储在两个不同的位置:

  • Http-Auth: %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。