misc24
misc25
misc26
misc27
misc28
misc29
misc30
misc31
misc32
misc33
misc34
misc35
misc36
misc37
misc38
misc39
misc40
misc42
misc43
misc44
misc45
misc24
得到一个bmp根据标题提示,格式图片文件:flag在图片上方 知识点:bmp图片格式(优点:无损压缩,图片质量好。)(缺点:文件太大) 使用010 Editor打开 修改图片高度 将0096 修改为00F0
得到flag ctfshow{dd7d8bc9e5e873eb7da3fa51d92ca4b7}
misc25
得到一个png格式的图片 类似于24题 题目提示:flag在图片下面 有时候觉得手工太累了,找个大老板的脚本 一键破解png图片宽高
import struct import sys import binascii file = input("图片地址:") fr = open(file,'rb').read() data = bytearray(fr[0x0c:0x1d]) crc32key = eval('0x' str(binascii.b2a_hex(fr[0x1d:0x)(2:-1) #原始代码: crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",'')) n = 4095 for w in range(n): width = bytearray(struct.pack('>i', w)) for h in range(n): height = bytearray(struct.pack('>i', h)) for x in range(4): data[x 4] = width[x] data[x 8] = height[x] crc32result = binascii.crc32(data) & 0xffffffff if crc32result == crc32key: print(width,height) newpic = bytearray(fr) for x in range(4): newpic[x 16] = width[x] newpic[x 20] = height[x] fw = open(file '.png','wb') fw.write(newpic) fw.close sys.exit()
得到flag ctfshow{494f611cc5842dd597f460874ce38f57}
misc26
还是png格式图片, 知识点:png格式图片(优点:可保存透明背景图片)(缺点:图片质量中等) 用脚本爆破宽高 得到:ctfshow{94aef1 True height(hex) of this picture 087a7ccf2e28e742efd704c} 16进制需要添加实际高度 由于实际高度已经爆破,直接看属性高度为606 hex(606)=0x25e 去掉0X 得到flag ctfshow{94aef125e087a7ccf2e28e742efd704c}
misc27
得到一个jpg图片文件,根据题目提示,flag下图。 知识点:png图片格式(优点:文件小,有利于网络传输)(缺点:图片质量损失) 修改图片高度 将0096 修改为00FF
得到flag ctfshow{5cc4f19eb01705b99bf41492430a1a14}
misc28
得到一个gif根据标题提示,格式图片:flag在图片下方 知识点:gif格式图片 (优点:动画存储格式) (缺点:最多256色,画质差) 放入010软件查看 修改高度9600 为FF00
得到flag: ctfshow{59c8bc525426166b1c893fe12a387fd7}
misc29
得到一个gif根据标题提示,格式图片:flag在图片下方 将010放入查看源代码。发现这张共有10帧 每帧高96000 修改为FF00 修改后,用 StegSlove 打开,点击 Analyse 选择 Frame Browser 您可以查看每帧的图片 在第帧时,看到flag ctfshow{03ce5be6d60a4b3c7465ab9410801440}
misc30
得到一个bmp根据标题提示,格式图片的正确宽度为:950 根据提示,我们可以知道图片宽度已经修改了 打开010软件查看源代码 知识点:BMP格式图片的宽高16进制需要倒着写 修改高度:8403B603 得到flag ctfshow{6db8536da312f6aeb42da2f45b5f213c}
misc31
得到一个BMP根据标题提示,格式图片的高度是正确的,但是正确的宽度是多少? 根据提示修改宽度, 打开010软件查看源代码 知识点:BMP格式图片的宽高16进制需要倒着写 不断尝试,得到 修改高度:8403为3904 得到flag ctfshow{fb09dcc9005fe3feeefb73646b55efd5}
misc32
得到一个png格式图片,根据题目提示:高度是正确的,但正确的宽度是多少呢? 懒,直接丢脚本 脚本查看misc25题 得到flag ctfshow{685082227bcf70d17d1b39a5c1195aa9}
misc33
得到一个png格式图片。根据题目提示:提问者丧心,高度也修改了 就是喜欢png修改格式宽度和高度,丢失脚本! 得到flag ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}
misc34
得到一个png格式图片,根据题目提示:出题人狗跳墙,把IHDR块的CRC也改改变了,但我们知道正确的宽度必须大于900 这确实有点狗,改CRC,因为脚本是基础CRC爆PNG图片宽高 还是老老实实 手卷(修改时注意图片中间的线,越明显越近)
misc35
得到一个jpg格式的图片,根据题目提示:出题人负隅顽抗,但我们知道正确宽度肯定大于900 使用010打开,查看源代码 一开始修改宽度到1000发现没有显示,调整了下高度,发现有东西 修改高度为:662 0096修改为0296 修改宽度为:996 03E4修改为03E4 得到flag ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}
misc36
得到一个gif格式的图片,根据题目提示:出题人坦白从宽,正确的宽度在920-950之间 使用010打开后,手撸了一会儿。提高了高度660 最后搬了大佬的代码 import zlib import struct filename = "misc36.gif" with open(filename, 'rb') as f: all_b = f.read() for i in range(920,951): name = str(i) + ".gif" f1 = open(name,"wb") im = all_b[:38]+struct.pack('>h',i)[::-1]+all_b[40:] f1.write(im) f1.close() 宽度在941能看到flag 得到flag ctfshow{1ebf739f832906d60f57436b8179166f}
misc37
得到一个gif格式的图片,根据题目提示:flag在图片里 使用在线gif动态图片分解得到
https://tu.sioe.cn/gj/fenjie/
得到flag 注意根据图片帧的顺序位置进行组合 ctfshow{2056782cd57b13261dcbbe3d6eecda17}
misc38
得到一个png格式的图片,根据题目提示:flag在图片里 使用binwalk进行查看分解发现全是没用的东西 猜测为apng动态图片 使用apngdisassembler进行取帧 得到flag ctfshow{48b722b570c603ef58cc0b83bbf7680d}
misc39
得到一个gif格式的图片,题目提示:flag就像水,忽快忽慢地流 根据题目猜测动态图 进行取帧利用不同帧之间的间隔时间来隐写的。(第一次遇见) 使用kali的identify工具进行提取
安装命令:sudo apt-get install imagemagick
基本的命令格式:
identify [options] input-fileidentify:命令名称
options:参数
input-file:文件名。
提取命令:identify -format "%T " misc39.gif > 1.txt
得到的一串36和37,考虑把37换成1、36换成0 得到一串2进制,长度为287 7位一个值,为什么是7位。问套神
s="11000111110100110011011100111101000110111111101111111011011010101100100111000011000101100101100110110011001110010111001011010111001101100010011011111000101100101011001001101100111000110010001110010110110011001111000010111001110010111000101100011110000101100000110100011010101110011111101"
flag=""
for i in range(41): #287//7
flag += chr(int(s[7i:7(i+1)],2))
print(flag)
得到flag ctfshow{52812ff995fb7be268d963a9ebca0459}
misc40
得到一个png格式得图片,根据题目提示:flag就像歌,有长有短仿佛岁月悠悠 用图片浏览器打开,发现是一张动图,apng图片 使用apngdisassembler进行取帧 工具处理图片后,除了每一帧图片外,每张图片还带有一个 txt 文件 没看懂,找到大佬得wp 从第 28 个 txt 文本开始,到最后的第 68 个,前面的为干扰数据。共 41 个文本,刚好每个文本中的数字转换为一个字符,组成 41 个字符的 flag 。
flag=""
for i in range(28,69): #flag内容从28位开始
f = open('C:/Users/Goodric/Desktop/mix/apngframe'+str(i)+'.txt')
s = f.read()
flag += chr(int(s.split("/")[0][6:]))
print(flag)
得到flag ctfshow{95ca0297dff0f6b1bdaca394a6fcb95b}
misc42
题目提示:flag有多长?2cm……不好意思打错了,41位 得到一个png图片 使用010打开发现IDAT模块特别多 使用TweakPNG打开查看IDAT块
将长度进行chr转换
s = [229,152,191,229,152,191,49,99,116,102,115,104,111,119,123,48,55,56,99,98,100,48,102,57,99,56,100,51,102,50,49,53,56,101,55,48,53,50,57,102,56,57,49,51,99,54,53,125]
for i in s:
print(chr(i),end='')
得到 å¿å¿1ctfshow{078cbd0f9c8d3f2158e70529f8913c65} 得到flag ctfshow{078cbd0f9c8d3f2158e70529f8913c65}
misc43
得到一个png格式的图片,题目提示:错误中隐藏着通往正确答案的道路 使用TweakPNG打开图片,发现CRC报错 提取错误的CRC 利用PCRT提取
PCRT:一款自动化检测修复PNG损坏的取证工具
可以在kali中安装PCRT:git clone https://github.com/sherlly/PCRT.git
然后 python PCRT.py -y -v -i misc44.png > 1.txt
____ ____ ____ _____
| _ \ / ___| _ \_ _|
| |_) | | | |_) || |
| __/| |___| _ < | |
|_| \____|_| \_\|_|
PNG Check & Repair Tool
Project address: https://github.com/sherlly/PCRT
Author: sherlly
Version: 1.1
[Finished] Correct PNG header
[Finished] Correct IHDR CRC (offset: 0x1D): 09DAD161
[Finished] IHDR chunk check complete (offset: 0x8)
[Finished] Correct IDAT chunk data length (offset: 0x21 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x1A9)
chunk crc: E59387E5
correct crc: 8385F691
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x1AD length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x335)
chunk crc: 93A62E63
correct crc: 42434298
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x339 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x4C1)
chunk crc: 74667368
correct crc: 4462C3A1
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x4C5 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x64D)
chunk crc: 6F777B36
correct crc: 397611E1
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x651 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x7D9)
chunk crc: 65623235
correct crc: 4F02AFA2
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x7DD length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x965)
chunk crc: 38396666
correct crc: DEFED27F
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x969 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0xAF1)
chunk crc: 66663565
correct crc: 04F13EC2
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0xAF5 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0xC7D)
chunk crc: 33393066
correct crc: 665B7BEF
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0xC81 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0xE09)
chunk crc: 65366238
correct crc: 66671DA0
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0xE0D length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0xF95)
chunk crc: 37353034
correct crc: 9922F98F
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0xF99 length: 180)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x1121)
chunk crc: 64626330
correct crc: 26BC187A
[Finished] Successfully fix crc
[Finished] Correct IDAT chunk data length (offset: 0x1125 length: 93)
[0;32m[Detected][0m Error IDAT CRC found! (offset: 0x11C0)
chunk crc: 3839327D
correct crc: EE9D6CB4
[Finished] Successfully fix crc
[Finished] IDAT chunk check complete (offset: 0x21)
[Finished] Correct IEND chunk
[Finished] IEND chunk check complete
[Finished] PNG check complete
[0;31m[Error][0m No module named PIL
Try 'pip install PIL' to use it
提取正确的CRC进行HAX
09DAD161E59387E593A62E63746673686F777B36656232353839666666663565333930666536623837353034646263303839327D
得到flag ctfshow{6eb2589ffff5e390fe6b87504dbc0892}
misc44
得到一个png格式的图片,题目提示:错误中还隐藏着坑 别用TweakPNG,千万别用!!! 看了大佬的WP得知正确的CRC是0 错误的是1 使用PCRT进行提取 提取后,使用脚本解出来
f = open('123.txt')
res = ''
while 1:
c = f.readline()
if c:
if 'chunk crc' in c:
# print(c)
res+='0'
elif 'Correct IDAT CRC' in c:
res+='1'
else:
break
print(res)
print(len(res))
for i in range(len(res)//8):
a = res[i*8:i*8+8]
try:
print(chr(int(a,2)),end='')
except:
pass
得到flag ctfshow{cc1af32bf96308fc1263231be783f69e}
misc45
得到一个png格式的文件,题目提示:有时候也需要换一换思维格式 没看出来这题是为了告诉你无损压缩的图像格式的特性以及BMP的结构 提示都告诉你了
细想题目提示:换思维格式!(换格式) 嗯...
(图片格式转换器在线)
https://www.gaitubao.com/jpg-gif-png
将PNG格式转化成BMP 使用binwalk进行分解 得到gz压缩文件,打开后 得到flag ctfshow{057a722a5587979c34966c2436283e70}
持续更新中