J'ai constaté lors de tests que les entreprises utilisent souvent des variantes de leurs noms pour les mots de passe critiques (par exemple, le mot de passe de Microsoft peut être M1cr0s0f + ou m1cros0ft etc etc).
Donc, si je lui donnais l'expression "échange de pile", il calculerait idéalement autant de variations logiques que possible, y compris des choses comme:
stack_exchange!
J'ai vu beaucoup de générateurs de dictionnaire mais ils semblent tous faire quelque chose dans le sens de
aaaaaaa
aaaaaab
aaaaaac
aaaaaad
Je me demande s'il existe des outils qui me permettront de générer un grand nombre de permutations avec un mot de départ.
Essayez d'utiliser crunch - générateur de liste de mots .
L'utilisation est:
./crunch <from-len> <to-len> [-f <path to charset.lst> charset-name] [-o wordlist.txt or START] [-t [FIXED]@@@@] [-s startblock]
L'option -t vous permet de spécifier un modèle, par exemple: st% ck ^% xch% ng%
Où seulement
Fonctionnant comme suit:
./crunch 14 14 -t st%ck^%xch%ng% -o wordlist.txt
donne 330000 résultats:
st0ck!0xch0ng0
st0ck!0xch0ng1
st0ck!0xch0ng2
st0ck!0xch0ng3
st0ck!0xch0ng4
st0ck!0xch0ng5
st0ck!0xch0ng6
...
Vous pouvez également modifier le jeu de caractères si vous pensez qu'il est insuffisant.
Je viens de créer un outil qui fera ce dont vous parlez. Il prend essentiellement un mot et génère différents mots de passe possibles en remplaçant les caractères par des majuscules/minuscules et des substitutions courantes. N'hésitez pas à y jeter un œil ici:
https://github.com/Broham/PassGen
Pour un mot cible de stackexchange
, le mot de passe potentiel devient assez long car il crée essentiellement un produit cartésien de toutes les substitutions de caractères possibles. L'appel ci-dessous:
python passgen.py -f stackexchange
Génère une liste avec 11 943 936 mots de passe comme indiqué ci-dessous:
stackexchange
stackexchangE
stackexchang3
stackexchanGe
stackexchanGE
.
.
.
574<K3+<#4N9e
574<K3+<#4N9E
574<K3+<#4N93
voici! je l'ai fait il y a quelques mois, c'est un script Python 2.7: p j'espère que ça va aider
import time
print ("---------------------------------------------------");
print ("Welcome to BruteForce List Generator!");
print ("---------------------------------------------------");
print ("File output can be long, sometimes in x100Mbs!");
print ("so, have patience fgt,");
print (" ");
print ("Press ^C to exit");
print ("---------------------------------------------------");
length=int(raw_input("Enter the maximum of characters: "))
name=raw_input("Enter destination file name with extension (.txt): ")
tic = time.clock()
print ("---------------------------------------------------");
print ("Running, Please Wait!");
print ("---------------------------------------------------");
lista=[0 for x in xrange(length)]
x=length-1
string="abcdefghijklnmopqrstuvwxyz1234567890"
list_of_results=[]
file1=file(name,"w")
while(x>-1):
result=""
if lista[x]==len(string)-1:
for z in xrange(length):
result+=string[lista[z]]
lista[x]=0
x-=1
Elif x==length-1:
for z in xrange(length):
result+=string[lista[z]]
lista[x]+=1
else:
for z in xrange(length):
result+=string[lista[z]]
lista[x]+=1
if x>0:
x+=1
else:
x=length-1
file1.write(result+"\n")
toc = time.clock()
ttn = toc - tic
print ("Done! in "+str(ttn)+" seconds.");
print ("Please check "+str(name)+" in your directory");
print ("---------------------------------------------------");
À votre santé!
Je ne suis pas sûr des implications algorithmiques (ce qui signifie qu'il y a probablement beaucoup à améliorer dans ma solution) mais voici:
Chaque lettre a une orthographe alternative. Dans votre exemple, o
aurait le tableau de O,0
(le dernier est un zéro). De même, s
obtiendrait S,5
etc. Même NULL
peut être remplacé par !,1,2,3
... etc. Des digraphes sont également possibles le cas échéant.
Donc, vous ne permutez pas sur les mots, vous permutez sur les lettres. Je ne sais pas s'il existe un ensemble de règles précompilé mais cela n'a pas d'importance; la partie la plus longue est de taper les permutations de lettres. La boucle principale serait parfaitement simple.
for($i=0; $i<strlen($Word); $i++){
$l=$Word[$i];
for($j=0; $j<strlen($perms[$l]); $j++){
save(perms[$l][$j]);
isUpper($l) ? $Word[$i]=tolower($l) : $Word[$i]=toupper($l);
save($Word);
}
pour certains pseudocode à saveur PHP. J'ai choisi PHP parce que les tableaux associatifs le rendent un peu plus confortable. En d'autres termes: écrire l'outil vous-même peut être plus rapide que d'en rechercher un en fait.
J'ai commencé à créer une application Qt pour ce faire. Il est conçu pour être utilisé contre un utilisateur spécifique. Je l'ai créé pour satisfaire mes propres besoins, il est donc orienté dans un sens, mais je prévois de le rendre plus personnalisable. Vous devez le compiler vous-même pour le moment mais c'est Qt donc il fonctionnera sur la plupart des plateformes.
C'est sur Github
Vous lui donnez le nom de l'utilisateur et éventuellement des mots clés supplémentaires et il générera des mots de passe basés sur eux. Son à 0,1 en ce moment et en développement actif. Le code est facile, donc s'il ne fait pas exactement ce dont vous avez besoin, vous pouvez apporter des modifications (et même les apporter en retour)
Hmmm. vous pouvez l'utiliser avec des configurations supplémentaires