一叶障目
题解
拿到一张png图片,CRC值不对,需要修改宽高比
爆破修复
查看output.png
获得flag
flag
flag{66666}
检验CRC
import binascii
import struct
import argparse #接收参数模块
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='校验CRC脚本参数说明')
# 添加需要接收的参数
parser.add_argument('-f', type=str, help='文件名')
# 解析命令行参数
args = parser.parse_args()
# 开始读取图片内容
crc_f = open(f"{args.f}", "rb").read() #打开图片
crc_key = int(crc_f[29:33].hex(),16) #读取图片中的CRC校验值
print(f"图片CRC校验值:{crc_key}")
#计算CRC
data = crc_f[12:29]
crc32 = binascii.crc32(data) & 0xffffffff
print(f"CRC计算值:{crc32}")
if(crc32 == crc_key): #比较CRC计算值和图片的校验值是否一致,不相等说明宽高比异常
print("图片宽高比正常")
elif(crc32 != crc_key):
print("图片CRC校验失败,宽高比异常")
修复CRC
import binascii
import struct
import argparse #接收参数模块
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='修复CRC脚本参数说明')
# 添加需要接收的参数
parser.add_argument('-f', type=str, help='文件名')
# 解析命令行参数
args = parser.parse_args()
crc_f = open(f"{args.f}", "rb").read() #打开图片
crc_key = int(crc_f[29:33].hex(),16) #读取图片中的CRC校验值
print(f"图片CRC校验值:{crc_key}")
for i in range(4294): # 4294967295 四位数就够了
for j in range(4294):
data = crc_f[12:16]+struct.pack('>i', i)+struct.pack('>i', j)+crc_f[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
#print(f"当前爆破CRC计算值:{crc32}")
if(crc32 == crc_key): #CRC计算值与校验值相同,宽高比爆破完成
print(f"当前宽高比CRC计算值:{crc32}")
print(f"宽 {i} , 高 {j}")
print('hex:', hex(i), hex(j))
#爆破完成,重新生成写入
new_f = bytearray(crc_f)
new_f[16:20] = struct.pack('>i', i) # 宽
new_f[20:24] = struct.pack('>i', j) # 高
f = open('output.png','wb') #写入保存
f.write(new_f)
f.close
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?