-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.sh
152 lines (135 loc) · 4.89 KB
/
script.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash
# Variables de configuration
HASH_FILE=$1
OUTPUT_FILE="cracked_password.txt"
LOG_FILE="trace_follow.log"
POT_FILE="hashcat.potfile"
LOCK_FILE="/tmp/hashcat.lock"
# À modifier selon vos fichiers
DICT_FILES=(
"/root/CRACKING-PASSWORD/SecLists-master/Passwords/WiFi-WPA/probable-v2-wpa-top4800.txt"
"/root/CRACKING-PASSWORD/SecLists-master/Passwords/darkweb2017-top10000.txt"
"/mnt/files/rockyou_25Go.txt"
)
RULES=(
"/root/best64.rule"
"/root/pantagrule/rules/hashesorg.v6/pantagrule.hashorg.v6.one.rule"
)
MASKS=(
"?d?d?d?d?d?d?d?d" # Ex. 12345678
"?d?d?d?d?d?d?d?d?d?d" # Ex. 1234567890
"?u?u?u?u?u?u?u?u" # Ex. 8 lettres majuscules
"?u?u?u?u?d?d?d?d" # Mélange commun dans certains Wi-Fi
"?l?l?l?l?l?d?d?d" # abcde123
)
# Fonction de log avec niveaux de gravité et couleurs
log_message() {
local level="$1"
local message="$2"
local color
case "$level" in
"INFO") color="\033[1;32m" ;; # Vert
"WARNING") color="\033[1;33m" ;; # Jaune
"ERROR") color="\033[1;31m" ;; # Rouge
*) color="\033[0m" ;; # Défaut
esac
echo -e "${color}$(date '+%Y-%m-%d %H:%M:%S') [$level] : $message\033[0m" | tee -a "$LOG_FILE"
}
# Fonction de résumé final
log_summary() {
log_message "INFO" "Résumé de l'exécution :"
grep "Mot de passe trouvé" "$LOG_FILE" || log_message "INFO" "Aucun mot de passe trouvé."
}
# Vérification et attente du fichier de verrou
wait_for_lock() {
while [ -f "$LOCK_FILE" ]; do
log_message "WARNING" "Un processus Hashcat est en cours. Attente de 5 secondes..."
sleep 5
done
}
# Fonction pour tester un hash
run_hashcat() {
local options="$1"
wait_for_lock
touch "$LOCK_FILE"
log_message "INFO" "Lancement : hashcat $options"
if ! hashcat -D 1,2 -w 4 -m 22000 "$HASH_FILE" $options --potfile-path "$POT_FILE" >> "$LOG_FILE" 2>&1; then
log_message "ERROR" "Échec de hashcat avec les options : $options"
rm -f "$LOCK_FILE"
return 1
fi
rm -f "$LOCK_FILE"
return 0
}
# Fonction pour vérifier si un mot de passe a été trouvé
check_cracked() {
hashcat -m 22000 "$HASH_FILE" --show --potfile-path "$POT_FILE" | grep -q .
return $?
}
# Vérification du fichier de hash
if [ ! -f "$HASH_FILE" ]; then
log_message "ERROR" "Le fichier $HASH_FILE n'existe pas."
exit 1
elif [ ! -s "$HASH_FILE" ]; then
log_message "ERROR" "Le fichier $HASH_FILE est vide."
exit 1
fi
log_message "INFO" "Début de l'attaque Hashcat."
#############################################
# Étape 1 : Test avec des dictionnaires bruts
#############################################
log_message "INFO" "Étape 1 : Dictionnaires bruts"
for dict in "${DICT_FILES[@]}"; do
if [ ! -f "$dict" ]; then
log_message "ERROR" "Le fichier de dictionnaire $dict n'existe pas."
continue
fi
run_hashcat "-a 0 $dict"
if check_cracked; then
log_message "INFO" "Mot de passe trouvé avec $dict !"
hashcat -m 22000 "$HASH_FILE" --show --potfile-path "$POT_FILE" > "$OUTPUT_FILE"
log_message "INFO" "Mot de passe sauvegardé dans $OUTPUT_FILE."
log_summary
exit 0
fi
done
#############################################
# Étape 2 : Test avec des règles
#############################################
# Ajout de chiffres à la fin (password123)
# Substitutions (e → 3, o → 0)
# Mise en majuscule de la première lettre (password → Password)
log_message "INFO" "Étape 2 : Dictionnaires + Règles"
for dict in "${DICT_FILES[@]}"; do
for rule in "${RULES[@]}"; do
if [ ! -f "$rule" ]; then
log_message "ERROR" "Le fichier de règle $rule n'existe pas."
continue
fi
run_hashcat "-a 0 $dict -r $rule"
if check_cracked; then
log_message "INFO" "Mot de passe trouvé avec $dict et $rule !"
hashcat -m 22000 "$HASH_FILE" --show --potfile-path "$POT_FILE" > "$OUTPUT_FILE"
log_message "INFO" "Mot de passe sauvegardé dans $OUTPUT_FILE."
log_summary
exit 0
fi
done
done
#############################################
# Étape 3 : Attaques par masque
#############################################
log_message "INFO" "Étape 3 : Brute force avec masques"
for mask in "${MASKS[@]}"; do
run_hashcat "-a 3 $mask"
if check_cracked; then
log_message "INFO" "Mot de passe trouvé avec le masque $mask !"
hashcat -m 22000 "$HASH_FILE" --show --potfile-path "$POT_FILE" > "$OUTPUT_FILE"
log_message "INFO" "Mot de passe sauvegardé dans $OUTPUT_FILE."
log_summary
exit 0
fi
done
log_message "INFO" "Aucun mot de passe trouvé après toutes les tentatives."
log_summary
exit 1