2023-2024-1 20232811《Linux内核原理与分析》第十三周作业

202328 2023-12-14 11:40:24

用 Python 的 zipfile 模块实现 Zip 文件的暴力破解

一、实验原理

1.1 zipfile 模块

1.2 argparse 模块

二、实验步骤

2.1 核心代码

 2.2 密码字典

2.3 运行结果


用 Python 的 zipfile 模块实现 Zip 文件的暴力破解

一、实验原理

1.1 zipfile 模块

zipfile 模块是 python 中自带的模块,提供了对 zip 文件的创建读、写、追加、解压以及列出 zip 文件列表的工具。我们主要用到 ZipFile 对象的 extractall 方法来解压 zip 文件,在python3中使用help查看该模块的使用方法:

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

  • path 指定解压后文件的存储位置
  • members(可选)指定要 Zip 文件中要解压的文件,这个文件名称必须是通过 namelist() 方法返回列表的子集
  • pwd 指定 Zip 文件的解压密码

将 1.txt 文件压缩成加密的 1.zip 文件,密码为 1314

zip -r 1.zip 1.txt -P 1314

使用ZipFile解压文件的demo:

import zipfile
try:
    with zipfile.ZipFile('1.zip') as zFile:     #创建 ZipFile 对象
        #解压文件
        zFile.extractall(path='./', pwd=b'1314')
        print('Extract the Zip file successfully!')
except:
    print('Extract the Zip file failed!')

1.2 argparse 模块

本次实验我们选择使用 argparse 模块来解析命令行参数。argparse 模块的文档描述:

argparse 提供了非常友好的命令行解析接口,在命令行参数比较多的时候更为明显。虽然本次实验命令行参数比较少,但是养成使用 argparse 的习惯有助于我们解析较多参数的时候不会有不知所措的感觉

二、实验步骤

2.1 核心代码

不断去读取密码字典尝试解压带密码的 Zip 文件,如果成功则表示这个密码正确,失败则继续读取密码字典中的密码并尝试解压缩,直到解压缩成功或者密码字典中的密码都尝试一遍

我们先写一个函数专门用于解压缩 Zip 文件,这个压缩函数有三个参数 zipFilepassword,savePath。含义如下:

  • zipFile 表示一个 ZipFile 对象。
  • password 表示解压 ZipFile 的密码。
  • savePath 表示解压后文件存储的路径。

这个函数在尝试密码之后会返回一个布尔值,如果解压成功会返回 True,如果失败则会返回 False

创建一个 ZipFile 对象,并循环读取密码字典文件中的每一行 密码,最后调用我们之前写的解压缩 Zip 文件的函数,根据返回值判断是否找到密码,如果找到则退出循环,否则继续尝试解压密码

在读取每一行密码的同时一定要去掉换行符 \n,因为我们在读取的时候会连 \n 一起读取出来,如果直接去尝试密码肯定不会尝试成功

通过解压 Zip 文件的函数来看我们需要知道 密码 和 存储路径 这两个参数,而密码则是从密码字典文件中读取出来的,所以我们需要在程序运行时添加 密码文件路径 和 文件存储路径 这两个参数,代码如下:

import zipfile
import argparse
import os
from os.path import *

def tryZipPwd(zipFile, password, savePath):
    try:
        zipFile.extractall(path=savePath, pwd=password.encode('utf-8'))
        print('[+] Zip File decompression success,password: %s' % (password))
        return True
    except:
        print('[-] Zip File decompression failed,password: %s' % (password))
        return False


def main():
    # 这里用描述创建了 ArgumentParser 对象
    parser = argparse.ArgumentParser(description='Brute Crack Zip')
    # 添加 - H 命令 dest 可以理解为咱们解析时获取 - H 参数后面值的变量名, help 是这个命令的帮助信息
    parser.add_argument('-f', dest='zFile', type=str, help='The zip file path.')
    parser.add_argument('-w', dest='pwdFile', type =str, help='Password dictionary file.')
    zFilePath = None
    pwdFilePath = None
    try:
        options = parser.parse_args()
        zFilePath = options.zFile
        pwdFilePath = options.pwdFile
    except:
        print(parser.parse_args(['-h']))
        exit(0)

    if zFilePath == None or pwdFilePath == None:
        print(parser.parse_args(['-h']))
        exit(0)

    with zipfile.ZipFile(zFilePath) as zFile:
        with open(pwdFilePath) as f:
            for pwd in f.readlines():
                p,f = split(zFilePath)
                dirName = f.split('.')[0]
                dirPath = join(p, dirName)
                try:
                    os.mkdir(dirPath)
                except:
                    pass
                ok = tryZipPwd(zFile, pwd.strip('\n'), dirPath)
                if ok:
                    break
if __name__ == '__main__':
    main()

 2.2 密码字典

我们创建一个用于测试的密码字典 pwd.txt

2.3 运行结果

可以看到程序确实找到了 Zip 文件的解压密码 

 

 

...全文
492 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
融合量子初始、演化博弈与RK4的增强型红嘴蓝鹊优化器及其在UAV路径规划中的应用(Matlab代码实现)内容概要:本文提出了一种融合量子初始、演化博弈与四阶龙格-库塔法(RK4)的增强型红嘴蓝鹊优化器(QEG-RKRBMO),并将其应用于无人机(UAV)在复杂环境下的三维路径规划问题。该算法通过量子初始化增强种群多样性,引入演化博弈机制优化个体行为策略以平衡全局探索与局部开发能力,并利用RK4方法提升搜索路径的精度与稳定性。研究通过Matlab仿真验证了该算法在UAV路径规划中的优越性,有效解决了传统优化算法易陷入局部最优、收敛速度慢及路径精度不高等问题。; 适合人群:具备一定编程基础(熟悉Matlab)、从事智能优化算法、路径规划或无人机相关研究的科研人员及研究生。; 使用场景及目标:①解决复杂环境下无人机三维路径规划问题;②提升智能优化算法的收敛速度与全局寻优能力;③为智能算法改进与多策略融合提供技术参考与实现方案; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注量子编码、演化博弈策略设计及RK4在迭代过程中的集成方式,并可通过调整参数或更换测试场景进一步验证算法鲁棒性。

39

社区成员

发帖
与我相关
我的任务
社区描述
北京电子科技学院 《Linux内核原理与分析》课程
linuxarm开发系统安全 高校 北京·丰台区
社区管理员
  • rocflytosky
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧