强制执行zip文件会产生奇怪的结果

时间:2016-07-21 21:53:30

标签: python python-2.7 encryption zip brute-force

所以我写了这个程序在python中强制执行一个zip文件:

def Main():
    parser = argparse.ArgumentParser()
    parser.add_argument("zfile", help = "The encrypted zip file you wish to crack")
    parser.add_argument("length", help="Define the max length of password combinations you want to bruteforce")
    args = parser.parse_args()

    zFile = zipfile.ZipFile(args.zfile)
    keywords = [''.join(i) for i in itertools.product(ascii_lowercase, repeat = int(args.length))]

    for i in keywords:
        print "[*] Testing password: "+i
        try:
            zFile.extractall(pwd = str(i))
            print "[+] Password Found: "+i
            break
        except:
            pass    

if __name__ == '__main__':
    Main()

但是它表现得异乎寻常......我有一个存档,其密码是" dog",当我运行该程序时,它会找到一大堆密码,据说& #34;工作"但实际上并非如此。如果我手动将这些密码键入zip文件,它会提取损坏的文件。 该计划称密码如" aqw"会工作,而且有很多这些。最奇怪的部分是程序在声称其中一个无效密码可以正常工作后,不会从for循环中断。

我不知道发生了什么!

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为ZIP文件格式使用非常粗略的方法来确定输入的密码是否确实正确或不正确。

基本上,存档目录中存储了一个字节,表示密码是“正确的”。问题是当你进行强制执行时,你会经常在字节匹配时触发误报(可能每255次尝试一次),但密码实际上并不正确。

当您发现这样的潜在匹配时,我们的想法是使用该密码完全解密存档。一旦完全解密,程序应该将解密数据的CRC与存储的CRC进行比较,并检查密码是否实际上是正确的。

这是您确定已找到匹配的唯一方法。