NSSCTF-[羊城杯 2023]程序猿Quby
下载附件解压得到rar文件,里面有一张png图片
对图片进行分析,发现有rar压缩包,用kali里binwalk命令进行分离
发现压缩包都被加密了,结合题目可以联想出夏多加密
将时间按顺序归类,发现每个序号的时间为1.2.3.4,跟夏多加密规律一样
题目告诉秒针和分针都坏了,所以只用关心时针即可
得到密码
解密就得到 H A V E A N I C E D A Y
但他并不是压缩包的密码,所以猜测有密码隐写
用cloacked-pixel分析图片
得到密码 we1c0met0ycbCTF!!!
得到两个xlsx文件和一个wav音频文件
二值矩阵
因为只有两个数字在不断重复出现,所以尝试布尔数,将5.53改为1 4.46改为0
然后上脚本
def merge_matrices(submatrix1_file, submatrix2_file, merged_file):
# 读取子矩阵文件1
with open(submatrix1_file, 'r') as f1:
submatrix1_lines = f1.readlines()
# 读取子矩阵文件2
with open(submatrix2_file, 'r') as f2:
submatrix2_lines = f2.readlines()
# 获取子矩阵行数和列数
rows = len(submatrix1_lines)
cols = len(submatrix1_lines[0].strip()) + len(submatrix2_lines[0].strip())
# 检查子矩阵尺寸是否符合要求
if cols != 126:
print("错误:子矩阵尺寸不正确。")
return
# 合并子矩阵
merged_matrix = []
for i in range(rows):
combined_row = submatrix1_lines[i].strip() + submatrix2_lines[i].strip()
merged_matrix.append(combined_row)
# 将合并后的矩阵写入新文件
with open(merged_file, 'w') as f:
for row in merged_matrix:
f.write(row + '\n')
print("合并完成。")
# 调用函数并传入文件名
merge_matrices('test1.txt', 'test2.txt', 'merged_matrix.txt')
转为黑白像素点构图
import numpy as np
from PIL import Image
def restore_image_from_file(file_path):
with open(file_path, "r") as file:
lines = file.readlines()
binary_matrix = []
for line in lines:
row = [int(value) for value in line.strip()]
binary_matrix.append(row)
height = len(binary_matrix)
width = len(binary_matrix[0])
image = Image.new("L", (width, height))
pixels = image.load()
for y in range(height):
for x in range(width):
if binary_matrix[y][x] == 0: # 白色像素
pixels[x, y] = 255
else: # 黑色像素
pixels[x, y] = 0
return image
# 使用示例
file_path = "3.txt" # 二值化矩阵文件路径
restored_image = restore_image_from_file(file_path)
restored_image.show()
脚本参考@*鱼香Rose
运行得到密码
w0wyoudo4goodj0b
两个文件,fl4g.txt有两层编码,解密得到
sQ+3ja02RchXLUFmNSZoYPlr8e/HVqxwfWtd7pnTADK15Evi9kGOMgbuIzyB64CJ
将刚刚解出的字符串作为新表替换
NSSCTF{Qu6y_d0_not_lik3_w0rking_4t_all}