本周选做的信息安全实验为Python实现Zip文件的暴力破解

实验预备:

这次实验我们需要用到的库为zipfile。下来我们先来了解一下这个模块。

首先我们的重点是对zip文件的操作,而zipfile就是本次实验的核心。zipfile模块是python中自带的模块,提供了对zip文件的创建读、写、追加、解压以及列出zip文件列表的工具。这里我们主要用到ZipFile对象的extractall 方法来解压zip文件,现在我们看一下ZipFile的文档,在shell中运行Python交互环境,并使用help方法来查看模块的使用方法。


`extractall(self, path=None, members=None, pwd=None)
`Extract all members from the archive to the current working
`directory. `path' specifies a different directory to extract to.
`'members' is optional and must be a subset of the list returned
`by namelist().

可以看到extractall(path=None, members=None, pwd=None)方法主要有三个参数,我们来看一下每个参数的含义:

•path指定解压后文件的存储位置

•members(可选)指定要Zip文件中要解压的文件,这个文件名称必须是通过namelist()方法返回列表的子集

•pwd指定Zip文件的解压密码

接下来尝试用程序解压带密码的压缩包。

!/usr/bin/env python

-- coding:utf-8 --


import zipfile try:
with zipfile.ZipFile('hello.zip') as zFile:
zFile.extractall(path='./',pwd=b'123456')
print('Extract successfully')
except:
print('Extract faild')

第一次运行结果显示失败,查询代码,原来是解压密码错误,修改代码,重新解压,成功。

接下来我们尝试用密码暴力破解,给订指定的密码字典,逐条尝试,直到成破解。


import zipfile
zFile = zipfile.ZipFile("hello.zip");
passFile = open('./pass.txt');
for line in passFile.readlines():
password = line.strip('\n');
try:
zFile.extractall(path="./",pwd=password);
print("当前测试密码为:"+password+" 密码正确!!!");
break;
exit(0);
except:
print("当前测试密码为:"+password+" 密码错误!!!");
pass;

开始进行暴力破解。。。。

破解成功!

鉴于前两个代码都是简单的知道密码和从已知的密码序列中查找,不符合暴力破解的定义,于是在网上查询资料,理解后对其进行修改得出下列代码。


import random
import zipfile
class Dictor():
CSet=‘0123456789'\
'abcdefghijklmnopqrstuvwxyz'\
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\
'~!@#$%^&*()_+’
def __init__(self,minlen,maxlen):
if maxlen>minlen:
self.__minlen=minlen
self.__maxlen=maxlen
else:
self.__minlen=maxlen
self.__maxlen=minlen
def __iter__(self):
return self
def next(self):
ret=''
for i in range(0,random.randrange(self.__minlen,self.__maxlen+1)):
ret+=random.choice(Dictor.CSet)
return ret
if __name__=='__main__':
zFile = zipfile.ZipFile("hello.zip");
for str in Dictor(5,6):
try:
zFile.extractall(path="./",pwd=str)
print("当前测试密码为:"+str+" 密码正确!!!")
break
except:
print("当前测试密码为:"+str+" 密码错误!!!");
pass

这段代码自带密码生成器,可以自动根据给出得范围进行全排列进而生成新密码进行解压测试。

效果图:

从测试中可得,密码破解得结果。

20169207《Linux内核原理及分析》第十二周作业的更多相关文章

  1. 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...

  2. 2018-2019-1 20189221 《Linux内核原理与分析》第七周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task ...

  3. 2018-2019-1 20189221 《Linux内核原理与分析》第六周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第六周作业 实验五 实验过程 将Fork函数移植到Linux的MenuOS fork()函数通过系统调用创建一个与原来 ...

  4. 2018-2019-1 20189221《Linux内核原理与分析》第五周作业

    2018-2019-1 20189221<Linux内核原理与分析>第五周作业 实验四 实验过程 当用户态进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数. 在Linux中 ...

  5. 2018-2019-1 20189221《Linux内核原理与分析》第三周作业

    2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和m ...

  6. 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业

    <Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...

  7. 2019-2020-1 20199329《Linux内核原理与分析》第十一周作业

    <Linux内核原理与分析>第十一周作业 一.本周内容概述: 学习linux安全防护方面的知识 完成实验楼上的<ShellShock 攻击实验> 二.本周学习内容: 1.学习& ...

  8. 2019-2020-1 20199329《Linux内核原理与分析》第八周作业

    <Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函 ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第七周作业

    <Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作 ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第六周作业

    <Linux内核原理与分析>第六周作业 一.本周内容概述: 学习系统调用的相关理论知识,并使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用 学习系统调用syste ...

随机推荐

  1. PC初始化

    @charset "utf-8"; /* CSS Document */ html{width:%;font-family: ;padding: ;} a{color:#;text ...

  2. pycharm 配置支持vue

    http://www.cnblogs.com/c-x-m/p/9229199.html

  3. ajax 之POST请求,参数序列化

    比如,,我们在没有使用jquery的时候,没有$.post来让我们使用,那我们像下面这样直接发送: var params1 = { username: username, passwrod: pass ...

  4. Apache Commons configuration使用入门

    使用Commons  Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...

  5. DevExpress XPO 开发指南 简要

    最近在看devexpress   安装程序中的代码Demos ..  C:\Users\Public\Documents\DevExpress Demos 16.1\Components\WinFor ...

  6. 15.Mysql中的安全问题

    15.SQL中的安全问题15.1 SQL注入简介SQL是用来和数据库交互的文本语言.SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操 ...

  7. Tinyos学习笔记(一)

    简述:发送和接受数据的程序分别烧录到两个节点上,发送方发送流水灯数据,接受方接受数据并实现流水灯 1.发送和接受程序用到的组件及其接口如图(通过make telosb docs获得)所示:   2.发 ...

  8. kafka的advertised.host.name参数 外网访问配置

    kafka的server.properties文件 ```host.name```开始只绑定在了内部IP上,对外网卡无法访问. 把值设置为空的话会kafka监听端口在所有的网卡上绑定.但是在外网访问时 ...

  9. Java JMX 监管

    Java JMX 监管 JSR 规范系列目录(https://www.cnblogs.com/binarylei/p/10348178.html) JMX(Java Management Extens ...

  10. partition

    一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...