代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

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

  •  18
  • Ian Boyd  · 技术社区  · 14 年前

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

    由于这是一个编程站点,我并不是逐字询问IE存储密码的位置,而是询问哪个API IE用于保存密码。

    起初,我假设微软使用的是标准API:

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

    credread / credreat then turn around and use:。

    用当前用户的帐户加密数据。 credread / credreat then store the data in some magical location,contents of which you can see from the control panel:。

    但我在里面看不到IE密码。因此,IE不使用 credread来存储密码。 / credwrite

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


    编辑: 我询问的原因不需要解释(因为这很明显),但这是因为我可能想使用相同的机制。 但是哪个API IE用来保存密码 .

    起初,我假设微软使用的是标准API:

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

    克雷德雷德 / 信用证 然后转身使用:

    用当前用户的帐户加密数据。 克雷德雷德 / 信用证 然后将数据存储在一些神奇的位置,您可以从控制面板看到这些位置的内容:

    enter image description here

    但我在里面看不到IE密码。所以IE不使用 克雷德雷德 / 信用证 .

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


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

    3 回复  |  直到 8 年前
        1
  •  17
  •   Ian Boyd    14 年前

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

    • Http Auth: %APPDATA%\Microsoft\Credentials ,在加密文件中
    • 基于表格的: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 ,使用URL加密

    从A very good page on NirSoft.com :

    从Internet 7.0版开始 资源管理器,Microsoft已完全更改 保存密码的方式。在 以前的版本(4.0-6.0),全部 密码保存在一个特殊的 在注册表中的位置称为 “受保护的存储”。在版本7中 在Internet Explorer中,密码是 保存在不同的位置, 取决于密码的类型。 每种类型的密码都有一些 密码恢复的限制:

    • 自动完成密码: 这些 密码保存在以下位置 注册表中的位置: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 这个 密码使用URL加密 在要求 密码,因此它们只能 如果URL存储在 历史文件。如果你清除 历史文件,即passview将不会 能够恢复密码,直到 你再次访问那些 询问密码。 或者,您可以添加 需要用户的网站的URL 网站文件中的名称/密码 (见下文)。

    • HTTP身份验证 密码: 这些密码是存储的 在下面的凭据文件中 Documents and Settings\Application Data\Microsoft\Credentials 一起 使用局域网计算机的登录密码 以及其他密码。由于安全 限制,即passview可以恢复 这些密码只有在你有 管理员权限。

    在我的特定案例中,它回答了在哪里的问题;我决定不想重复这个问题。我会继续使用 CredRead / CredWrite ,用户可以在Windows中的已建立的UI系统中管理密码。

        2
  •  2
  •   Michael Haephrati    8 年前

    简短回答: 在金库里。自Windows7以来,创建了一个存储库,用于存储Internet Explorer凭证中的任何敏感数据。 保险库实际上是本地系统服务-vaultsvc.dll。

    长回答: Internet Explorer允许两种凭据存储方法:网站凭据(例如:Facebook用户和密码)和自动完成数据。从版本10开始,不再使用注册表,而是引入了一个新术语:Windows保险库。Windows保管库是凭证管理器信息的默认存储保管库。

    您需要检查正在运行的操作系统。如果是Windows 8或更高版本,您可以调用 跳伞运动8 . 如果不是,你可以打电话 跳高7号 .

    要使用“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
    

    然后你检查结果。

        3
  •  0
  •   Ian Boyd    14 年前

    不保证,但我怀疑是用老的 Protected Storage 应用程序编程接口。