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 文件的解压密码 

 

 

...全文
392 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕“计及V2G主动支撑的光伏-储能-电动汽车输配协同日前优化调度”展开研究,提出了一种综合考虑光伏发电、储能系统与电动汽车(EV)在V2G(Vehicle-to-Grid)模式下协同参与电网调度的优化模型。通过Matlab代码实现,构建了日前优化调度框架,充分挖掘电动汽车作为移动储能单元的潜力,利用其双向充放电能力为主动配电网提供调峰、填谷和备用等主动支撑服务。研究综合考虑了可再生能源出力不确定性、负荷需求波动以及电动汽车出行行为特征,建立了多主体、多目标的协同优化机制,旨在降低系统运行成本、提高新能源消纳水平,并增强电网运行的稳定性与可靠性。该资源属于电力系统与综合能源系统领域的高水平科研复现资料,具备较强的理论深度与工程应用价值; 适合人群:具备电力系统分析、优化建模基础及Matlab编程能力的研究生、科研人员,以及从事智能电网、能源互联网、综合能源系统等相关领域技术研发的专业技术人员; 使用场景及目标:①用于学习和复现源-网-荷-储协同优化调度的核心建模方法与求解流程;②掌握V2G技术在电网调频调峰中的数学建模方法及其在优化调度中的集成应用;③支撑光伏、储能与电动汽车耦合系统的低碳经济调度、鲁棒优化或分布鲁棒优化等前沿课题的研究与仿真验证; 阅读建议:建议结合文中提供的Matlab代码与主流优化工具箱(如YALMIP、CPLEX、Gurobi等)进行实践操作,重点理解目标函数设计、约束条件构建及多变量耦合关系的处理策略,同时可进一步拓展至日内滚动优化、实时调度或多时间尺度协调优化方向开展深入研究。
内容概要:本文提出了一种基于改进自适应完备集合经验模态分解(Improved Adaptive Complete Ensemble Empirical Mode Decomposition, ICEEMDAN)的混合储能辅助火电机组调频协同控制策略,并提供了完整的Matlab代码实现。该策略利用ICEEMDAN对电网频率波动信号进行高精度自适应分解,提取不同时间尺度下的功率分量,进而合理分配火电机组与混合储能系统(如蓄电池、飞轮等)的调频任务,充分发挥各自响应速度快慢互补的优势。通过引入优化算法对功率分配系数进行动态整定,实现了调频过程中储能系统的高效协同运行,有效抑制了功率波动,提升了系统频率调节的快速性、稳定性和调节精度,同时延长了储能设备的使用寿命。文中详细阐述了算法原理、模型构建、控制逻辑设计及仿真验证过程,具有较强的可复现性与工程应用价值。; 适合人群:具备电力系统自动化、新能源并网控制或智能优化算法等相关专业知识背景,熟悉Matlab/Simulink仿真平台的技术人员,特别适用于从事电网调频、储能系统控制、信号处理在电力系统中应用等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入研究混合储能系统在提升传统火电机组调频性能中的作用机制;②掌握ICEEMDAN等先进非平稳信号处理方法在功率动态分解中的具体实现与参数调优;③构建火电机组-储能协同调频仿真模型,开展多工况对比分析以优化控制性能;④为相关学术论文复现、科研项目申报或实际工程方案设计提供可靠的技术参考与代码支持。; 阅读建议:建议结合Matlab代码逐模块阅读文档内容,重点关注ICEEMDAN的实现流程、IMF分量筛选规则、功率分配权重计算逻辑及整体控制架构的设计思路。读者可通过调整信号噪声水平、滤波参数、储能容量配置等变量进行仿真实验,对比不同策略下的调频效果,从而深化对协同控制机理的理解,并可进一步拓展至风光火储联合系统或多时间尺度协调控制的研究场景。

39

社区成员

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

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