洛阳瀍河建设局网站,企业管理软件销售好做吗,微信商城登录平台,网络服务商网站第二十五题#xff1a;
提示#xff1a;flag在图片下面。
直接检查CRC#xff0c;检测到错误#xff0c;就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…第二十五题
提示flag在图片下面。
直接检查CRC检测到错误就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filename, rb) as f: data f.read() # 定位 IHDR 块的位置跳过PNG签名和长度字段 ihdr_start 8 4 # 8字节签名 4字节长度字段 ihdr_type data[ihdr_start:ihdr_start4] # 应为 bIHDR if ihdr_type ! bIHDR: print([-] IHDR chunk not found!) return # 提取原始宽高和其他参数假设宽度和高度各占4字节 width_bytes data[ihdr_start4 : ihdr_start8] # 篡改后的宽度 height_bytes data[ihdr_start8 : ihdr_start12] # 篡改后的高度 other_params data[ihdr_start12 : ihdr_start17] # 后续5字节参数 # 提取存储的 CRC 值位于IHDR数据块末尾 stored_crc_bytes data[ihdr_start17 : ihdr_start21] stored_crc struct.unpack(I, stored_crc_bytes)[0] # 大端解析 print(f[*] 目标 CRC: {hex(stored_crc)}) print(f[* 原始篡改尺寸: 宽度{struct.unpack(I, width_bytes)[0]}, 高度{struct.unpack(I, height_bytes)[0]}) # 遍历可能的宽高范围根据实际情况调整范围 max_width 2000 # 假设宽度最大可能到2000像素 max_height 2000 # 假设高度最大可能到2000像素 print(f[*] 开始暴力破解宽高范围: 1-{max_width} x 1-{max_height}...) for width in range(1, max_width 1): for height in range(1, max_height 1): # 构造 IHDR 数据块类型码 宽高 其他参数 ihdr_data bIHDR struct.pack(I, width) struct.pack(I, height) other_params # 计算 CRC computed_crc binascii.crc32(ihdr_data) 0xFFFFFFFF if computed_crc stored_crc: print(f\n[] 成功匹配真实宽高: {width}x{height}) print(f CRC: {hex(computed_crc)}) return print([-] 未找到匹配的宽高组合请扩大范围或检查参数) if __name__ __main__: brute_force_ihdr_crc(misc26.png) # 替换为你的文件名 ctfshow{494f611cc5842dd597f460874ce38f57}
第二十六题 加上高度“ 25e ”得到ctfshow{94aef125e087a7ccf2e28e742efd704c}
第二十七题 修改高度
ctfshow{5cc4f19eb01705b99bf41492430a1a14}
第二十八题
修改高度后使用Stegsolve查看 ctfshow{59c8bc525426166b1c893fe12a387fd7}
第二十九题 ctfshow{03ce5be6d60a4b3c7465ab9410801440}
第三十题
提升说正确的宽度是950我们在010里修改一下就可以得到flag了。 ctfshow{6db8536da312f6aeb42da2f45b5f213c}
第三十一题
使用010打开复制FF 到3A结束 所有字节是487253 减去文件头53个字节后再除3RGB 每个像素由3个字节最后再除150高度得到1082.6666666666667即宽带为1082。 ctfshow{fb09dcc9005fe3feeefb73646b55efd5}
第三十二题 ctfshow{685082227bcf70d17d1b39a5c1195aa9}
第三十三题 ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}
第三十四题
这是python的脚本 用来修改宽度每修改一个就保存一个在出来的结果中使用肉眼找到正确的图片
这种方法只能在win系统下使用利用windows忽略crc检验码的特性来完成题目kali系统下我目前找不到平替的方法。 import zlib import struct filename misc34.png with open(filename, rb) as f: all_b f.read() #w all_b[16:20] #h all_b[20:24] for i in range(901,1200): name str(i) .png f1 open(name,wb) im all_b[:16]struct.pack(i,i)all_b[20:] f1.write(im) f1.close() ctfshow{03e102077e3e5de9dd9c04aba16ef014}
第三十五题
与三十四题一样只能在win系统下使用kali暂无平替方法。 import os import binascii import struct bp open(misc35.jpg, rb).read() for i in range(901,1500): #根据题目给的图片格式修改后缀 image_nametest/misc35/str(i).jpg imageopen(image_name,wb) #png #databp[:16] struct.pack(i, i)bp[20:24]bp[24:]#png #jpg databp[:157]bp[157:159] struct.pack(h, i)bp[161:] #jpg image.write(data) image.close() ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}
第三十六题
与三十四题一样只能在win系统下使用kali暂无平替方法。 import os import binascii import struct bp open(misc36.gif, rb).read() #for i in range(901,1500): for i in range(920,951): #根据题目给的图片格式修改后缀 image_nametest/misc36/str(i).jpg imageopen(image_name,wb) #png #databp[:16] struct.pack(i, i)bp[20:24]bp[24:]#png #jpg #databp[:157]bp[157:159] struct.pack(h, i)bp[161:] #jpg #gif databp[:38] struct.pack(h, i)[::-1]bp[40:42] bp[42:]#gif image.write(data) image.close() ctfshow{1ebf739f832906d60f57436b8179166f}
第三十七题
第8、13、20、30、33个图都有部分flag需要一个一个提取。 ctfshow{2056782cd57b13261dcbbe3d6eecda17}