道德黑客脚本不工作 - 没有错误信息

问题描述:

我一直在参加道德黑客课程。本课程的一部分内容是创建一个Python脚本,用于从密码列表文本文件中找到锁定zip文件的密码(希望这很有意义!) - 基本上是通过尝试每个密码的文本文件进行迭代。该脚本不起作用,不会出错,并且讲师说“好吧,它适用于我” - 没用。这里的脚本:道德黑客脚本不工作 - 没有错误信息

import optparse 
import zipfile 
from threading import Thread 

def extract_zip(zfile, password): 
    try: 
     zfile.extractall(pwd=password) 
     print("[+] Password Found: " + password + '\n') 
    except: 
     pass 

def main(): 
    parser = optparse.OptionParser("usage %prog "+\ 
            "-f <zipfile> -d <dictionary>") 
    parser.add_option('-f', dest='zname', type='string',\ 
         help='specify zip file') 
    parser.add_option('-d', dest='dname', type='string',\ 
         help='specify dictionary file') 
    (options, arg) = parser.parse_args() 
    if (options.zname == None) | (options.dname == None): 
     print(parser.usage) 
     exit(0) 
    else: 
     zname = options.zname 
     dname = options.dname 

    zFile = zipfile.ZipFile(zname) 
    passFile = open(dname) 

    for line in passFile.readlines(): 
     password = line.strip('\n') 
     t = Thread(target=extract_zip, args=(zFile, password)) 
     t.start() 

if __name__ == '__main__': 
    main() 

其他两个文件与密码列表的文本文件,密码保护的zip文件,其中从文本文件密码的人会解锁。

在课程中有一个线程提到optparse是depracated的,argparse是它的替代品 - 但是即使用这种方法重写脚本也行不通。

对于想要关闭这部分课程,我正在寻找帮助,为什么这不起作用。

在此先感谢您的帮助。

+0

您是否在负责提取密码的if条件下调试了您的代码调试,并发现您可能在读取文件时发生错误。 –

+0

我不知道该怎么做 - 但。我尝试过使用调试器,但现在超出了我的知识范围。看代码,是(options,arg)的问题? – Steve

+1

安装pycharm并转到YouTube,以便在Python中进行调试。 –

我运行使用python3它excuted没有问题我这样做你的代码前不久 它是一个叫猛烈一些书

的password.txt应该包含这一行

受害者:HX9LLTdc /基德:503 :100:IAMA受害者:/家庭/受害者:/ bin/sh的 根:DFNFxgW7C05fo:504:100:马库斯·赫斯:/根目录:/斌/庆典

和命令应该是 蟒蛇stack.py - f evil.zip -d passwords.txt

每上面我的意见 - 我添加的代码下面正下方的 “尝试” 的声明:

password = bytes(password.encode('utf-8'))

...再变

print('[+] Password Found: ' + password + '\n')

print("[+] Password Found: " + (password.decode("utf-8")) + '\n')

现在我得到密码打印到控制台,并解压缩zip文件。这是最后的工作代码。

import optparse 
import zipfile 
from threading import Thread 


def extract_zip(zfile, password): 
    try: 
     password = bytes(password.encode('utf-8')) 
     zfile.extractall(pwd=password) 
     print("[+] Password Found: " + (password.decode("utf-8")) + '\n') 
    except: 
     pass 


def main(): 
    parser = optparse.OptionParser("usage %prog " + '-f <zipfile> -d <dictionary>') 
    parser.add_option('-f', dest='zname', type='string', help='specify zip file') 
    parser.add_option('-d', dest='dname', type='string', help='specify dictionary file') 
    (options, args) = parser.parse_args() 
    if (options.zname is None) | (options.dname is None): 
     print(parser.usage) 
     exit(0) 
    else: 
     zname = options.zname 
     dname = options.dname 

    zFile = zipfile.ZipFile(zname) 
    passFile = open(dname) 

    for line in passFile.readlines(): 
     password = line.strip('\n') 
     t = Thread(target=extract_zip, args=(zFile, password)) 
     t.start() 


if __name__ == '__main__': 
    main() 

,我发现这个问题的方法是通过改变“除了”语句打印例外控制台:

except Exception as e: print(e) 

从那里我有几个问题需要解决,但至少我有错误工作。一旦密码成功记录到控制台,我将怀疑语句更改回“通过” - 不需要查看失败的密码!

我希望这可以帮助别人遇到同样的问题。