双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

202328 202328 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
游戏服务器开发面试精解 这是一份游戏服务器开发方向的面试题库,共 295 题,覆盖游戏服务端架构、网络通信、同步模型、场景管理、战斗系统、数据存储、分服容灾、反作弊运维等核心链路,交付三种阅读版本,方便随时翻看。 内容主线按面试实际被追问的路径组织,覆盖十二个模块:游戏服务器整体架构与进程模型、网络通信(TCP/KCP/UDP/协议设计)、同步模型(状态同步、帧同步、预测回滚)、场景管理与 AOI、战斗与技能系统、任务活动与商业化系统、数据库设计与数据落地、缓存与内存数据库(Redis)、分区分服跨服与合服、高并发容灾与回档、防作弊与外挂对抗、运维监控日志与线上事故处理。 游戏服务端和普通后端不同,考的不是 Redis 分布式锁这种背一遍就行的八股,而是 100 人同屏广播怎么压、帧同步不同步怎么查、回档事故怎么收场这类一线踩坑题。作者面过腾讯 IEG、网易雷火、米哈游等公司的服务端岗,按公开面经频次统计后重新出题并逐题写解答。每题先给一句能直接说出口的结论,再展开原理或排查步骤,最后列回答要点;带追问标记的题顺着项目场景往下挖。版本基准对齐 C++17、Linux epoll、MySQL 8.0 InnoDB、Redis 7.2、MongoDB 6.0、protobuf、KCP,Netty 与 Go 在对比题里提到。 适合准备校招或一到三年社招、目标腾讯、网易、米哈游、莉莉丝、三七等游戏服务端岗的同学,C++ 为主的服务器方向最对口,Go 或 Netty 栈的同学看网络和架构部分也通用。 使用时第一遍从头过,盖住答案自己说一遍,卡壳的标星;第二遍只看标星和高频题;面试前重点看同步、战斗、回档三个模块,追问别跳过。 立即下载

用 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 文件,这个压缩函数有三个参数 zipFile、password,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 文件的解压密码 

 

 

...全文
评论
收藏 已收藏
分享
返回顶部