我在测试期间发现,公司经常使用其名称的变体作为关键密码(例如 Microsoft 的密码可能是M1cr0s0f+或m1cros0ft等)。
因此,如果我给它“堆栈交换”这个短语,它会理想地计算尽可能多的逻辑变化,包括:
stack_exchange!
我见过很多字典生成器,但它们似乎都在做一些事情
aaaaaaa
aaaaaab
aaaaaac
aaaaaad
我想知道是否有任何可用的工具可以让我在给定“起始”词的情况下生成大量排列。
我在测试期间发现,公司经常使用其名称的变体作为关键密码(例如 Microsoft 的密码可能是M1cr0s0f+或m1cros0ft等)。
因此,如果我给它“堆栈交换”这个短语,它会理想地计算尽可能多的逻辑变化,包括:
stack_exchange!
我见过很多字典生成器,但它们似乎都在做一些事情
aaaaaaa
aaaaaab
aaaaaac
aaaaaad
我想知道是否有任何可用的工具可以让我在给定“起始”词的情况下生成大量排列。
尝试使用crunch-wordlist 生成器。
用法是:
./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
...
如果您认为字符集不够,您也可以修改字符集。
我刚刚创建了一个工具,可以做你所说的。它基本上需要一个单词并通过用大写/小写字母和常见替换替换字符来生成不同的可能密码。随意看看这里:
https://github.com/Broham/PassGen
因为潜在密码的目标词stackexchange
会变得很长,因为它本质上是在创建所有可能的字符替换的笛卡尔积。下面的调用:
python passgen.py -f stackexchange
生成一个包含 11,943,936 个密码的列表,如下所示:
stackexchange
stackexchangE
stackexchang3
stackexchanGe
stackexchanGE
.
.
.
574<K3+<#4N9e
574<K3+<#4N9E
574<K3+<#4N93
我不确定算法的含义(这意味着我的解决方案可能有很多需要改进的地方)但这里是:
每个字母都有一个替代拼写。从您的示例中,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 是因为关联数组让它更舒服一些。换句话说:自己编写工具可能比实际搜索工具要快。
干得好!几个月前我做到了,它是一个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 ("---------------------------------------------------");
干杯!