2010-06-11 51 views
17

Internet Explorer lưu trữ mật khẩu ở đâu?Internet Explorer lưu trữ mật khẩu ở đâu?

Và vì đây là trang web lập trình, tôi không yêu cầu vị trí mà IE lưu trữ mật khẩu, nhưng API nào sử dụng để lưu mật khẩu.

Lúc đầu tôi cho rằng Microsoft đã sử dụng api tiêu chuẩn:

được sử dụng để tiết kiệm miền thông tin chương trình/trang web chung.

CredRead/CredWrite sau đó quay lại xung quanh và sử dụng:

để mã hóa dữ liệu với tài khoản của người dùng hiện hành. CredRead/CredWrite sau đó lưu trữ dữ liệu ở một số vị trí huyền diệu, nội dung trong đó bạn có thể nhìn thấy từ Control Panel:

enter image description here

Nhưng tôi không thấy mật khẩu IE trong đó. Vì vậy, tức là không lưu trữ mật khẩu bằng cách sử dụng CredRead/CredWrite.

IE nào sử dụng api để lưu trữ mật khẩu và nếu nó sử dụng CryptProtectData, khi nào thì lưu trữ dữ liệu được bảo vệ?


Edit: Lý do tôi hỏi nhu cầu có lời giải thích (vì nó khá rõ ràng), nhưng đó là bởi vì tôi có thể muốn sử dụng cơ chế tương tự.

Trả lời

17

tôi đã tìm thấy câu trả lời. IE cửa hàng mật khẩu trong hai địa điểm khác nhau dựa trên các loại mật khẩu:

  • Http-Auth:%APPDATA%\Microsoft\Credentials, trong các tập tin được mã hóa
  • Form-based:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2, mã hóa với url

Từ một số very good page on NirSoft.com:

Bắt đầu từ v ersion 7.0 của Internet Explorer, Microsoft đã hoàn toàn thay đổi cách lưu mật khẩu. Trong các phiên bản trước (4.0 - 6.0), tất cả mật khẩu đã được lưu ở vị trí đặc biệt trong Cơ quan đăng ký được gọi là "Bộ nhớ được bảo vệ". Trong phiên bản 7.0 của Internet Explorer, mật khẩu được lưu ở các vị trí khác nhau, tùy thuộc vào loại mật khẩu. Mỗi loại mật khẩu có một số hạn chế trong việc khôi phục mật khẩu:

  • AutoComplete Passwords: Những mật khẩu được lưu trong vị trí sau trong Registry: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 Các mật khẩu được mã hóa với URL của các trang web yêu cầu mật khẩu và do đó chúng chỉ có thể được khôi phục nếu các URL được lưu trữ trong tệp lịch sử. Nếu bạn xóa tệp lịch sử , IE PassView sẽ không được có thể khôi phục mật khẩu cho đến khi bạn truy cập lại các trang web mà yêu cầu mật khẩu. Hoặc, bạn có thể thêm danh sách URL của trang web yêu cầu người dùng tên/mật khẩu vào tệp trang web (xem bên dưới).

  • HTTP Authentication Passwords: Những mật khẩu được lưu trữ trong Credentials nộp dưới Documents and Settings\Application Data\Microsoft\Credentials, cùng với mật khẩu đăng nhập của máy tính LAN và mật khẩu khác. Do giới hạn về bảo mật , IE PassView chỉ có thể khôi phục các mật khẩu này nếu bạn có quyền quản trị viên.

Trong trường hợp cụ thể của tôi, nó trả lời câu hỏi ở đâu; và tôi quyết định không muốn sao chép nó. tôi sẽ tiếp tục sử dụng CredRead/CredWrite, nơi người dùng có thể quản lý mật khẩu của họ từ bên trong hệ thống giao diện người dùng đã được thiết lập trong Windows.

+0

Bạn có thể truy xuất chúng nếu chúng nằm trên ổ cứng cũ trên kệ không? Không phải bạn như trong bạn nhưng bạn theo nghĩa chung. :) – HPWD

+0

@dlackey Khái niệm có thể, miễn là bạn biết mật khẩu Windows cũ của mình. –

0

Không đảm bảo, nhưng tôi nghi ngờ IE sử dụng API Protected Storage cũ hơn.

+1

Bạn đã đúng một phần. Internet Explorer 4-6 sử dụng API lưu trữ được bảo vệ. IE 7-8 lưu trữ mật khẩu trong sổ đăng ký và tệp, tùy thuộc vào loại mật khẩu. –

+1

PSAPI không được dùng nữa từ lâu. IE6 sử dụng nó cuối cùng. –

1

Câu trả lời ngắn: trong Vault. Kể từ Windows 7, Vault được tạo ra để lưu trữ bất kỳ dữ liệu nhạy cảm nào trong số đó là thông tin đăng nhập của Internet Explorer. Vault thực chất là một dịch vụ LocalSystem - vaultsvc.dll.

Câu trả lời dài: Internet Explorer cho phép hai phương pháp lưu trữ thông tin xác thực: thông tin trang web (ví dụ: người dùng Facebook và mật khẩu) và dữ liệu tự động hoàn thành. Kể từ phiên bản 10, thay vì sử dụng Registry một thuật ngữ mới đã được giới thiệu: Windows Vault. Windows Vault là kho lưu trữ mặc định cho thông tin trình quản lý thông tin xác thực.

Bạn cần kiểm tra xem hệ điều hành nào đang chạy. Nếu Windows 8 trở lên, bạn hãy gọi VaultGetItemW8. Nếu không, bạn gọi số VaultGetItemW7.

Để sử dụng "Vault", bạn tải một DLL có tên "vaultcli.dll" và truy cập các chức năng của nó nếu cần.

Một C++ điển hình mã sẽ là:

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); 
} 

Sau đó, bạn liệt kê tất cả các thông tin được lưu trữ bằng cách gọi

VaultEnumerateVaults 

Sau đó, bạn đi qua các kết quả.

Các vấn đề liên quan