WEEK1-MISC
shiori不想找女友

010打开之后发现了一串神奇的json格式字符串,分析了一下,大概是在说从某个像素坐标位置,取多少像素,取出来的像素构成的图片有东西
from PIL import Image
import math
# 这里建议先尝试 shiori.png,如果出来的图是杂色,
# 再把 filename 改成 'file-补番列表.png' 试一次
filename = 'shiori.png'
# filename = 'file-补番列表.png'
def extract_hidden_image():
try:
img = Image.open(filename)
except FileNotFoundError:
print(f"找不到文件: {filename},请确认文件名")
return
pixels = img.load()
width, height = img.size
# 题目给出的参数
# block = 1 (通常指取 1x1 的像素点)
start_x = 10
start_y = 10
step_x = 7
step_y = 7
col_num = 450 # 关键参数:新图的宽度
# 存储提取出的像素
extracted_data = []
# 按照参数遍历图片提取像素
# 逻辑通常是:先确定行,再在行内按步长跳跃
for y in range(start_y, height, step_y):
for x in range(start_x, width, step_x):
extracted_data.append(pixels[x, y])
if not extracted_data:
print("未提取到任何数据,请检查参数或图片。")
return
# 计算新图片的高度
total_pixels = len(extracted_data)
# 高度 = 总像素 / 宽度 (向上取整)
new_height = math.ceil(total_pixels / col_num)
print(f"提取了 {total_pixels} 个像素点")
print(f"正在生成解密图片: 宽 {col_num} x 高 {new_height}")
# 创建新画布
# 模式保持一致 (通常是 RGB 或 RGBA)
new_img = Image.new(img.mode, (col_num, new_height))
# 将提取的像素填入新图片
idx = 0
for y in range(new_height):
for x in range(col_num):
if idx < total_pixels:
new_img.putpixel((x, y), extracted_data[idx])
idx += 1
else:
break
output_filename = 'solved_password.png'
new_img.save(output_filename)
print(f"成功!请查看生成的图片: {output_filename}")
# 自动打开图片 (Windows下)
try:
new_img.show()
except:
pass
if __name__ == '__main__':
extract_hidden_image()
随后获得了一张带有压缩包密码的图片

随后解压缩,得到一张全黑的图片,打开010看,是PNG标头,但是jpg结尾,我们直接修改后缀。

对于这种全黑的图片,直接上StegSolve

得到了flag

正文完