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通道有隐写痕迹

 

posted @   木偶2313  阅读(959)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示