テスト中に、企業が重要なパスワードにさまざまな名前を使用することが多いことを発見しました(たとえば、MicrosoftのパスワードはM1cr0s0f +またはm1cros0ftなど)。
したがって、「スタック交換」というフレーズを指定した場合、次のようなものを含む、可能な限り多くの論理バリエーションを計算するのが理想的です。
stack_exchange!
私は多くの 辞書ジェネレータ を見てきましたが、それらはすべて、
aaaaaaa
aaaaaab
aaaaaac
aaaaaad
「最初の」単語を指定して多数の順列を生成できるツールがあるかどうか疑問に思っています。
crunch-wordlist generator を使用してみてください。
使い方は:
./crunch <from-len> <to-len> [-f <path to charset.lst> charset-name] [-o wordlist.txt or START] [-t [FIXED]@@@@] [-s startblock]
-tオプションを使用すると、パターンを指定できます。例:st%ck ^%xch%ng%
どこだけ
次のように実行:
./crunch 14 14 -t st%ck^%xch%ng% -o wordlist.txt
330000の結果を与えます:
st0ck!0xch0ng0
st0ck!0xch0ng1
st0ck!0xch0ng2
st0ck!0xch0ng3
st0ck!0xch0ng4
st0ck!0xch0ng5
st0ck!0xch0ng6
...
文字セットが不十分だと思われる場合は、文字セットを変更することもできます。
あなたが話していることを実行するツールを作成しました。これは基本的にWordを受け取り、大文字/小文字および一般的な置換で文字を置き換えることにより、さまざまな可能なパスワードを生成します。こちらをご覧ください。
https://github.com/Broham/PassGen
stackexchange
のターゲットWordの場合、基本的には可能なすべての文字置換のデカルト積を作成するため、潜在的なパスワードはかなり長くなります。以下の電話:
python passgen.py -f stackexchange
以下に示すように、11,943,936個のパスワードを含むリストを生成します。
stackexchange
stackexchangE
stackexchang3
stackexchanGe
stackexchanGE
.
.
.
574<K3+<#4N9e
574<K3+<#4N9E
574<K3+<#4N93
どうぞ!私はそれを数ヶ月前に作りました、それはPython 2.7スクリプトです:pそれが役に立てば幸いです
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 ("---------------------------------------------------");
乾杯!
アルゴリズムへの影響についてはよくわかりません(つまり、私のソリューションには改善すべき点がたくさんあります)。
すべての文字には代替スペルがあります。あなたの例から、o
はO,0
の配列になります(最後のものはゼロです)。同様に、s
はS,5
などを取得します。NULL
も!,1,2,3
...などに置き換えることができます。該当する場合、ダイグラフも可能です。
ですから、あなたは言葉を入れ替えるのではなく、文字を入れ替えます。プリコンパイルされたルールセットが存在するかどうかはわかりませんが、関係ありません。最も時間がかかる部分は、文字の順列を入力することです。メインループは完全に簡単です。
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);
}
一部のPHP風味の疑似コード。 PHPを選択した理由は、連想配列を使用すると少し快適になるためです。つまり、ツールを自分で作成する方が、実際にツールを検索するよりも高速な場合があります。
これを行うためのQtアプリケーションの作成を開始しました。特定のユーザーに対して使用するように設計されています。私は自分のニーズを満たすために作成したので、一方向に調整されていますが、よりカスタマイズ可能にする予定です。現時点では自分でコンパイルする必要がありますが、Qtなのでほとんどのプラットフォームで実行できます。
Github にあります
ユーザーに会社名を付け、オプションで追加のキーワードを付ければ、それに基づいてパスワードが生成されます。現在0.1であり、活発に開発中です。コードは簡単なので、必要なことが正確に実行されない場合は、変更を加えることができます(そしてそれらを元に戻すことさえできます)
うーん。追加の構成でこれを使用できます