ctfshow---misc入门练习-----2023.2.14
1,misc1
打开就是flag
2,misc2
打开发现.png然后改后缀为.png即可得到flag
3,misc3
发现为.bpg的后缀,用bpgview.exe打开即可得到flag
4,misc4
下载了6个.txt文件,然后直接全部改为.png后缀,打开拼接即可得到flag
5,misc5
用010打开,在最下面发现flag
6,misc6
用010打开,搜索ctf即可得到flag
7,misc7
同上。
8,misc8
用foremost分离,得到两张图片,其中一张即为flag
9,misc9
同6和7
10,misc10
binwalk分离,其中一张即为flag
11,misc11
用tweakpng打开,删去第二个idat块,再打开即为flag
12,misc12
同上,删去8个IDAT块,再打开即为flag
13,misc13
a="631A74B96685738668AA6F4B77B07B216114655336A5655433346578612534DD38EF66AB35103195381F628237BA6545347C3254647E373A64E465F136FA66F5341E3107321D665438F1333239E9616C7D"
r = ''
s=bytes.fromhex(a)
for i in range(0,len(s),2):
r+=chr(s[i])
print(r)
#fromhex函数把一串16进制字符,每两位转换成16进制的对象
14,misc14
先用binwalk分离,再使用dd
15,misc15
010打开搜索ctf即可得到flag
16,misc16
binwalk分离打开第三个
17,misc17
使用 zsteg
这个工具 使用命令:zsteg -e extradata:0 misc17.png > 1.txt
提权出来即可得到flag 在使用
binwalk -e 1.txt
分离一次 得到fla
18,misc18-misc21
用exiftool查看即可
19,misc22
这里要使用一个新工具:MagicEXIF 直接打开即可看到flag
20,misc23
exiftool查看,在线时间戳转换四个时间拼接到一起即可得到flag
21,misc41
这题还是比较有意思的 根据提示:H4ppy Apr1l F001's D4y!
愚人节到了,一群笨蛋往南飞,一会儿排成S字,一会儿排成B字。
使用Editor
打开 搜索 F001
可以看到 ctf
的样式 把他提取 出来即可
22,misc24-misc25
改高度即可
23,misc26
lag还是在图片下面,但到底有多下面?
还是和上一题一样判断高度 然后00 96
修改为02 5E
得到图片 但是flag
不全
import os
import binascii
import struct
crcbp = open("misc26.png", "rb").read() #打开图片
for i in range(1024):
for j in range(1024):
data = crcbp[12:16] + struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]#从IHDR开始17个字节,其中宽和高用i和j代替,并以4个字节存放i和j。
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0xec9ccbc6): #010Editor第二行倒数3字节,加第三行第一字节。按顺序写就行,不用改。
print(i, j)
print('hex:', hex(i), hex(j))
#900 606
#hex: 0x384 0x25e
24,misc27
010打开拉到最下面
25,misc28
放进010软件进行查看 修改高度9600
为FF00
或者使用Stegsolve
直接打开也可以得到flag
26,misc29
题还是gif
格式文件 和上一题一样 但是这有10
帧数 需要把所有高度都改了9600
为FF00
然后使用Stegsolve
打开第8
帧就是flag
27,misc30
一个bmp
文件 010
打开修改宽度为950
即可得到flag
28,misc31
使用010打开复制FF
到3A
结束 所有字节是487253
减去文件头53
个字节 RGB
每个像素由3
个字节表示
a = (487256-54)/ 3
a / = 150
print(a)
1082.6666666666667
29,misc32
提示:高度是正确的,但正确的宽度是多少呢
先爆破出正确的宽高 然后使用010
宽度修改为1044
打开即可得到flag
import zlib
import struct
# 同时爆破宽度和高度
filename = "misc32.png"
with open(filename, 'rb') as f:
all_b = f.read()
data = bytearray(all_b[12:29])
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 = zlib.crc32(data)
#替换成图片的crc
if crc32result == 0xE14A4C0B:
print("宽为:", end = '')
print(width, end = ' ')
print(int.from_bytes(width, byteorder='big'))
print("高为:", end = '')
print(height, end = ' ')
print(int.from_bytes(height, byteorder='big'))
30,misc37
在线gif分离 https://tu.sioe.cn/gj/fenjie/
31,misc38
这里使用这个工具:Honeyview
分别在第9、17、36、40
帧中 发现部分flag
最后进行拼接得到完整的flag
32,misc39
这里要使用一个工具:identify
33,misc40
flag就像歌,有长有短仿佛岁月悠悠
使用 Honeyview 查看 是一个 APNG 图片格式的动图
这里用到一个工具 APNG Disassembler
APNG图片分解器(APNG Disassembler)是一个用来分解APNG图片的软件,使用这个工具你可以把APNG动画图片中的每一帧都分解出来,并且把帧导出保存为图片文件
34,misc42
flag有多长?2cm……不好意思打错了,41位
使用010
发现有很多 IDAT
块(48个)
使用工具:TweakPNG
打开查看IDAT
块 将长度进行chr
转换
35,misc43
使用 PNG Debugger
查看 CRC32
的值都是错的
将错误的IDAT
块的crc-code
提取出来,拼接起来转字符串即可得到flag
36,misc51
from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
dic = {}
for h in range(900):
for w in range(150):
s = im.getpixel((h,w))
dic[s] = dic.get(s,0)+1
lt = list(dic.items())
lt.sort(key = lambda x:x[-1])
print(lt)
再次便利 然后运行脚本 得到flag
from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
for h in range(900):
for w in range(150):
s = im.getpixel((h,w))
if s == (64, 96, 128) or s == (128, 96, 64):
img.putpixel([h, w], (255, 255, 255))
img.show()
37,misc52
from PIL import Image
im=Image.open('misc52.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
lt = [(130, 176, 116),(72, 217, 123),(146, 16, 141),(130, 241, 105),(251, 160, 136),(5, 129, 88),(167, 46, 187),(20, 65, 141),(96, 231, 225),(196, 144, 18)]
for h in range(900):
for w in range(150):
s = im.getpixel((h,w))
if s in lt:
img.putpixel([h, w], (255, 255, 255))
img.show()
38,misc53
39,misc54
同上,由于是列,稍改一下
40,misc55
这里的图片是反过来的 使用Stegsolve
发现通道存在隐写但是提取不了 所以 需要把图片发过来在进行操作 使用脚本
from PIL import Image
img = Image.open('misc55.png')
img.transpose(Image.FLIP_TOP_BOTTOM).save('out.png')
41,misc56
使用工具Stegsolve
R4、R2、R1、G4、G2、G1
通道有隐写痕迹
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具