misc5
no flag
被骗了 然后使用010Editor
在最下面发现了flag
ctfshow{2a476b4011805f1a8e4b906c8f84083e}
misc6
和上一题一样 搜索ctf
可以得到flag
。
misc7
直接使用 notepad
打开搜索flag
ctfshow{c5e77c9c289275e3f307362e1ed86bb7}
misc8
使用foremost
分离 发现里面有两张图片 其中一张就是flag
。
misc9
直接使用 HxD
打开 看到flag
misc10
使用binwalk -e
第一 10E5
打开就是flag
。
misc11
根据提示 在另一个图片 这里一个新的知识点 需要使用一个新工具:Tweakpng
把第二个 IDAT
数据删除 从新打开图片 发现 有flag
(就很神奇!)
misc12
这里又学了一个新的工具:PNG Debugger
具体使用可以参考这篇文章:https://blog.csdn.net/Goodric/article/details/119732559
发现跑出来的 数据块都是对的 和上一题一样 这里只是学一下这个工具 之前没用过 需要删除8个才能得到flag。
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进制的对象
ctfshow{ae6e3ea48f518b7e42d7de6f412f839a}
misc14
先使用binwalk -e
分离出来 然后使用dd
得到flag
。
dd if=misc14.jpg of=1.jpeg skip=2103 bs=1
misc15
直接文本编辑器打开 搜索 ctf
即可 得到flag
ctfshow{fbe7bb657397e6e0a6adea3e40265425}
misc16
还是 binwalk -e
分离 然后直接打开 第三个 LZMA
得到flag
。
ctfshow{a7e32f131c011290a62476ae77190b52}
misc17
使用 zsteg
这个工具 使用命令:zsteg -e extradata:0 misc17.png > 1.txt
提权出来即可得到flag
。
git clone https://github.com/zed-0xff/zsteg
cd zsteg/
gem install zsteg
在使用 binwalk -e 1.txt
分离一次 得到flag
。
misc18
提示:flag在标题、作者、照相机和镜头型号里 直接看图片属性即可得到flag
。
ctfshow{325d60c208f728ac17e5f02d4cf5a839}
misc19
根据提示:flag在主机上的文档名里 直接使用网站查看:https://exif.tuchong.com/view/12432993/
ctfshow{dfdcf08038cd446a5eb50782f8d3605d}
misc20
提示:flag在评论里。
ctfshow{c97964b1aecf06e1d79c21ddad593e42}
misc21
提示:flag在序号里。
因为我们知道 flag
的规律 直接提交肯定不对 所以需要把 xy
四段转为 16
进制 然后在加上flag
格式。
3902939465237161861910824528172980145261 #转16进制 即可
ctfshow{e8a221498d5c073b4084eb51b1a1686d}
misc22
这里要使用一个新工具:MagicEXIF 直接打开即可看到flag
。
magicexif元数据编辑器是一款非常专业的照片magicexif元数据编辑器,该软件可以通过分析照片的元数据以及编码特征来计算图像可信度,从而判断照片是否被修改,同时还能对相机的快门次数、镜头参数、光圈档位等进行查看和编辑。
ctfshow{dbf7d3f84b0125e833dfd3c80820a129}
misc23
提示:flag在时间里。
使用工具 exiftool
+ 图片名称
使用在线时间戳转换:https://tool.lu/timestamp/ 一共有四段
874865822 2699237688 2156662245 460377706 #全部转为16进制
ctfshow{3425649ea0e31938808c0de51b70ce6a}
misc41
这题还是比较有意思的 根据提示:H4ppy Apr1l F001's D4y!
愚人节到了,一群笨蛋往南飞,一会儿排成S字,一会儿排成B字。
使用Editor
打开 搜索 F001
可以看到 ctf
的样式 把他提取 出来即可。
ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}
图片篇(文件结构):
misc24
提示:flag在题目上面
根据提示应该是修改图片的高度 改为EE
misc25
提示:flag在图片下面
和上一题一样 使用 TweakPNG
查看图片发现图片的CRC
值不对
ctfshow{494f611cc5842dd597f460874ce38f57}
misc26
提示:flag还是在图片下面,但到底有多下面?
还是和上一题一样判断高度 然后00 96
修改为02 5E
得到图片 但是flag
不全。
需要得到实际长度的16
进制 使用脚本 最后得到实际高度为606
转为16进制是0x25e
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
ctfshow{94aef125e087a7ccf2e28e742efd704c}
misc27
提示:flag在图片下面
ctfshow{5cc4f19eb01705b99bf41492430a1a14}
misc28
放进010软件进行查看 修改高度9600
为FF00
或者使用Stegsolve
直接打开也可以得到flag
。
ctfshow{59c8bc525426166b1c893fe12a387fd7}
misc29
提示:flag在图片下面。
这题还是gif
格式文件 和上一题一样 但是这有10
帧数 需要把所有高度都改了9600
为FF00
然后使用Stegsolve
打开第8
帧就是flag。
ctfshow{03ce5be6d60a4b3c7465ab9410801440}
misc30
提示:正确的宽度是950。
是一个bmp
文件 010
打开修改宽度为950
即可得到flag
。
ctfshow{6db8536da312f6aeb42da2f45b5f213c}
misc31
使用010打开复制FF
到3A
结束 所有字节是487253
减去文件头53
个字节 RGB
每个像素由3
个字节表示
a = (487256-54)/ 3
a / = 150
print(a)
1082.6666666666667
ctfshow{fb09dcc9005fe3feeefb73646b55efd5}
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'))
ctfshow{685082227bcf70d17d1b39a5c1195aa9}
misc33
ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}
misc34
ctfshow{03e102077e3e5de9dd9c04aba16ef014}
misc35
ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}
misc36
ctfshow{1ebf739f832906d60f57436b8179166f}
misc37
提示:flag在图片里
直接在线gif 分离:https://tu.sioe.cn/gj/fenjie/
分别在 第9、14、21、31、34
帧
ctfshow{2056782cd57b13261dcbbe3d6eecda17}
misc38
提示:flag在图片里
这里使用这个工具:Honeyview
分别在第9、17、36、40
帧中 发现部分flag
最后进行拼接得到完整的flag
ctfshow{48b722b570c603ef58cc0b83bbf7680d}
misc39
提示:flag就像水,忽快忽慢地流
这里要使用一个工具:identify
sudo apt-get install imagemagick
identify -format "%T " misc39.gif > 1.txt #进行提取
得到的一串36
和37
,考虑把37
换成1
、36
换成0
,就得到长度为287
的二进制字符串,考虑每7
位转一个字符(正常是8
位一组),得到flag
。
s="11000111110100110011011100111101000110111111101111111011011010101100100111000011000101100101100110110011001110010111001011010111001101100010011011111000101100101011001001101100111000110010001110010110110011001111000010111001110010111000101100011110000101100000110100011010101110011111101"
flag=""
for i in range(41): #287//7
flag += chr(int(s[7\*i:7\*(i+1)],2))
print(flag)
ctfshow{52812ff995fb7be268d963a9ebca0459}
misc40
提示:flag就像歌,有长有短仿佛岁月悠悠
使用 Honeyview
查看 是一个 APNG
图片格式的动图
这里用到一个工具 APNG Disassembler
APNG
图片分解器(APNG Disassembler)
是一个用来分解APNG
图片的软件,使用这个工具你可以把APNG
动画图片中的每一帧都分解出来,并且把帧导出保存为图片文件
flag=""
for i in range(28,69): #flag内容从28位开始
f = open('apngframe'+str(i)+'.txt')
s = f.read()
flag += chr(int(s.split("/")[0][6:]))
print(flag)
ctfshow{95ca0297dff0f6b1bdaca394a6fcb95b}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!