如何生成自定义蛮力字典?

信息安全 蛮力 字典
2021-08-22 08:31:36

我在测试期间发现,公司经常使用其名称的变体作为关键密码(例如 Microsoft 的密码可能是M1cr0s0f+m1cros0ft等)。

因此,如果我给它“堆栈交换”这个短语,它会理想地计算尽可能多的逻辑变化,包括:

stack_exchange!

我见过很多字典生成器,但它们似乎都在做一些事情

aaaaaaa
aaaaaab
aaaaaac
aaaaaad

我想知道是否有任何可用的工具可以让我在给定“起始”词的情况下生成大量排列。

4个回答

尝试使用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%

只有在哪里

  • @ 将变为小写字母
  • ,'s 将随着大写字母而变化
  • % 将随数字而变化
  • ^ 将随符号变化

运行如下:

./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 ("---------------------------------------------------");

干杯!