欢迎光临!
若无相欠,怎会相见

Python学习之加强版ZIP密码破解

继续学习

接着昨天的进度学习。本次的加强版,实际就是可以自行指定相关的文件。例如加密的ZIP文件,字典文件。

依赖模块

zipfile模块是肯定包含的。而且由于书中的代码中使用的是多线程,所以threading模块也是包含的,另外,由于需要指定文件,所以脚本中需要有命令行参数。那么,optparse模块是需要的。optparse功能很强,例如下方的代码,我只需要在命令行中输入python zipfileplus.py -h , 就可以自动的把所有的帮助信息输出,如下:

源代码

import zipfile
import threading
import optparse


"""
ZIP压缩文件破解程序加强版,用户可以自己指定想要破解的文
件和破解字典,多线程破解
"""


def extractFile(zFile,password):
    try:
        zFile.extractall(pwd=password)
        print("密码:"+password)
    except:
        pass


def main():
    parser = optparse.OptionParser(u'使用方法 -f <zipfile> -d <dictionary>')
    parser.add_option('-f',dest='zname',type='string',help=u'指定zip压缩文件')
    parser.add_option('-d',dest='dname',type='string',help=u'指定字典文件')
    options, args = parser.parse_args()
    #if options.zname == None | options.dname == None:  #此处为书中的原始代码
    if options.zname == None or options.dname == None:  #
        print(parser.usage)
        exit(0)
    else:
        zname = options.zname
        dname = options.dname
    zFile = zipfile.ZipFile(zname)
    dFile = open(dname, 'r')
    for line in dFile.readlines():
        password = line.strip('\n')
        t = threading.Thread(target=extractFile,args=(zFile,password))
        t.start()


if __name__ == '__main__':
        main()

使用方法很简单,就是python zipfileplus.py -f crypt.zip -d dictionary.txt ,当然,我的加密的ZIP文件和字典文件都与脚本在同一个目录下面,你也可以在文件前面加上路径。

问题

在实验过程中,我发现书中的源代码是错误的,例如这一句:if options.zname == None | options.dname == None: ,当然也有可能是Python环境问题,我的Python环境是Windows 10 + Python 2.7.13 64bit,而书中的环境是BackTrack 5 R2 + Python 2.6.5。BackTrack是渗透测试系统,它的后继者就是kali linux。

我用书上的代码测试的时候,直接报错。错误信息如下:

E:\Projects\Python\20171114>python zipfileplus.py -f crypt.zip -d dictionary.txt

Traceback (most recent call last):
  File "zipfileplus.py", line 48, in <module>
    main()
  File "zipfileplus.py", line 33, in main
    if options.zname == None|options.dname == None:
TypeError: unsupported operand type(s) for |: 'NoneType' and 'str'

而且,我上网查找资料,也没找到(我太菜),然后,突然想起来Python里面好像没有“|”这个或运算符,上网查找Python的运算符,果然没有,下面是我找到的一部分

and  与
or  或
not  非
!= (not equal)  不等于
== (equal)  等于
>= (greater-than-equal)  大于等于
<= (less-than-equal)  小于等于
True  真
False  假

补充

抱歉,刚才在学习中发现,Python中还是有“|”这个运算符的,上面之所以报错,是因为代码缺少括号,如果改成这样,if (options.zname == None) | (options.dname == None):是可以运行的。很抱歉    —-2017-11-16  16:19:02

赞(0) 打赏
转载请注明:飘零博客 » Python学习之加强版ZIP密码破解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临