如何用Python写一个暴力破解加密压缩包的程

Python010

如何用Python写一个暴力破解加密压缩包的程,第1张

有些时候加密rar软件经常会忘了密码,但记得密码的大概,于是乎用Python写个程序来暴力破解吧:

首先要搞清楚如何用命令行来解压缩,经研究,rar软件解压是用的unrar.exe,将这个程序拷贝到C:\windows,然后进入加密软件包所在的文件夹,用命令行运行 下面的命令:

unrar.exe e -pabcd 123.rar

程序就是先前拷到C:\windows,然后参数e是指相对路径,如果在是本文件夹下运行这个命令,则只打文件名就可以了,输入密码的方式是-p后面的字段,假定是abcd,最后面的是要解压的文件名。

下面我们解决如何用Python来运行windows下的命令行

import subprocess

command = 'unrar.exe e -n -pabcd 123.rar'

subprocess.call(command)

这样也可以完成解压,既然这样,那就开干吧,写一个暴力循环,我以4位字母为例,字母加的不全,实际使用可以视情况添加

list1=['a','b','c','d']

list2=['a','b','c','d']

list3=['a','b','c','d']

list4=['a','b','c','d']

for i1 in range(0,len(list1),1):

for i2 in range(0,len(list2),1):

for i3 in range(0, len(list3), 1):

for i4 in range(0, len(list4), 1):

password=list1[i1]+list2[i2]+list3[i3]+list4[i4]

print(password)

command = 'unrar.exe e -n -p' + password + ' 123.rar'

child = subprocess.call(command)

if child == 0:

print('解压密码是:',password)

break

child是返回值,为0表示解压成功,可以挑出循环并打印密码了,我实测,4位纯数字或者字母,只需要十多秒就出来了,非常简单

有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt()。python也提供了比getopt()更简洁的argparse方法。另外,sys模块也可以实现简单的参数解析,本文将对这3种命令行参数解析方法简要介绍。

sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推。

命令行运行:

可以看到传入的参数通过sys.argv来获取,它就是一个参数列表。

python的getopt与C语言的的getopt()函数类似。相比于sys模块,支持长参数和短参数,并对参数解析赋值。但它需要结合sys模块进行参数解析,语法格式如下:

短参数为单个英文字母,如果必须赋值需要在后面加英文冒号( : ),长参数一般为字符串(相比短参数,更能说明参数含义),如果必须赋值需要在后面加等号( = )。

命令行运行:

注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数。

argparse模块提供了很多可以设置的参数,例如参数的默认值,帮助消息,参数的数据类型等。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法。

下面介绍这三个函数的使用方法。

argparse默认提供了 -h | --help 参数:

命令行运行:

下面列出部分参数:

下面来添加参数:

命令行运行:

parse_args() 方法用于解析参数,在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:

命令行运行:

本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说,建议选择argparse,代码量更少更简洁。更详细的使用方法参考官方文档:

--THE END--

Python 标准库中的 argparse 可以根据程序中的定义,从 sys.argv 中解析参数,并且自动生成帮助信息。

使用 add_argument 方法为应用程序添加参数,其中 add_argument 方法的参数比较多,这也使得 argparse 库的使用不够简洁,后续将继续为大家介绍更好用的命令行参数解析的开源库 click 。

下面是 add_argument 方法的参数及含义总结:

解析参数需要使用 ArgumentParser 实例的 parse_args 方法,此方法返回一个 NameSpace 对象;可以通过访问 NameSpace 对象属性的方式获取参数值。

下面是一个简单的例子:通过 parser.server 获取 --host 选项的值,通过 parse.boolean_switch 获取 -t 选项的值。

查看帮助信息:

参数默认值:

指定参数:

打印帮助信息:

打印版本信息:

传递参数: