导出Chrome浏览器中保存的密码

导出Chrome浏览器中保存的密码

先知看到的,挺有意思,记录一下

不同浏览器的密码路径:

360:

1
2
C:\Users\1\Local Settings\Application Data\360Chrome\Chrome\User Data\ 
C:\Users\1\AppData\Local\360Chrome\Chrome\User Data\

chrome:

1
2
C:\Users\1\Local Settings\Application Data\Google\Chrome\User Data\ 
C:\Users\1\AppData\Local\Google\Chrome\User Data\

使用工具读取数据库文件,测试工具: SQLiteStudio

下载地址:

https://sqlitestudio.pl/index.rvt

Chrome做二次加密的方法: 通过Windows API CryptProtectData()实现

参考加密代码:

https://github.com/scheib/chromium/blob/eb7e2441dd8878f733e43799ea77c2bab66816d3/chrome/browser/password_manager/password_store_win_unittest.cc#L107

CryptProtectData()的说明可参考:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx.aspx “https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx“)

获得关键信息:

(1)对应解密函数为CryptUnprotectData

参考地址:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx.aspx “https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx“)

(2)只有与加密数据的用户具有相同登录凭据的用户才能解密数据

也就是说,只能在当前用户的凭据下解密数据

解密的开源代码也有很多,这里给出一个示例:

1
2
3
4
5
6
7
8
9
10
from os import getenv
import sqlite3
import win32crypt
import binascii
conn = sqlite3.connect(getenv("APPDATA") + "\..\Local\Google\Chrome\User Data\Default\Login Data")
cursor = conn.cursor()
cursor.execute('SELECT action_url, username_value, password_value FROM logins')
for result in cursor.fetchall():
password = win32crypt.CryptUnprotectData(result[2], None, None, None, 0)[1]
print password

注:

调用win32crypt.CryptUnprotectData需要安装pywin32

下载地址:

http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/pywin32-219.win32-py2.7.exe