题目描述
解题思路
打开压缩包后发现有Hint,使用Ziperello爆破一下密码,可以看到压缩包的四位数字名称就是解压压缩包的密码,通过写一个python脚本应该就能解决。脚本我放在后面了。
解压出一个qr.txt的文本文件。
这个可以通过RGB转图片,随波逐流的这个功能做出来显示的长:宽=4:1,需要自己写脚本重写。最后出来的二维码如图:
flag{ta01uyout1nreet1n0usandtimes}
解压脚本
解压缩脚本
这个需要解压很多个压缩包,需要注意路径问题,最好使用相对路径写脚本。如果使用绝对路径的话很容易出现问题。如图:
以下是可以运行的解压代码,将解压过程中的路径设置为相对于当前工作目录的路径。这样可以有效减少路径长度并避免 WinError 206 错误。
import zipfile
import os
import shutil
def extract_all_layers(zip_file, max_layers=100):
current_file = zip_file
layer_count = 0
# 设置一个临时的工作目录,尽量减少路径长度
base_dir = os.path.join(os.getcwd(), "temp_extraction")
os.makedirs(base_dir, exist_ok=True)
relative_path = os.path.basename(current_file)
# 复制初始压缩文件到临时目录
shutil.copy(current_file, os.path.join(base_dir, relative_path))
current_file = os.path.join(base_dir, relative_path)
while True:
if layer_count >= max_layers:
print("达到最大解压层数限制")
break
try:
# 获取当前压缩包名称作为密码
password = os.path.basename(current_file).replace('.zip', '')
extract_folder = os.path.join(base_dir, password)
os.makedirs(extract_folder, exist_ok=True)
with zipfile.ZipFile(current_file, 'r') as zip_ref:
try:
zip_ref.extractall(extract_folder, pwd=bytes(password, 'utf-8'))
except RuntimeError:
print(f"解压失败,可能是密码错误: {password}")
break
extracted_files = zip_ref.namelist()
print(f"解压到: {extract_folder}, 解压文件: {extracted_files}")
if len(extracted_files) == 1:
extracted_file = os.path.join(extract_folder, extracted_files[0])
else:
print("无法处理多个文件或文件结构异常")
break
# 删除已解压的 zip 文件
os.remove(current_file)
# 更新当前文件为解压后的文件
current_file = extracted_file
layer_count += 1
if not zipfile.is_zipfile(current_file):
print(f"最终解压的文件: {current_file}")
break
except (zipfile.BadZipFile, FileNotFoundError, OSError) as e:
print(f"解压失败: {e}")
break
# 完成后将最终文件移动到工作目录外的目标路径
final_output = os.path.join(os.path.dirname(zip_file), os.path.basename(current_file))
shutil.move(current_file, final_output)
print(f"最终解压文件移动到: {final_output}")
# 删除临时工作目录
shutil.rmtree(base_dir, ignore_errors=True)
# 初始压缩包路径
initial_zip = r'C:\Users\wzying\Downloads\0573\0573.zip'
extract_all_layers(initial_zip, max_layers=10000)
RGB转图片脚本
这个是在别人的wp里面找的脚本,很好用
from PIL import Image
string=''
file=open('qr.txt')
MAX=200
picture=Image.new("RGB",(MAX,MAX))
for y in range(MAX):
for x in range(MAX):
string =file.readline()
picture.putpixel([x,y],eval(string)) #直接使用eval()可以转为元组
picture.show()